// --------------------------------------------------------------------------------------------------------------------
//
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
//
//
// A Set of Static Utilites
//
// --------------------------------------------------------------------------------------------------------------------
namespace HandBrake.ApplicationServices.Utilities
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HandBrake.ApplicationServices.Model;
///
/// A Set of Static Utilites
///
public class GeneralUtilities
{
#region Constants and Fields
///
/// The Default Log Directory
///
private static readonly string LogDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs";
///
/// The is lib hb present.
///
private static bool? isLibHbPresent;
#endregion
#region Properties
///
/// Gets the number of HandBrake instances running.
///
public static int ProcessId
{
get
{
return Process.GetCurrentProcess().Id;
}
}
///
/// Gets a value indicating whether is lib hb present.
///
public static bool IsLibHbPresent
{
get
{
if (isLibHbPresent == null)
{
isLibHbPresent = File.Exists(Path.Combine(Application.StartupPath, "hb.dll"));
}
return isLibHbPresent.Value;
}
}
#endregion
#region Public Methods
///
/// 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
var info = new DirectoryInfo(LogDir);
FileInfo[] logFiles = info.GetFiles("*.txt");
// Delete old and excessivly large files (> ~50MB).
foreach (FileInfo file in logFiles)
{
try
{
if (file.LastWriteTime < DateTime.Now.AddDays(-daysToKeep))
{
File.Delete(file.FullName);
}
else if (file.Length > 50000000)
{
File.Delete(file.FullName);
}
}
catch (Exception)
{
// Silently ignore files we can't delete. They are probably being used by the app right now.
}
}
}
}
///
/// Add the CLI Query to the Log File.
///
///
/// The create cli log header.
///
public static StringBuilder CreateCliLogHeader()
{
var logHeader = new StringBuilder();
StringBuilder gpuBuilder = new StringBuilder();
foreach (var item in SystemInfo.GetGPUInfo)
{
gpuBuilder.AppendLine(string.Format(" {0}", item));
}
logHeader.AppendLine(String.Format("HandBrake {0} - {1}", VersionHelper.GetVersion(), VersionHelper.GetPlatformBitnessVersion()));
logHeader.AppendLine(String.Format("OS: {0}", Environment.OSVersion));
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));
logHeader.AppendLine("-------------------------------------------");
return logHeader;
}
///
/// Get the Process ID of HandBrakeCLI for the current instance.
///
/// A list of processes
public static Process[] GetCliProcess()
{
return Process.GetProcessesByName("HandBrakeCLI");
}
///
/// 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()
{
var 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;
}
///
/// 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);
}
///
/// The find hand brake instance ids.
///
///
/// The id.
///
///
/// The . True if it's a running HandBrake instance.
///
public static bool IsPidACurrentHandBrakeInstance(int id)
{
List ids = Process.GetProcessesByName("HandBrake").Select(process => process.Id).ToList();
return ids.Contains(id);
}
#endregion
}
}