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)
{
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;
}
///
/// 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 (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(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);
}
}
}
}