/// <summary> /// Initializes a new instance of the <see cref="BatchAdd"/> class. /// </summary> /// <param name="sourceData"> /// The source Data. /// </param> public BatchAdd(Source sourceData) { this.sourceData = sourceData; InitializeComponent(); // Get the Default values for batch encoding. this.minDuration.Text = this.UserSettingService.GetUserSetting<string>(UserSettingConstants.BatchMinDuration); this.maxDuration.Text = this.UserSettingService.GetUserSetting<string>(UserSettingConstants.BatchMaxDuration); this.UpdateEncodeDisplay(); }
public frmAddBatch(frmMain mw, Source discSource) { InitializeComponent(); if (this.DesignMode) return; this.discSource = discSource; this.mainWindow = mw; minTimespan = TimeSpan.Parse(ServiceManager.UserSettingService.GetUserSetting<string>(UserSettingConstants.BatchMinDuration)); maxTimespan = TimeSpan.Parse(ServiceManager.UserSettingService.GetUserSetting<string>(UserSettingConstants.BatchMaxDuration)); }
/// <summary> /// Parse the StreamReader output into a List of Titles /// </summary> /// <param name="output"> /// The output. /// </param> /// <returns> /// A DVD object which contains a list of title inforamtion /// </returns> public static Source Parse(StreamReader output) { var thisDVD = new Source(); while (!output.EndOfStream) { if ((char) output.Peek() == '+') thisDVD.Titles.AddRange(Title.ParseList(output.ReadToEnd())); else output.ReadLine(); } return thisDVD; }
/// <summary> /// Scan Completed Event Handler /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The EventArgs. /// </param> private void InstanceScanCompleted(object sender, EventArgs e) { this.SouceData = new Source { Titles = ConvertTitles(this.instance.Titles), ScanPath = currentSourceScanPath}; IsScanning = false; if (this.ScanCompleted != null) this.ScanCompleted(this, new ScanCompletedEventArgs(true, null, string.Empty)); }
/// <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> /// Copy this Source to another Source Model /// </summary> /// <param name="source"> /// The source. /// </param> public void CopyTo(Source source) { source.Titles = this.Titles; source.ScanPath = this.ScanPath; }
/// <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> /// The setup. /// </summary> /// <param name="scannedSource"> /// The scanned source. /// </param> /// <param name="srcName"> /// The src Name. /// </param> /// <param name="addAction"> /// The add Action. /// </param> public void Setup(Source scannedSource, string srcName, Action<IEnumerable<SelectionTitle>> addAction) { this.TitleList.Clear(); this.addToQueue = addAction; if (scannedSource != null) { IEnumerable<Title> titles = orderedByTitle ? scannedSource.Titles : scannedSource.Titles.OrderByDescending(o => o.Duration).ToList(); foreach (Title item in titles) { SelectionTitle title = new SelectionTitle(item, srcName) { IsSelected = true }; TitleList.Add(title); } } this.NotifyOfPropertyChange(() => this.IsAutoNamingEnabled); }
/// <summary> /// Scan Completed Event Handler /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The EventArgs. /// </param> private void InstanceScanCompleted(object sender, EventArgs e) { // TODO -> Might be a better place to fix this. string path = currentSourceScanPath; if (currentSourceScanPath.Contains("\"")) { path = currentSourceScanPath.Trim('\"'); } this.SouceData = new Source { Titles = ConvertTitles(this.instance.Titles), ScanPath = path }; IsScanning = false; if (this.ScanCompleted != null) this.ScanCompleted(this, new ScanCompletedEventArgs(false, null, string.Empty)); }
/// <summary> /// The setup. /// </summary> /// <param name="scannedSource"> /// The scanned source. /// </param> /// <param name="srcName"> /// The src Name. /// </param> public void Setup(Source scannedSource, string srcName) { this.TitleList.Clear(); if (scannedSource != null) { IEnumerable<Title> titles = orderedByTitle ? scannedSource.Titles : scannedSource.Titles.OrderByDescending(o => o.Duration).ToList(); foreach (Title item in titles) { SelectionTitle title = new SelectionTitle(item, srcName); TitleList.Add(title); } } }
/// <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> /// The setup. /// </summary> /// <param name="scannedSource"> /// The scanned source. /// </param> public void Setup(Source scannedSource) { this.TitleList.Clear(); if (scannedSource != null) { IEnumerable<Title> titles = this.orderedByTitle ? scannedSource.Titles : scannedSource.Titles.OrderByDescending(o => o.Duration).ToList(); foreach (Title item in titles) { var title = new SelectionTitle(item, item.SourceName) { IsSelected = true }; this.TitleList.Add(title); } } }
/// <summary> /// Scan Completed Event Handler /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The EventArgs. /// </param> private void InstanceScanCompleted(object sender, EventArgs e) { // Write the log file out before we start processing incase we crash. try { if (this.scanLog != null) { this.scanLog.Flush(); } } catch (Exception) { // Do Nothing. } // TODO -> Might be a better place to fix this. string path = currentSourceScanPath; if (currentSourceScanPath.Contains("\"")) { path = currentSourceScanPath.Trim('\"'); } // Process into internal structures. this.SouceData = new Source { Titles = ConvertTitles(this.instance.Titles, this.instance.FeatureTitle), ScanPath = path }; IsScanning = false; if (this.ScanCompleted != null) this.ScanCompleted(this, new ScanCompletedEventArgs(false, null, string.Empty)); }
/// <summary> /// Copy this Source to another Source Model /// </summary> /// <param name="source"> /// The source. /// </param> public void CopyTo(Source source) { source.Titles = this.Titles; source.ScanPath = this.ScanPath; }