/* UtilityService.cs $ This file is part of the HandBrake source code. Homepage: . It may be used under the terms of the GNU General Public License. */ namespace HandBrake.ApplicationServices.Utilities { using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; using System.Windows.Forms; using HandBrake.ApplicationServices.Functions; using HandBrake.ApplicationServices.Model; /// /// A Set of Static Utilites /// public class GeneralUtilities { /// /// The Default Log Directory /// private static readonly string LogDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs"; /// /// Clear all the log files older than 30 Days /// /// /// The Number of Days to Keep /// public static void ClearLogFiles(int daysToKeep) { if (Directory.Exists(LogDir)) { // Get all the log files DirectoryInfo info = new DirectoryInfo(LogDir); FileInfo[] logFiles = info.GetFiles("*.txt"); // Delete Them foreach (FileInfo file in logFiles) { if (file.LastWriteTime < DateTime.Now.AddDays(-daysToKeep)) { if (!file.Name.Contains("last_scan_log.txt") && !file.Name.Contains("last_encode_log.txt")) { File.Delete(file.FullName); } else if (file.Length > 104857600) { File.Delete(file.FullName); } } } } } /// /// Get a list of available DVD drives which are ready and contain DVD content. /// /// A List of Drives with their details public static List GetDrives() { List drives = new List(); DriveInfo[] theCollectionOfDrives = DriveInfo.GetDrives(); int id = 0; foreach (DriveInfo curDrive in theCollectionOfDrives) { if (curDrive.DriveType == DriveType.CDRom && curDrive.IsReady) { if (Directory.Exists(curDrive.RootDirectory + "VIDEO_TS") || Directory.Exists(curDrive.RootDirectory + "BDMV")) { drives.Add( new DriveInformation { Id = id, VolumeLabel = curDrive.VolumeLabel, RootDirectory = curDrive.RootDirectory.ToString() }); id++; } } } return drives; } /// /// Get the Process ID of HandBrakeCLI for the current instance. /// /// A list of processes public static Process[] GetCliProcess() { return Process.GetProcessesByName("HandBrakeCLI"); } /// /// Add the CLI Query to the Log File. /// /// /// The Encode Job Object /// /// /// The create cli log header. /// public static StringBuilder CreateCliLogHeader(QueueTask encJob) { StringBuilder logHeader = new StringBuilder(); logHeader.AppendLine(String.Format("HandBrake {0} {1}", Properties.Settings.Default.HandBrakeVersion, Properties.Settings.Default.HandBrakeBuild)); logHeader.AppendLine(String.Format("OS: {0}", Environment.OSVersion)); logHeader.AppendLine(String.Format("CPU: {0}", SystemInfo.GetCpuCount)); logHeader.Append(String.Format("Ram: {0} MB, ", SystemInfo.TotalPhysicalMemory)); logHeader.AppendLine(String.Format("Screen: {0}x{1}", SystemInfo.ScreenBounds.Bounds.Width, SystemInfo.ScreenBounds.Bounds.Height)); logHeader.AppendLine(String.Format("Temp Dir: {0}", Path.GetTempPath())); logHeader.AppendLine(String.Format("Install Dir: {0}", Application.StartupPath)); logHeader.AppendLine(String.Format("Data Dir: {0}\n", Application.UserAppDataPath)); if (encJob != null) { logHeader.AppendLine(String.Format("CLI Query: {0}", encJob.Query)); logHeader.AppendLine(String.Format("User Query: {0}", encJob.CustomQuery)); } logHeader.AppendLine("-------------------------------------------"); return logHeader; } /// /// Return the standard log format line of text for a given log message /// /// The Log Message /// /// A Log Message in the format: "[hh:mm:ss] message" /// public static string LogLine(string message) { return string.Format("[{0}] {1}", DateTime.Now.TimeOfDay, message); } /// /// Gets a value indicating whether HandBrake is running in multi instance mode /// /// True if the UI has another instance running public static bool IsMultiInstance { get { return Process.GetProcessesByName("HandBrake").Length > 0 ? true : false; } } /// /// Gets the number of HandBrake instances running. /// public static string GetInstanceCount { get { return Process.GetProcessesByName("HandBrake").Length == 0 ? string.Empty : Process.GetProcessesByName("HandBrake").Length.ToString(); } } } }