Skip to content

Commit f271973

Browse files
author
RandomEngy
committed
Initial work on editing queue items. Have source loading and selection, but not restoration of the encoding profile.
Fixed a problem where a deblock filter could get added without it being selected and slow down the encode. Added right click options to queue items include move to top and move to bottom of queue.
1 parent 298e4aa commit f271973

12 files changed

Lines changed: 645 additions & 38 deletions

VidCoder/Icons/edit_16x16.png

523 Bytes
Loading

VidCoder/Model/DatabaseConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ static DatabaseConfig()
1818
{
1919
{"Version", Utilities.CurrentDatabaseVersion.ToString()},
2020
{"EncodeJobs", string.Empty},
21+
{"EncodeJobs2", string.Empty},
2122
{Updater.UpdateInProgress, "false"},
2223
{Updater.UpdateVersion, string.Empty},
2324
{Updater.UpdateInstallerLocation, string.Empty},
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace VidCoder.Model
7+
{
8+
public class EncodeJobPersistGroup
9+
{
10+
public EncodeJobPersistGroup()
11+
{
12+
this.EncodeJobs = new List<EncodeJobWithMetadata>();
13+
}
14+
15+
public List<EncodeJobWithMetadata> EncodeJobs { get; set; }
16+
}
17+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using HandBrake.Interop.Model;
6+
7+
namespace VidCoder.Model
8+
{
9+
public class EncodeJobWithMetadata
10+
{
11+
public EncodeJob Job { get; set; }
12+
13+
public bool ManualOutputPath { get; set; }
14+
}
15+
}

VidCoder/Model/EncodeJobsPersist.cs

Lines changed: 87 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,47 +13,125 @@ namespace VidCoder.Model
1313
{
1414
public static class EncodeJobsPersist
1515
{
16-
private static XmlSerializer xmlSerializer = new XmlSerializer(typeof(EncodeJobCollection));
16+
private static XmlSerializer oldXmlSerializer = new XmlSerializer(typeof(EncodeJobCollection));
17+
private static XmlSerializer xmlSerializer = new XmlSerializer(typeof(EncodeJobPersistGroup));
1718

18-
public static List<EncodeJob> EncodeJobs
19+
public static EncodeJobPersistGroup EncodeJobs
1920
{
2021
get
2122
{
22-
string jobsXml = DatabaseConfig.GetConfigString("EncodeJobs", Database.Connection);
23+
string jobsXml = DatabaseConfig.GetConfigString("EncodeJobs2", Database.Connection);
2324
if (string.IsNullOrEmpty(jobsXml))
2425
{
25-
return new List<EncodeJob>();
26+
// Check if there's an old queue collection we should upgrade
27+
List<EncodeJob> oldJobs = EncodeJobsOld;
28+
if (oldJobs.Count > 0)
29+
{
30+
// Populate the SourceType enum. We need this for editing queue items.
31+
for (int i = oldJobs.Count - 1; i >= 0; i--)
32+
{
33+
if (oldJobs[i].SourceType == SourceType.None)
34+
{
35+
if (Directory.Exists(oldJobs[i].SourcePath))
36+
{
37+
oldJobs[i].SourceType = SourceType.VideoFolder;
38+
}
39+
else if (File.Exists(oldJobs[i].SourcePath))
40+
{
41+
oldJobs[i].SourceType = SourceType.File;
42+
}
43+
else
44+
{
45+
oldJobs.RemoveAt(i);
46+
}
47+
}
48+
}
49+
50+
var persistGroup = new EncodeJobPersistGroup();
51+
persistGroup.EncodeJobs.AddRange(oldJobs.Select(j => new EncodeJobWithMetadata { Job = j, ManualOutputPath = true }));
52+
53+
EncodeJobs = persistGroup;
54+
return persistGroup;
55+
}
56+
57+
return new EncodeJobPersistGroup();
2658
}
2759

2860
return LoadJobsXmlString(jobsXml);
2961
}
3062

3163
set
3264
{
33-
DatabaseConfig.SetConfigValue("EncodeJobs", SerializeJobs(value), Database.Connection);
65+
// Old are stored in EncodeJobs, new in EncodeJobs2
66+
DatabaseConfig.SetConfigValue("EncodeJobs2", SerializeJobs(value), Database.Connection);
3467
}
3568
}
3669

37-
private static string SerializeJobs(List<EncodeJob> jobs)
70+
public static List<EncodeJob> EncodeJobsOld
71+
{
72+
get
73+
{
74+
string jobsXml = DatabaseConfig.GetConfigString("EncodeJobs", Database.Connection);
75+
if (string.IsNullOrEmpty(jobsXml))
76+
{
77+
return new List<EncodeJob>();
78+
}
79+
80+
return LoadJobsXmlStringOld(jobsXml);
81+
}
82+
}
83+
84+
private static string SerializeJobs(EncodeJobPersistGroup jobPersistGroup)
3885
{
3986
var xmlBuilder = new StringBuilder();
4087
using (XmlWriter writer = XmlWriter.Create(xmlBuilder))
4188
{
42-
xmlSerializer.Serialize(writer, new EncodeJobCollection {EncodeJobs = jobs});
89+
xmlSerializer.Serialize(writer, jobPersistGroup);
4390
}
4491

4592
return xmlBuilder.ToString();
4693
}
4794

48-
private static List<EncodeJob> LoadJobsXmlString(string jobsXml)
95+
private static EncodeJobPersistGroup LoadJobsXmlString(string jobsXml)
96+
{
97+
try
98+
{
99+
using (var stringReader = new StringReader(jobsXml))
100+
{
101+
using (var xmlReader = new XmlTextReader(stringReader))
102+
{
103+
var jobPersistGroup = xmlSerializer.Deserialize(xmlReader) as EncodeJobPersistGroup;
104+
if (jobPersistGroup == null)
105+
{
106+
return new EncodeJobPersistGroup();
107+
}
108+
109+
return jobPersistGroup;
110+
}
111+
}
112+
}
113+
catch (XmlException exception)
114+
{
115+
System.Windows.MessageBox.Show(
116+
"Could not load encode queue: " +
117+
exception +
118+
Environment.NewLine +
119+
Environment.NewLine +
120+
jobsXml);
121+
}
122+
123+
return new EncodeJobPersistGroup();
124+
}
125+
126+
private static List<EncodeJob> LoadJobsXmlStringOld(string jobsXml)
49127
{
50128
try
51129
{
52130
using (var stringReader = new StringReader(jobsXml))
53131
{
54132
using (var xmlReader = new XmlTextReader(stringReader))
55133
{
56-
var jobCollection = xmlSerializer.Deserialize(xmlReader) as EncodeJobCollection;
134+
var jobCollection = oldXmlSerializer.Deserialize(xmlReader) as EncodeJobCollection;
57135
if (jobCollection == null)
58136
{
59137
return new List<EncodeJob>();
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using HandBrake.Interop.Model;
6+
7+
namespace VidCoder.Model
8+
{
9+
public class VideoSourceMetadata
10+
{
11+
public string Name { get; set; }
12+
13+
public DriveInformation DriveInfo { get; set; }
14+
}
15+
}

VidCoder/Utilities/Utilities.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,24 @@ public static bool CanPassthrough(AudioCodec codec)
343343
codec == AudioCodec.Mp3;
344344
}
345345

346+
public static string GetSourceNameFile(string videoFile)
347+
{
348+
return Path.GetFileNameWithoutExtension(videoFile);
349+
}
350+
351+
public static string GetSourceNameFolder(string videoFolder)
352+
{
353+
DirectoryInfo parentDirectory = Directory.GetParent(videoFolder);
354+
if (parentDirectory == null || parentDirectory.Root.FullName == parentDirectory.FullName)
355+
{
356+
return "VideoFolder";
357+
}
358+
else
359+
{
360+
return parentDirectory.Name;
361+
}
362+
}
363+
346364
public static void SetDragIcon(DragEventArgs e)
347365
{
348366
var data = e.Data as DataObject;

VidCoder/VidCoder.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,13 +296,16 @@
296296
<Compile Include="Model\DatabaseConfig.cs" />
297297
<Compile Include="Model\EncodeCompleteAction.cs" />
298298
<Compile Include="Model\EncodeJobCollection.cs" />
299+
<Compile Include="Model\EncodeJobPersistGroup.cs" />
300+
<Compile Include="Model\EncodeJobWithMetadata.cs" />
299301
<Compile Include="Model\EncodeResult.cs" />
300302
<Compile Include="Model\LogEntry.cs" />
301303
<Compile Include="Model\LogSource.cs" />
302304
<Compile Include="Model\LogType.cs" />
303305
<Compile Include="Model\PresetCollection.cs" />
304306
<Compile Include="Model\PreviewImageJob.cs" />
305307
<Compile Include="Model\SaveImageJob.cs" />
308+
<Compile Include="Model\VideoSourceMetadata.cs" />
306309
<Compile Include="Services\Interfaces\ILogger.cs" />
307310
<Compile Include="Services\Interfaces\IPresetImportExport.cs" />
308311
<Compile Include="Services\Interfaces\IProcesses.cs" />
@@ -542,6 +545,7 @@
542545
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
543546
<SubType>Designer</SubType>
544547
</Content>
548+
<Resource Include="Icons\edit_16x16.png" />
545549
<SplashScreen Include="splash.png" />
546550
<Resource Include="Icons\video-file.png" />
547551
<Resource Include="Icons\encode_160.png" />

VidCoder/View/MainWindow.xaml

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,12 @@
168168
</DataTemplate>
169169
<DataTemplate x:Key="QueueRemoveTemplate">
170170
<Grid>
171-
<Button Command="{Binding RemoveQueueJobCommand}" VerticalAlignment="Center" HorizontalAlignment="Left" Style="{StaticResource RemoveButtonStyle}"
172-
Visibility="{Binding ShowRemoveButton, Converter={StaticResource VisibilityConverter}}">Remove from queue</Button>
171+
<StackPanel
172+
Orientation="Horizontal"
173+
Visibility="{Binding ShowQueueEditButtons, Converter={StaticResource VisibilityConverter}}">
174+
<!--<Button Command="{Binding EditQueueJobCommand}" Content="Edit" />-->
175+
<Button Command="{Binding RemoveQueueJobCommand}" VerticalAlignment="Center" HorizontalAlignment="Left" Style="{StaticResource RemoveButtonStyle}">Remove from queue</Button>
176+
</StackPanel>
173177
<ProgressBar VerticalAlignment="Center" Height="12"
174178
Value="{Binding PercentComplete}"
175179
Visibility="{Binding ShowProgressBar, Converter={StaticResource VisibilityConverter}}"
@@ -864,7 +868,35 @@
864868
VidCoderDragDrop:DragDropHelper.AllowDropAtTop="{Binding Encoding, Converter={StaticResource InverseBoolConverter}}">
865869
<ListView.ItemContainerStyle>
866870
<Style TargetType="ListViewItem">
871+
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}" />
867872
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
873+
<Setter Property="ContextMenu">
874+
<Setter.Value>
875+
<ContextMenu>
876+
<MenuItem
877+
Header="Move to Top" Command="{Binding MainViewModel.MoveSelectedJobsToTopCommand}"
878+
IsEnabled="{Binding Encoding, Converter={StaticResource InverseBoolConverter}}" />
879+
<MenuItem
880+
Header="Move to Bottom" Command="{Binding MainViewModel.MoveSelectedJobsToBottomCommand}"
881+
IsEnabled="{Binding Encoding, Converter={StaticResource InverseBoolConverter}}" />
882+
<Separator />
883+
<MenuItem
884+
Header="Edit" Command="{Binding EditQueueJobCommand}"
885+
IsEnabled="{Binding Encoding, Converter={StaticResource InverseBoolConverter}}">
886+
<MenuItem.Icon>
887+
<Image Source="/Icons/edit_16x16.png" Width="16" Height="16" />
888+
</MenuItem.Icon>
889+
</MenuItem>
890+
<MenuItem
891+
Header="Delete" Command="{Binding MainViewModel.RemoveSelectedJobsCommand}"
892+
IsEnabled="{Binding Encoding, Converter={StaticResource InverseBoolConverter}}">
893+
<MenuItem.Icon>
894+
<Image Source="/Icons/delete.png" Width="16" Height="16" />
895+
</MenuItem.Icon>
896+
</MenuItem>
897+
</ContextMenu>
898+
</Setter.Value>
899+
</Setter>
868900
</Style>
869901
</ListView.ItemContainerStyle>
870902
<ListView.View>

0 commit comments

Comments
 (0)