using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.IO; using System.Windows.Forms; namespace Handbrake.Functions { public class Queue { ArrayList queue = new ArrayList(); ArrayList lastQuery; int id = 0; // Unique identifer number for each job public ArrayList getQueue() { return queue; } /// /// Get's the next CLI query for encoding /// /// String public String getNextItemForEncoding() { Object query = queue[0]; lastQuery = (ArrayList)query; remove(0); // Remove the item which we are about to pass out. return lastQuery[1].ToString(); } /// /// Add's a new item to the queue /// /// String public void add(string query) { // Creates a new job with a unique identifer and cli query ArrayList newJob = new ArrayList(); newJob.Add(id); newJob.Add(query); id++; // Adds the job to the queue queue.Add(newJob); } /// /// Removes an item from the queue. /// /// Index /// Bolean true if successful public Boolean remove(int index) { queue.RemoveAt(index); return true; } /// /// Returns how many items are in the queue /// /// Int public int count() { return queue.Count; } /// /// Get's the last query to be selected for encoding by getNextItemForEncoding() /// /// String public string getLastQuery() { return lastQuery[1].ToString(); } /// /// Move an item with an index x, up in the queue /// /// Int public void moveUp(int index) { if (index != 0) { string item = queue[index].ToString(); queue.Insert((index - 1), item); queue.RemoveAt((index + 1)); } } /// /// Move an item with an index x, down in the queue /// /// Int public void moveDown(int index) { if (index != queue.Count - 1) { string item = queue[index].ToString(); queue.Insert((index + 2), item); queue.RemoveAt((index)); } } /// /// Writes the current queue to disk. hb_queue_recovery.dat /// This function is called after getNextItemForEncoding() /// public void write2disk(string file) { try { string tempPath = ""; if (file == "hb_queue_recovery.dat") tempPath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.dat"); else tempPath = file; using (StreamWriter writer = new StreamWriter(tempPath)) { foreach (ArrayList item in queue) { writer.WriteLine(item[1].ToString()); } writer.Close(); writer.Dispose(); } } catch (Exception) { // Any Errors will be out of diskspace/permissions problems. Don't report them as they'll annoy the user. } } /// /// Writes the current queue to disk to the location specified in file /// /// public void writeBatchScript(string file) { string queries = ""; foreach (ArrayList queue_item in queue) { string q_item = queue_item[1].ToString(); string fullQuery = '"' + Application.StartupPath.ToString() + "\\HandBrakeCLI.exe" + '"' + q_item; if (queries == string.Empty) queries = queries + fullQuery; else queries = queries + " && " + fullQuery; } string strCmdLine = queries; if (file != "") { try { // Create a StreamWriter and open the file, Write the batch file query to the file and // Close the stream StreamWriter line = new StreamWriter(file); line.WriteLine(strCmdLine); line.Close(); MessageBox.Show("Your batch script has been sucessfully saved.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } catch (Exception) { MessageBox.Show("Unable to write to the file. Please make sure that the location has the correct permissions for file writing.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } } /// /// Recover the queue from hb_queue_recovery.dat /// public void recoverQueue(string file) { try { string tempPath = ""; if (file == "hb_queue_recovery.dat") tempPath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.dat"); else tempPath = file; using (StreamReader reader = new StreamReader(tempPath)) { string queue_item = reader.ReadLine(); while (queue_item != null) { this.add(queue_item); queue_item = reader.ReadLine(); } } } catch (Exception exc) { MessageBox.Show("HandBrake was unable to recover the queue. \nError Information:" + exc.ToString(), "Queue Recovery Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }