@@ -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 > ( ) ;
0 commit comments