OSDN Git Service

a49b015bc7a8eab45e590fce188d12f724d92d90
[handbrake-jp/handbrake-jp-git.git] / win / Handbrake / frmQueue.vb
1 Imports System.IO\r
2 Imports System\r
3 Imports System.Diagnostics\r
4 Imports System.Threading\r
5 Imports System.ComponentModel\r
6 Imports System.Windows.Forms\r
7 \r
8 Public Class frmQueue\r
9 \r
10     \r
11     Delegate Sub SetTextCallback(ByVal [text] As Integer)\r
12 \r
13     '#\r
14     '# Buttons\r
15     '#\r
16     Private Sub btn_delete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_delete.Click\r
17         list_queue.Items.Remove(list_queue.SelectedItem)\r
18     End Sub\r
19 \r
20     Private Sub btn_Close_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Close.Click\r
21         Me.Hide()\r
22     End Sub\r
23 \r
24     '# STAGE 1\r
25     Private Sub btn_q_encoder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_q_encoder.Click\r
26 \r
27         Dim ApplicationPath As String = Application.StartupPath ' The applications start parth\r
28         Dim encodeItems As Integer = list_queue.Items.Count ' Amount of items to encode\r
29 \r
30         encodeItems = encodeItems - 1\r
31 \r
32         'Start the encode process\r
33         Try\r
34             Dim params As String = list_queue.Items.Item(encodeItems)\r
35             Dim proc As New System.Diagnostics.Process\r
36             proc = System.Diagnostics.Process.Start("""" + ApplicationPath + "\hbcli.exe""", params)\r
37 \r
38             If My.Settings.Priority <> "Normal" Then\r
39                 Dim level As String\r
40                 level = My.Settings.Priority\r
41 \r
42                 Select Case level\r
43                     Case "Realtime"\r
44                         proc.PriorityClass = ProcessPriorityClass.RealTime\r
45                     Case "High"\r
46                         proc.PriorityClass = ProcessPriorityClass.High\r
47                     Case "Above Normal"\r
48                         proc.PriorityClass = ProcessPriorityClass.AboveNormal\r
49                     Case "Below Normal"\r
50                         proc.PriorityClass = ProcessPriorityClass.BelowNormal\r
51                     Case "Low"\r
52                         proc.PriorityClass = ProcessPriorityClass.Idle\r
53                 End Select\r
54             End If\r
55 \r
56         Catch ex As Exception\r
57             MessageBox.Show("Unable to launch the encoder. Queue run failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand)\r
58             MessageBox.Show(ex.ToString)\r
59         End Try\r
60 \r
61         ' Lets start the process monitor\r
62         hbcliMonitor = New ProcessMonitor()\r
63         Dim t = New Thread(AddressOf hbcliMonitor.tmrProcCheck)\r
64         t.Start()\r
65 \r
66         Try\r
67             ' When this task is finished, remove it from the queue\r
68             list_queue.Items.RemoveAt(encodeItems)\r
69         Catch ex As Exception\r
70             ' quietly ignore the error should the user try to encode with nothing on the queue by mistake.\r
71         End Try\r
72         \r
73     End Sub\r
74 \r
75 \r
76 \r
77     '# STAGE 2\r
78     Sub TheadCompletedMonitor(ByVal isRunning As Integer) Handles hbcliMonitor.ThreadComplete\r
79 \r
80         Dim ApplicationPath As String = Application.StartupPath ' The applications start parth\r
81         Dim encodeItems As Integer = list_queue.Items.Count ' Amount of items to encode\r
82 \r
83         encodeItems = encodeItems - 1\r
84 \r
85 \r
86         If encodeItems = -1 Then\r
87             MessageBox.Show("Status: Queue completed!")\r
88         Else\r
89             'Start the encode process\r
90             Try\r
91                 Shell("""" + ApplicationPath + "\hbcli.exe""" + list_queue.Items.Item(encodeItems))\r
92             Catch ex As Exception\r
93                 MessageBox.Show("Unable to launch the encoder. Queue run failed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand)\r
94                 MessageBox.Show(ex.ToString)\r
95             End Try\r
96 \r
97             ' Lets start the process monitor\r
98             hbcliMonitor = New ProcessMonitor()\r
99             Dim t = New Thread(AddressOf hbcliMonitor.tmrProcCheck)\r
100             t.Start()\r
101 \r
102             ' When this task is finished, remove it from the queue\r
103             Me.SetText(encodeItems)\r
104             'MsgBox("1 Enocde Process Finished: ", isRunning)\r
105         End If\r
106 \r
107     End Sub\r
108 \r
109 \r
110     '#\r
111     '# Trying to safely alter stuff on the worker thread here.\r
112     '#\r
113     Private Sub SetText(ByVal [text] As Integer)\r
114         If Me.list_queue.InvokeRequired Then\r
115             Dim d As New SetTextCallback(AddressOf SetText)\r
116             Me.Invoke(d, New Object() {[text]})\r
117         Else\r
118             Me.list_queue.Items.RemoveAt([text])\r
119         End If\r
120     End Sub\r
121 \r
122     '#\r
123     '# Process Monitoring Stuff Here\r
124     '#\r
125 \r
126     Dim WithEvents hbcliMonitor As ProcessMonitor\r
127 \r
128     Public Class ProcessMonitor\r
129         Public isRunning As Integer = 1\r
130 \r
131         Public Event ThreadComplete(ByVal isRunning As Integer)\r
132 \r
133         Public Sub tmrProcCheck()\r
134             Dim isRunning As Integer\r
135             Dim process2 As Process = New Process\r
136             Dim running As Boolean = True\r
137             Dim hbProcess As Process() = Process.GetProcesses()\r
138 \r
139             While running\r
140                 Thread.Sleep(1000)\r
141                 hbProcess = Process.GetProcesses()\r
142                 running = False\r
143                 Dim processArr2 As Process() = hbProcess\r
144                 Dim i As Integer = 0\r
145                 While i < CInt(processArr2.Length)\r
146                     Dim process1 As Process = processArr2(i)\r
147                     If process1.ProcessName.Equals("hbcli") Then\r
148                         running = True\r
149                     End If\r
150                     i = i + 1\r
151                 End While\r
152             End While\r
153             isRunning = 0\r
154             RaiseEvent ThreadComplete(isRunning)\r
155         End Sub\r
156     End Class\r
157 \r
158     Private Sub btn_up_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_up.Click\r
159         Dim count As Integer = list_queue.Items.Count\r
160         Dim itemToMove As Integer = list_queue.SelectedIndex\r
161         Dim previousItem As String = ""\r
162         Dim previousItemint As Integer = 0\r
163 \r
164         If (itemToMove > 0) Then\r
165             previousItemint = itemToMove - 1\r
166             previousItem = list_queue.Items.Item(previousItemint)\r
167             list_queue.Items.Item(previousItemint) = list_queue.Items.Item(itemToMove)\r
168             list_queue.Items.Item(itemToMove) = previousItem\r
169             list_queue.SelectedIndex = list_queue.SelectedIndex - 1\r
170         End If\r
171     End Sub\r
172 \r
173     Private Sub btn_down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_down.Click\r
174         Dim count As Integer = list_queue.Items.Count\r
175         Dim itemToMove As Integer = list_queue.SelectedIndex\r
176         Dim itemAfter As String = ""\r
177         Dim itemAfterInt As Integer = 0\r
178 \r
179 \r
180         MessageBox.Show(count)\r
181         MessageBox.Show(itemToMove)\r
182         If (itemToMove < (count - 1)) Then\r
183             itemAfterInt = itemToMove + 1\r
184             itemAfter = list_queue.Items.Item(itemAfterInt)\r
185             list_queue.Items.Item(itemAfterInt) = list_queue.Items.Item(itemToMove)\r
186             list_queue.Items.Item(itemToMove) = itemAfter\r
187             list_queue.SelectedIndex = list_queue.SelectedIndex + 1\r
188         End If\r
189     End Sub\r
190 End Class