namespace HandBrake.ApplicationServices.Services.Encode\r
{\r
using System;\r
+ using System.Collections.Generic;\r
+ using System.Diagnostics;\r
using System.Globalization;\r
using System.IO;\r
using System.Text;\r
this.fileWriter.WriteLine(this.header);\r
if (!isLibhb)\r
{\r
- this.fileWriter.WriteLine(string.Format("CLI Query: {0}", query));\r
+ this.fileWriter.WriteLine("CLI Query: {0}", query);\r
}\r
this.fileWriter.WriteLine();\r
}\r
{\r
if (this.fileWriter != null)\r
{\r
- this.fileWriter.Close();\r
- this.fileWriter.Dispose();\r
+ lock (FileWriterLock)\r
+ {\r
+ this.fileWriter.Flush();\r
+ this.fileWriter.Close();\r
+ this.fileWriter.Dispose();\r
+ } \r
}\r
\r
throw;\r
{\r
if (this.fileWriter != null)\r
{\r
+ this.fileWriter.Flush();\r
this.fileWriter.Close();\r
this.fileWriter.Dispose();\r
}\r
this.fileWriter = null;\r
}\r
}\r
- catch (Exception)\r
+ catch (Exception exc)\r
{\r
- // This exception doesn't warrent user interaction, but it should be logged (TODO)\r
+ Debug.WriteLine(exc); // This exception doesn't warrent user interaction, but it should be logged\r
}\r
}\r
\r
this.IsEncoding = false;\r
ServiceLogMessage("Encode Completed ...");\r
\r
- this.InvokeEncodeCompleted(\r
- e.Error\r
- ? new EventArgs.EncodeCompletedEventArgs(false, null, string.Empty, this.currentTask.Task.Destination)\r
- : new EventArgs.EncodeCompletedEventArgs(true, null, string.Empty, this.currentTask.Task.Destination));\r
-\r
+ // Stop Logging.\r
HandBrakeUtils.MessageLogged -= this.HandBrakeInstanceMessageLogged;\r
HandBrakeUtils.ErrorLogged -= this.HandBrakeInstanceErrorLogged;\r
+ \r
+ // Handling Log Data \r
+ this.ProcessLogs(this.currentTask.Task.Destination, this.currentTask.Configuration);\r
\r
+ // Cleanup\r
this.ShutdownFileWriter();\r
+\r
+ // Raise the Encode Completed EVent.\r
+ this.InvokeEncodeCompleted(\r
+ e.Error\r
+ ? new EventArgs.EncodeCompletedEventArgs(false, null, string.Empty, this.currentTask.Task.Destination)\r
+ : new EventArgs.EncodeCompletedEventArgs(true, null, string.Empty, this.currentTask.Task.Destination));\r
}\r
#endregion\r
}\r
if (!e.Successful)\r
{\r
this.LastProcessedJob.Status = QueueItemStatus.Error;\r
- this.Pause();\r
}\r
\r
- // Handling Log Data \r
- this.EncodeService.ProcessLogs(this.LastProcessedJob.Task.Destination, this.LastProcessedJob.Configuration);\r
-\r
// Move onto the next job.\r
if (this.IsProcessing)\r
{\r
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="VideoOptionsTooltipConverter.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// The video options queue tooltip converter.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.Converters.Video\r
+{\r
+ using System;\r
+ using System.Globalization;\r
+ using System.Windows.Data;\r
+\r
+ using HandBrake.ApplicationServices.Services.Encode.Model;\r
+ using HandBrake.ApplicationServices.Utilities;\r
+ using HandBrake.Interop.Model.Encoding;\r
+\r
+ /// <summary>\r
+ /// The x 264 queue tooltip converter.\r
+ /// </summary>\r
+ public class VideoOptionsTooltipConverter : IValueConverter\r
+ {\r
+ /// <summary>\r
+ /// Converts a value. \r
+ /// </summary>\r
+ /// <returns>\r
+ /// A converted value. If the method returns null, the valid null value is used.\r
+ /// </returns>\r
+ /// <param name="value">\r
+ /// The value produced by the binding source.\r
+ /// </param>\r
+ /// <param name="targetType">\r
+ /// The type of the binding target property.\r
+ /// </param>\r
+ /// <param name="parameter">\r
+ /// The converter parameter to use.\r
+ /// </param>\r
+ /// <param name="culture">\r
+ /// The culture to use in the converter.\r
+ /// </param>\r
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r
+ {\r
+ EncodeTask task = value as EncodeTask;\r
+ if (task != null)\r
+ {\r
+ string rfqp = task.VideoEncoder == VideoEncoder.X264 || task.VideoEncoder == VideoEncoder.X265 ? "RF" : "QP";\r
+ string quality = task.VideoEncodeRateType == VideoEncodeRateType.ConstantQuality ? task.Quality + rfqp : task.VideoBitrate + " kbps";\r
+ string twoPass = task.TwoPass ? task.TurboFirstPass ? " (2-Pass with Turbo)" : " (2-Pass)" : string.Empty;\r
+ return string.Format("{0} - {1}{2}", EnumHelper<VideoEncoder>.GetDisplay(task.VideoEncoder), quality, twoPass); \r
+ }\r
+\r
+ return "Unknown";\r
+ }\r
+\r
+ /// <summary>\r
+ /// Converts a value. \r
+ /// </summary>\r
+ /// <returns>\r
+ /// A converted value. If the method returns null, the valid null value is used.\r
+ /// </returns>\r
+ /// <param name="value">\r
+ /// The value that is produced by the binding target.\r
+ /// </param>\r
+ /// <param name="targetType">\r
+ /// The type to convert to.\r
+ /// </param>\r
+ /// <param name="parameter">\r
+ /// The converter parameter to use.\r
+ /// </param>\r
+ /// <param name="culture">\r
+ /// The culture to use in the converter.\r
+ /// </param>\r
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r
+ {\r
+ throw new NotImplementedException();\r
+ }\r
+ }\r
+}\r
<Compile Include="Converters\Audio\AudioBehaviourConverter.cs" />\r
<Compile Include="Converters\Filters\DenoisePresetConverter.cs" />\r
<Compile Include="Converters\Subtitles\SubtitleBehaviourConverter.cs" />\r
+ <Compile Include="Converters\Video\VideoOptionsTooltipConverter.cs" />\r
<Compile Include="Converters\Video\ScalingConverter.cs" />\r
<Compile Include="Extensions\StringExtensions.cs" />\r
<Compile Include="Model\Audio\AudioBehaviourModes.cs" />\r
<Audio:AudioQueueDisplayConverter x:Key="audioTrackDisplayConverter" />\r
<Subtitles:SubtitlesQueueDisplayConverter x:Key="subtitleTrackDisplayConverter" />\r
<video:EncoderOptionsTooltipConverter x:Key="encoderOptionsTooltipConverter" />\r
+ <video:VideoOptionsTooltipConverter x:Key="videoOptionsTooltipConverter" />\r
+ \r
\r
\r
<Style x:Key="LongToolTipHolder" TargetType="FrameworkElement">\r
<TextBlock Text="{Binding Task.PictureSettingsDesc}" TextWrapping="Wrap" Grid.Row="2" Grid.Column="1" />\r
\r
<TextBlock FontWeight="Bold" Text="Video:" Grid.Row="3" Grid.Column="0" />\r
- <TextBlock Text="{Binding Task.VideoEncoder, Converter={StaticResource enumComboConverter}}"\r
- Grid.Row="3" Grid.Column="1" />\r
+ <TextBlock Text="{Binding Task, Converter={StaticResource videoOptionsTooltipConverter}}" Grid.Row="3" Grid.Column="1" TextWrapping="Wrap" />\r
\r
<TextBlock FontWeight="Bold" Text="Audio: " Grid.Row="4" Grid.Column="0"/>\r
<TextBlock Text="{Binding Task.AudioTracks, Converter={StaticResource audioTrackDisplayConverter}}"\r