2 using System.Collections.Generic;
\r
3 using System.ComponentModel;
\r
5 using System.Drawing;
\r
7 using System.Windows.Forms;
\r
8 using System.Threading;
\r
9 using System.Diagnostics;
\r
10 using System.Runtime.InteropServices;
\r
14 public partial class frmQueue : Form
\r
17 private delegate void ProgressUpdateHandler();
\r
18 private delegate void getQueueItem();
\r
19 private delegate void setEncoding();
\r
20 private delegate void modifyQueue();
\r
22 // Everything starts Here
\r
25 InitializeComponent();
\r
28 #region encode queue Handlnig
\r
31 Boolean cancel = false;
\r
32 string foundQuery = "";
\r
33 [DllImport("user32.dll")]
\r
34 public static extern void LockWorkStation();
\r
35 [DllImport("user32.dll")]
\r
36 public static extern int ExitWindowsEx(int uFlags, int dwReason);
\r
39 private void btn_q_encoder_Click(object sender, EventArgs e)
\r
41 // Reset some values
\r
43 lbl_status.Visible = false;
\r
49 if (listview_queue.Items.Count != 0)
\r
51 // Setup or reset some values
\r
52 btn_cancel.Visible = true;
\r
53 progressBar.Value = 0;
\r
54 lbl_progressValue.Text = "0 %";
\r
55 progressBar.Step = 100 / listview_queue.Items.Count;
\r
56 progressBar.Update();
\r
57 //ThreadPool.QueueUserWorkItem(startProc);
\r
58 // Testing a new way of launching a thread. Hopefully will fix a random freeze up of the main thread.
\r
59 Thread theQ = new Thread(startProc);
\r
63 catch (Exception exc)
\r
65 MessageBox.Show(exc.ToString());
\r
69 private void btn_cancel_Click(object sender, EventArgs e)
\r
72 btn_cancel.Visible = false;
\r
73 MessageBox.Show("No further items on the queue will start. The current encode process will continue until it is finished. \nClick 'Encode Video' when you wish to continue encoding the queue.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
76 private void startProc(object state)
\r
80 while (listview_queue.Items.Count != 0)
\r
83 string query = foundQuery;
\r
84 query = query.Replace("ListViewItem: { ", "").Replace(" }", "").Trim();
\r
88 Functions.CLI process = new Functions.CLI();
\r
89 Process hbProc = process.runCli(this, query, false, false, false, false);
\r
91 hbProc.WaitForExit();
\r
106 // Do something whent he encode ends.
\r
107 switch (Properties.Settings.Default.CompletionOption)
\r
110 System.Diagnostics.Process.Start("Shutdown", "-s -t 60");
\r
113 ExitWindowsEx(0, 0);
\r
116 Application.SetSuspendState(PowerState.Suspend, true, true);
\r
119 Application.SetSuspendState(PowerState.Hibernate, true, true);
\r
121 case "Lock System":
\r
124 case "Quit HandBrake":
\r
125 Application.Exit();
\r
131 catch (Exception exc)
\r
133 MessageBox.Show(exc.ToString());
\r
137 private void getItem()
\r
141 if (this.InvokeRequired)
\r
143 this.BeginInvoke(new getQueueItem(getItem));
\r
145 foundQuery = this.listview_queue.Items[0].ToString();
\r
153 private void setEncValue()
\r
157 if (this.InvokeRequired)
\r
159 this.BeginInvoke(new setEncoding(setEncValue));
\r
162 string query = null;
\r
163 ListView.SelectedListViewItemCollection name = null;
\r
164 name = listview_queue.SelectedItems;
\r
166 if (listview_queue.SelectedItems.Count != 0)
\r
167 query = name[0].SubItems[0].Text;
\r
169 // found query is a global varible
\r
170 Functions.QueryParser parsed = Functions.QueryParser.Parse(foundQuery);
\r
171 lbl_source.Text = parsed.Source;
\r
172 lbl_dest.Text = parsed.Destination;
\r
175 if (parsed.DVDTitle == 0)
\r
176 lbl_title.Text = "Auto";
\r
178 lbl_title.Text = parsed.DVDTitle.ToString();
\r
180 string chatpers = "";
\r
181 if (parsed.DVDChapterStart == 0)
\r
183 lbl_chapt.Text = "Auto";
\r
187 chatpers = parsed.DVDChapterStart.ToString();
\r
188 if (parsed.DVDChapterFinish != 0)
\r
189 chatpers = chatpers + " - " + parsed.DVDChapterFinish;
\r
190 lbl_chapt.Text = parsed.DVDChapterStart + chatpers;
\r
193 lbl_vEnc.Text = parsed.VideoEncoder;
\r
194 lbl_aEnc.Text = parsed.AudioEncoder;
\r
203 private void updateUIElements()
\r
207 if (this.InvokeRequired)
\r
209 this.BeginInvoke(new ProgressUpdateHandler(updateUIElements));
\r
212 this.listview_queue.Items.RemoveAt(0);
\r
214 progressBar.PerformStep();
\r
215 lbl_progressValue.Text = string.Format("{0} %", progressBar.Value);
\r
216 progressBar.Update();
\r
218 catch (Exception exc)
\r
220 MessageBox.Show(exc.ToString());
\r
224 private void resetQueue()
\r
228 if (this.InvokeRequired)
\r
230 this.BeginInvoke(new ProgressUpdateHandler(resetQueue));
\r
234 if (cancel == true)
\r
236 lbl_status.Visible = true;
\r
237 lbl_status.Text = "Encode Queue Cancelled!";
\r
241 lbl_status.Visible = true;
\r
242 lbl_status.Text = "Encode Queue Completed!";
\r
244 btn_cancel.Visible = false;
\r
246 lbl_progressValue.Text = "0 %";
\r
247 progressBar.Value = 0;
\r
248 progressBar.Update();
\r
250 lbl_source.Text = "-";
\r
251 lbl_dest.Text = "-";
\r
252 lbl_vEnc.Text = "-";
\r
253 lbl_aEnc.Text = "-";
\r
254 lbl_title.Text = "-";
\r
255 lbl_chapt.Text = "-";
\r
257 catch (Exception exc)
\r
259 MessageBox.Show(exc.ToString());
\r
265 #region Queue Management
\r
266 private void btn_up_Click(object sender, EventArgs e)
\r
270 if (listview_queue.Items.Count != 0)
\r
272 selIdx = listview_queue.SelectedItems[0].Index;
\r
273 // ignore moveup of row(0)
\r
277 // move the subitems for the previous row
\r
278 // to cache to make room for the selected row
\r
279 for (int i = 0; i < listview_queue.Items[selIdx].SubItems.Count; i++)
\r
281 cache = listview_queue.Items[selIdx - 1].SubItems[i].Text;
\r
282 listview_queue.Items[selIdx - 1].SubItems[i].Text =
\r
283 listview_queue.Items[selIdx].SubItems[i].Text;
\r
284 listview_queue.Items[selIdx].SubItems[i].Text = cache;
\r
286 listview_queue.Items[selIdx - 1].Selected = true;
\r
287 listview_queue.Refresh();
\r
288 listview_queue.Focus();
\r
292 private void btn_down_Click(object sender, EventArgs e)
\r
297 if (listview_queue.Items.Count != 0)
\r
299 selIdx = listview_queue.SelectedItems[0].Index;
\r
301 // ignore movedown of last item
\r
302 if (selIdx == listview_queue.Items.Count - 1)
\r
304 // move the subitems for the next row
\r
305 // to cache so we can move the selected row down
\r
306 for (int i = 0; i < listview_queue.Items[selIdx].SubItems.Count; i++)
\r
308 cache = listview_queue.Items[selIdx + 1].SubItems[i].Text;
\r
309 listview_queue.Items[selIdx + 1].SubItems[i].Text =
\r
310 listview_queue.Items[selIdx].SubItems[i].Text;
\r
311 listview_queue.Items[selIdx].SubItems[i].Text = cache;
\r
313 listview_queue.Items[selIdx + 1].Selected = true;
\r
314 listview_queue.Refresh();
\r
315 listview_queue.Focus();
\r
319 private void btn_delete_Click(object sender, EventArgs e)
\r
321 for (int i = listview_queue.SelectedItems.Count - 1; i >= 0; i--)
\r
323 ListViewItem item = listview_queue.SelectedItems[i];
\r
324 listview_queue.Items.Remove(item);
\r
329 #region Modify Queue
\r
332 private void listview_queue_SelectedIndexChanged(object sender, EventArgs e)
\r
335 listCount = listview_queue.Items.Count;
\r
338 private void modQ()
\r
342 if (this.InvokeRequired)
\r
344 this.BeginInvoke(new modifyQueue(modQ));
\r
347 string query = null;
\r
348 ListView.SelectedListViewItemCollection name = null;
\r
349 name = listview_queue.SelectedItems;
\r
351 if (listview_queue.SelectedItems.Count != 0)
\r
352 query = name[0].SubItems[0].Text;
\r
354 txt_editQuery.Text = query;
\r
362 private void btn_update_Click(object sender, EventArgs e)
\r
366 if (txt_editQuery.Text != "")
\r
368 if (listview_queue.Items.Count != listCount)
\r
370 MessageBox.Show("Unable to modify the selected item. The number of items on the list has changed. \nPlease avoid modifying an item when a new encode is about to start!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
374 if (listview_queue.SelectedItems != null)
\r
376 int selectItm = listview_queue.SelectedIndices[0];
\r
377 listview_queue.Items[selectItm].Text = txt_editQuery.Text;
\r
382 catch (Exception exc)
\r
384 MessageBox.Show(exc.ToString());
\r
390 protected override void OnClosing(CancelEventArgs e)
\r
397 private void btn_Close_Click(object sender, EventArgs e)
\r