/// <summary> /// Take a Scan Log file, and process it as if it were from the CLI. /// </summary> /// <param name="path"> /// The path to the log file. /// </param> public void DebugScanLog(string path) { try { StreamReader parseLog = new StreamReader(path); this.readData = new Parser(parseLog.BaseStream); this.SouceData = Source.Parse(this.readData, this.userSettingService.GetUserSetting <bool>(ASUserSettingConstants.DisableLibDvdNav)); this.SouceData.ScanPath = path; if (this.ScanCompleted != null) { this.ScanCompleted(this, new ScanCompletedEventArgs(false, null, string.Empty)); } } catch (Exception e) { throw new GeneralApplicationException("Debug Run Failed", string.Empty, e); } }
/// <summary> /// Start a scan for a given source path and title /// </summary> /// <param name="sourcePath"> /// Path to the source file /// </param> /// <param name="title"> /// the title number to look at /// </param> /// <param name="previewCount"> /// The preview Count. /// </param> private void ScanSource(object sourcePath, int title, int previewCount) { try { this.IsScanning = true; if (this.ScanStared != null) { this.ScanStared(this, new EventArgs()); } this.logBuffer = new StringBuilder(); string handbrakeCLIPath = Path.Combine(Application.StartupPath, "HandBrakeCLI.exe"); string logDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs"; string dvdInfoPath = Path.Combine( logDir, string.Format("last_scan_log{0}.txt", GeneralUtilities.GetInstanceCount)); if (!Directory.Exists(logDir)) { Directory.CreateDirectory(logDir); } // Make we don't pick up a stale last_encode_log.txt (and that we have rights to the file) if (File.Exists(dvdInfoPath)) { File.Delete(dvdInfoPath); } string extraArguments = string.Empty; if (previewCount != 10) { extraArguments += " --previews " + previewCount; } if (this.userSettingService.GetUserSetting<bool>(ASUserSettingConstants.DisableLibDvdNav)) { extraArguments += " --no-dvdnav"; } extraArguments += string.Format(" --min-duration={0}", this.userSettingService.GetUserSetting<int>(ASUserSettingConstants.MinScanDuration)); if (title > 0) { extraArguments += " --scan "; } // Quick fix for "F:\\" style paths. Just get rid of the \\ so the CLI doesn't fall over. // Sould probably clean up the escaping of the strings later. string source = sourcePath.ToString().EndsWith("\\") ? "\"" + sourcePath.ToString().TrimEnd('\\') + "\"" : "\"" + sourcePath + "\""; string query = string.Format(@" -i {0} -t{1} {2} -v ", source, title, extraArguments); this.hbProc = new Process { StartInfo = { FileName = handbrakeCLIPath, Arguments = string.Format(@" -i {0} -t{1} {2} -v ", source, title, extraArguments), RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true } }; // Start the Scan this.hbProc.Start(); this.readData = new Parser(this.hbProc.StandardError.BaseStream); this.readData.OnScanProgress += this.OnScanProgress; this.SouceData = Source.Parse(this.readData); this.SouceData.ScanPath = (string)sourcePath; // Write the Buffer out to file. using (StreamWriter scanLog = new StreamWriter(dvdInfoPath)) { // Only write the log file to disk if it's less than 50MB. if (this.readData.Buffer.Length < 50000000) { scanLog.WriteLine(GeneralUtilities.CreateCliLogHeader()); scanLog.WriteLine(query); scanLog.Write(this.readData.Buffer); this.logBuffer.AppendLine(query); this.logBuffer.AppendLine(this.readData.Buffer.ToString()); } else { throw new Exception( "The Log file has not been written to disk as it has grown above the 100MB limit. This indicates there was a problem during the scan process."); } } this.IsScanning = false; if (this.ScanCompleted != null) { this.ScanCompleted(this, new ScanCompletedEventArgs(true, null, string.Empty)); } } catch (Exception exc) { this.Stop(); if (this.ScanCompleted != null) this.ScanCompleted(this, new ScanCompletedEventArgs(false, exc, "An Error has occured in ScanService.ScanSource()")); } }
/// <summary> /// Take a Scan Log file, and process it as if it were from the CLI. /// </summary> /// <param name="path"> /// The path to the log file. /// </param> public void DebugScanLog(string path) { try { StreamReader parseLog = new StreamReader(path); this.readData = new Parser(parseLog.BaseStream); this.SouceData = Source.Parse(this.readData); this.SouceData.ScanPath = path; if (this.ScanCompleted != null) { this.ScanCompleted(this, new ScanCompletedEventArgs(true, null, string.Empty)); } } catch (Exception e) { throw new GeneralApplicationException("Debug Run Failed", string.Empty, e); } }
/// <summary> /// Start a scan for a given source path and title /// </summary> /// <param name="sourcePath">Path to the source file</param> /// <param name="title">the title number to look at</param> private void ScanSource(object sourcePath, int title) { try { IsScanning = true; if (this.ScanStared != null) { this.ScanStared(this, new EventArgs()); } logBuffer = new StringBuilder(); string handbrakeCLIPath = Path.Combine(Application.StartupPath, "HandBrakeCLI.exe"); string logDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs"; string dvdInfoPath = Path.Combine( logDir, string.Format("last_scan_log{0}.txt", Init.InstanceId == 0 ? string.Empty : Init.InstanceId.ToString())); // Make we don't pick up a stale last_encode_log.txt (and that we have rights to the file) if (File.Exists(dvdInfoPath)) { File.Delete(dvdInfoPath); } string extraArguments = string.Empty; if (Init.DisableDvdNav) { extraArguments = " --no-dvdnav"; } if (title > 0) { extraArguments += " --scan "; } // Quick fix for "F:\\" style paths. Just get rid of the \\ so the CLI doesn't fall over. // Sould probably clean up the escaping of the strings later. string source = sourcePath.ToString().EndsWith("\\") ? sourcePath.ToString() : "\"" + sourcePath + "\""; this.hbProc = new Process { StartInfo = { FileName = handbrakeCLIPath, Arguments = String.Format(@" -i ""{0}"" -t{1} {2} -v ", sourcePath, title, extraArguments), RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true } }; string command = String.Format(@" -i {0} -t{1} {2} -v ", source, title, extraArguments); this.hbProc = new Process { StartInfo = { FileName = handbrakeCLIPath, Arguments = command, RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true } }; // Start the Scan this.hbProc.Start(); this.readData = new Parser(this.hbProc.StandardError.BaseStream); this.readData.OnScanProgress += this.OnScanProgress; this.SouceData = Source.Parse(this.readData); // Write the Buffer out to file. using (StreamWriter scanLog = new StreamWriter(dvdInfoPath)) { // Only write the log file to disk if it's less than 100MB. if (this.readData.Buffer.Length < 100000000) { scanLog.WriteLine(UtilityService.CreateCliLogHeader(null)); scanLog.Write(this.readData.Buffer); logBuffer.AppendLine(this.readData.Buffer.ToString()); } else { throw new Exception( "The Log file has not been written to disk as it has grown above the 100MB limit. This indicates there was a problem during the scan process."); } } IsScanning = false; if (this.ScanCompleted != null) { this.ScanCompleted(this, new ScanCompletedEventArgs(true, null, string.Empty)); } } catch (Exception exc) { this.Stop(); if (this.ScanCompleted != null) this.ScanCompleted(this, new ScanCompletedEventArgs(false, exc, "An Error has occured in ScanService.ScanSource()")); } }
/// <summary> /// Monitor the QueueTask /// </summary> private void EncodeMonitor() { try { Parser encode = new Parser(this.HbProcess.StandardOutput.BaseStream); encode.OnEncodeProgress += this.EncodeOnEncodeProgress; while (!encode.EndOfStream) { encode.ReadEncodeStatus(); } } catch (Exception) { this.EncodeOnEncodeProgress(null, 0, 0, 0, 0, 0, "Unknown, status not available.."); } }
/// <summary> /// Take a Scan Log file, and process it as if it were from the CLI. /// </summary> /// <param name="path"> /// The path to the log file. /// </param> public void DebugScanLog(string path) { try { StreamReader parseLog = new StreamReader(path); this.readData = new Parser(parseLog.BaseStream); this.SouceData = Source.Parse(this.readData, this.userSettingService.GetUserSetting<bool>(ASUserSettingConstants.DisableLibDvdNav)); this.SouceData.ScanPath = path; if (this.ScanCompleted != null) { this.ScanCompleted(this, new ScanCompletedEventArgs(false, null, string.Empty)); } } catch (Exception e) { throw new GeneralApplicationException("Debug Run Failed", string.Empty, e); } }
/// <summary> /// Start a scan for a given source path and title /// </summary> /// <param name="sourcePath"> /// Path to the source file /// </param> /// <param name="title"> /// the title number to look at /// </param> /// <param name="previewCount"> /// The preview Count. /// </param> /// <param name="postScanAction"> /// The post Scan Action. Disables the Scan Completed Event /// </param> private void ScanSource(object sourcePath, int title, int previewCount, Action <bool> postScanAction) { try { this.IsScanning = true; this.cancelScan = false; if (this.ScanStared != null) { this.ScanStared(this, new EventArgs()); } this.logBuffer = new StringBuilder(); string handbrakeCLIPath = Path.Combine(Application.StartupPath, "HandBrakeCLI.exe"); string logDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs"; string dvdInfoPath = Path.Combine( logDir, string.Format("last_scan_log{0}.txt", GeneralUtilities.ProcessId)); if (!Directory.Exists(logDir)) { Directory.CreateDirectory(logDir); } // Make we don't pick up a stale last_encode_log.txt (and that we have rights to the file) if (File.Exists(dvdInfoPath)) { File.Delete(dvdInfoPath); } string extraArguments = string.Empty; if (previewCount != 10) { extraArguments += " --previews " + previewCount; } if (this.userSettingService.GetUserSetting <bool>(ASUserSettingConstants.DisableLibDvdNav)) { extraArguments += " --no-dvdnav"; } extraArguments += string.Format(" --min-duration={0}", this.userSettingService.GetUserSetting <int>(ASUserSettingConstants.MinScanDuration)); if (title > 0) { extraArguments += " --scan "; } // Quick fix for "F:\\" style paths. We need \\\\ (Escaped \ twice) string source = sourcePath.ToString().EndsWith("\\") ? string.Format("\"{0}\\\\\"", sourcePath.ToString().TrimEnd('\\')) : "\"" + sourcePath + "\""; string query = string.Format(@" -i {0} -t{1} {2} -v ", source, title, extraArguments); this.hbProc = new Process { StartInfo = { FileName = handbrakeCLIPath, Arguments = string.Format(@" -i {0} -t{1} {2} -v ", source, title, extraArguments), RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true } }; // Start the Scan this.hbProc.Start(); this.readData = new Parser(this.hbProc.StandardError.BaseStream); this.readData.OnScanProgress += this.OnScanProgress; this.SouceData = Source.Parse(this.readData, this.userSettingService.GetUserSetting <bool>(ASUserSettingConstants.DisableLibDvdNav)); this.SouceData.ScanPath = (string)sourcePath; // Write the Buffer out to file. using (StreamWriter scanLog = new StreamWriter(dvdInfoPath)) { // Only write the log file to disk if it's less than 50MB. if (this.readData.Buffer.Length < 50000000) { scanLog.WriteLine(header); scanLog.WriteLine(query); scanLog.Write(this.readData.Buffer); this.logBuffer.AppendLine(query); this.logBuffer.AppendLine(this.readData.Buffer.ToString()); } else { throw new GeneralApplicationException( "The Log file has not been written to disk as it has grown above the 50MB limit", " This indicates there was a problem during the scan process.", null); } } this.IsScanning = false; if (postScanAction != null) { postScanAction(true); } else { if (this.ScanCompleted != null) { if (logBuffer.ToString().Contains("scan: unrecognized file type")) { this.ScanCompleted(this, new ScanCompletedEventArgs(false, null, "Unrecognized file type.")); } else { this.ScanCompleted(this, new ScanCompletedEventArgs(this.cancelScan, null, string.Empty)); } } } } catch (GeneralApplicationException) { throw; } catch (Exception exc) { this.Stop(); if (postScanAction != null) { postScanAction(false); } else { if (this.ScanCompleted != null) { this.ScanCompleted(this, new ScanCompletedEventArgs(false, exc, "An Error has occured in ScanService.ScanSource()")); } } } }