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(); string lastQuery; public ArrayList getQueue() { return queue; } /// /// Get's the next CLI query for encoding /// /// String public string getNextItemForEncoding() { string query = queue[0].ToString(); lastQuery = query; remove(0); // Remove the item which we are about to pass out. return query; } /// /// Add's a new item to the queue /// /// String public void add(string query) { queue.Add(query); } /// /// Removes an item from the queue. /// /// Index /// Bolean true if successful public Boolean remove(int index) { try { queue.RemoveAt(index); return true; } catch (Exception) { return false; } } /// /// 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; } /// /// 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() { try { string tempPath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.dat"); using (StreamWriter writer = new StreamWriter(tempPath)) { foreach (string item in queue) { writer.WriteLine(item); } 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. } } /// /// Recover the queue from hb_queue_recovery.dat /// public void recoverQueue() { try { string tempPath = Path.Combine(Path.GetTempPath(), "hb_queue_recovery.dat"); 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); } } } }