/[xmltv_parser]/trunk/GBPVRProgramDatabaseFixer/Program.cs
ViewVC logotype

Diff of /trunk/GBPVRProgramDatabaseFixer/Program.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 158 by william, Thu Mar 14 19:41:32 2013 UTC revision 174 by william, Sat Mar 16 16:03:19 2013 UTC
# Line 2  Line 2 
2  using System;  using System;
3  using System.Collections.Generic;  using System.Collections.Generic;
4  using System.Text;  using System.Text;
5    using System.Linq;
6  using Enterprise.Logging;  using Enterprise.Logging;
7  using System.Windows.Forms;  using System.Windows.Forms;
8  using System.Diagnostics;  using System.Diagnostics;
9  using System.IO;  using System.IO;
10  using libxmltv.Core;  using libxmltv.Core;
11    using libxmltv.Interfaces;
12    using libxmltv;
13  namespace GBPVRProgramDatabaseFixer  namespace GBPVRProgramDatabaseFixer
14  {  {
15      class Program      class Program
16      {      {
17          static SQLLITE sqlite;          static ISQLLITE sqlite;
18          static string XMLTV_FILE = "";          static string XMLTV_FILE = "";
19          static string GBPVR_DATABASE = "";          static string GBPVR_DATABASE = "";
20    
21          static bool LOADING_XMLTV_FILE = false;          //static bool LOADING_XMLTV_FILE = false;
22          static bool XMLTV_INSTANCE_CREATED = false;          static bool XMLTV_INSTANCE_CREATED = false;
23          static int LAST_REPORTED_XMLTV_PROGRESS = 0;          //static int LAST_REPORTED_XMLTV_PROGRESS = 0;
24    
25    
26          static bool LOADING_GBPVR_DATABASE = false;          //static bool LOADING_GBPVR_DATABASE = false;
27          static bool SQLLIST_INSTANCE_CREATED = false;          static bool SQLLIST_INSTANCE_CREATED = false;
28          static int LAST_REPORTED_SQLLITE_PROGRESS = 0;          //static int LAST_REPORTED_SQLLITE_PROGRESS = 0;
29    
30            static int LAST_REPORTED_PROGRESS = 0;
31    
32          static FileInfo fi_XMLTVFILE;          static FileInfo fi_XMLTVFILE;
33          static FileInfo fi_GBPVRDATABASE;          static FileInfo fi_GBPVRDATABASE;
# Line 86  namespace GBPVRProgramDatabaseFixer Line 90  namespace GBPVRProgramDatabaseFixer
90    
91              LoadXMLTVFile();              LoadXMLTVFile();
92              LoadGBPVRDatabase();              LoadGBPVRDatabase();
93              PerformDatabaseProcessing();                    PerformDatabaseProcessing();
94          }          }
95    
96          static void ConsoleOverwritePreviosLine(string format, params object[] args)          static void ConsoleOverwritePreviosLine(string format, params object[] args)
# Line 97  namespace GBPVRProgramDatabaseFixer Line 101  namespace GBPVRProgramDatabaseFixer
101    
102          static void gLog_ReportProgress(object sender, ReportProgressEventArgs e)          static void gLog_ReportProgress(object sender, ReportProgressEventArgs e)
103          {          {
104              if (!XMLTV_INSTANCE_CREATED && LOADING_XMLTV_FILE)              //if (!XMLTV_INSTANCE_CREATED && LOADING_XMLTV_FILE)
105                //{
106                //    if (LAST_REPORTED_XMLTV_PROGRESS != e.Progress)
107                //    {
108                //        ConsoleOverwritePreviosLine("XMLTV: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);
109                //        LAST_REPORTED_XMLTV_PROGRESS = e.Progress;
110                //        if (e.Progress == 100)
111                //        {
112                //            Console.WriteLine("XMLTV: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);
113                //        }
114                //    }
115                //}
116                //if (!SQLLIST_INSTANCE_CREATED && LOADING_GBPVR_DATABASE)
117                //{
118                //    if (LAST_REPORTED_SQLLITE_PROGRESS != e.Progress)
119                //    {
120                //        ConsoleOverwritePreviosLine("SQLLITE: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);
121                //        LAST_REPORTED_SQLLITE_PROGRESS = e.Progress;
122                //        if (e.Progress == 100)
123                //        {
124                //            Console.WriteLine("SQLLITE: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);
125                //        }
126                //    }
127                //}
128    
129                object k = e.UserState;
130                if (k == null)
131              {              {
132                  if (LAST_REPORTED_XMLTV_PROGRESS != e.Progress)                  if (sender == null)
133                    {
134                        if (LAST_REPORTED_PROGRESS != e.Progress)
135                        {
136                            ConsoleOverwritePreviosLine("Progress: {0} ", e.Progress);
137                            LAST_REPORTED_PROGRESS = e.Progress;
138                            if (e.Progress == 100)
139                            {
140                                Console.WriteLine("Progress: {0} ", e.Progress);
141                            }
142                        }
143                    }
144                    else
145                  {                  {
146                      ConsoleOverwritePreviosLine("XMLTV: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);                      if (LAST_REPORTED_PROGRESS != e.Progress)
                     LAST_REPORTED_XMLTV_PROGRESS = e.Progress;  
                     if (e.Progress == 100)  
147                      {                      {
148                          Console.WriteLine("XMLTV: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);                          ConsoleOverwritePreviosLine("{0}: Progress: {1:00}%", sender.GetType().Name, e.Progress);
149                            LAST_REPORTED_PROGRESS = e.Progress;
150                            if (e.Progress == 100)
151                            {
152                                Console.WriteLine("{0}: Progress: {1:00}%", sender.GetType().Name, e.Progress);
153                            }
154                      }                      }
155                  }                  }
156              }              }
157              if (!SQLLIST_INSTANCE_CREATED && LOADING_GBPVR_DATABASE)              else
158              {              {
159                  if (LAST_REPORTED_SQLLITE_PROGRESS != e.Progress)                  if (sender == null)
160                  {                  {
161                      ConsoleOverwritePreviosLine("SQLLITE: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);                      if (LAST_REPORTED_PROGRESS != e.Progress)
                     LAST_REPORTED_SQLLITE_PROGRESS = e.Progress;  
                     if (e.Progress == 100)  
162                      {                      {
163                          Console.WriteLine("SQLLITE: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);                          ConsoleOverwritePreviosLine("Progress: {0} ", k.ToString());
164                            LAST_REPORTED_PROGRESS = e.Progress;
165                            if (e.Progress == 100)
166                            {
167                                Console.WriteLine("Progress: {0} ", k.ToString());
168                            }
169                        }
170                    }
171                    else
172                    {
173                        if (LAST_REPORTED_PROGRESS != e.Progress)
174                        {
175                            ConsoleOverwritePreviosLine("{0}: {1}", sender.GetType().Name, k.ToString());
176                            LAST_REPORTED_PROGRESS = e.Progress;
177                            if (e.Progress == 100)
178                            {
179                                Console.WriteLine("{0}: {1}", sender.GetType().Name, k.ToString());
180                            }
181                      }                      }
182                  }                  }
183              }              }
184          }          }
185          static void LoadXMLTVFile()          static void LoadXMLTVFile()
186          {          {
187              LOADING_XMLTV_FILE = true;              //LOADING_XMLTV_FILE = true;
188              if (string.IsNullOrEmpty(XMLTV_FILE))              if (string.IsNullOrEmpty(XMLTV_FILE))
189              {              {
190                  gLog.Error.WriteLine("XMLTV File is either a null or empty string.");                  gLog.Error.WriteLine("XMLTV File is either a null or empty string.");
191                  LOADING_XMLTV_FILE = false;                  //LOADING_XMLTV_FILE = false;
192                  return;                  return;
193              }              }
194              fi_XMLTVFILE = new FileInfo(XMLTV_FILE);              fi_XMLTVFILE = new FileInfo(XMLTV_FILE);
195              if (!fi_XMLTVFILE.Exists)              if (!fi_XMLTVFILE.Exists)
196              {              {
197                  gLog.Error.WriteLine("Could not find XMLTV File: {0}", fi_XMLTVFILE.FullName);                  gLog.Error.WriteLine("Could not find XMLTV File: {0}", fi_XMLTVFILE.FullName);
198                  LOADING_XMLTV_FILE = false;                  //LOADING_XMLTV_FILE = false;
199                  return;                  return;
200              }              }
201    
202              XMLTV.Create(fi_XMLTVFILE.FullName, new EventHandler<EventArgs>(XMLTV_OnInstanceCreated));              XMLTV.Create(fi_XMLTVFILE.FullName, new EventHandler<EventArgs>(XMLTV_OnInstanceCreated));
203              while (!XMLTV_INSTANCE_CREATED) { Application.DoEvents(); }              while (!XMLTV_INSTANCE_CREATED) { Application.DoEvents(); }
204              LOADING_XMLTV_FILE = false;              //LOADING_XMLTV_FILE = false;
205          }          }
206          static void XMLTV_OnInstanceCreated(object sender, EventArgs e) { XMLTV_INSTANCE_CREATED = true; }          static void XMLTV_OnInstanceCreated(object sender, EventArgs e) { XMLTV_INSTANCE_CREATED = true; }
207    
208          static void LoadGBPVRDatabase()          static void LoadGBPVRDatabase()
209          {          {
210              LOADING_GBPVR_DATABASE = true;              //LOADING_GBPVR_DATABASE = true;
211              if (string.IsNullOrEmpty(GBPVR_DATABASE))              if (string.IsNullOrEmpty(GBPVR_DATABASE))
212              {              {
213                  gLog.Error.WriteLine("GBPVR Datbase is either a null or empty string.");                  gLog.Error.WriteLine("GBPVR Datbase is either a null or empty string.");
214                  LOADING_GBPVR_DATABASE = false;                  //LOADING_GBPVR_DATABASE = false;
215                  return;                  return;
216              }              }
217              fi_GBPVRDATABASE = new FileInfo(GBPVR_DATABASE);              fi_GBPVRDATABASE = new FileInfo(GBPVR_DATABASE);
218              if (!fi_GBPVRDATABASE.Exists)              if (!fi_GBPVRDATABASE.Exists)
219              {              {
220                  gLog.Error.WriteLine("Could not find GBPVR Database: {0}", fi_GBPVRDATABASE.FullName);                  gLog.Error.WriteLine("Could not find GBPVR Database: {0}", fi_GBPVRDATABASE.FullName);
221                  LOADING_GBPVR_DATABASE = false;                  //LOADING_GBPVR_DATABASE = false;
222                  return;                  return;
223              }              }
224                sqlite = SQLLITE.Create(fi_GBPVRDATABASE.FullName, new EventHandler<EventArgs>(SQLLITE_OnInstanceCreated));
             sqlite = new SQLLITE(fi_GBPVRDATABASE.FullName, new EventHandler<EventArgs>(SQLLITE_OnInstanceCreated));  
225              while (!SQLLIST_INSTANCE_CREATED) { Application.DoEvents(); }              while (!SQLLIST_INSTANCE_CREATED) { Application.DoEvents(); }
226              LOADING_GBPVR_DATABASE = false;              //LOADING_GBPVR_DATABASE = false;
227          }          }
228          static void SQLLITE_OnInstanceCreated(object sender, EventArgs e) { SQLLIST_INSTANCE_CREATED = true; }          static void SQLLITE_OnInstanceCreated(object sender, EventArgs e) { SQLLIST_INSTANCE_CREATED = true; }
229    
230    
231          static List<SQLLITE.IPROGRAMME> gbpvr_programs;          //static List<SQLLITE.IPROGRAMME> gbpvr_invalid_programs;
232          static List<SQLLITE.IRECORDING_SCHEDULE> gbpvr_recordings;          //static List<SQLLITE.IPROGRAMME> gbpvr_valid_programs;
233          static List<libxmltv.Interfaces.IXMLTVProgram> xmltv_programs;          //static List<SQLLITE.ICHANNEL> gbpvr_channels;
234            //static List<SQLLITE.IRECORDING_SCHEDULE> gbpvr_recordings;
235            //static List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs;
236          static void PerformDatabaseProcessing()          static void PerformDatabaseProcessing()
237          {          {
238              gbpvr_programs = sqlite.Programs;              var sqllite_channels = sqlite.Channels;
239              gbpvr_recordings = sqlite.Recordings;              var sqllite_recordings = sqlite.Recordings;
240              xmltv_programs = XMLTV.GetPrograms();              var sqllite_programs = sqlite.Programs;
241              CheckScheduledRecordingsForDiscrepancies();              Type datatype;
242              CheckProgramsForDiscrepancies();              var xmlt_raw_program_data = (IProgramDefinitionList)XMLTV.CreateBindingSourceFromData(XMLTV.GetPrograms(), out datatype);
243          }              var xmltv_programs = xmlt_raw_program_data.ToList().OrderBy(p => DateTime.Parse(p.Start)).ToList();
244                var sqllite_programs_startdate_range = sqlite.GetProgramsDateRange(sqllite_programs);
245          static void CheckScheduledRecordingsForDiscrepancies()              var xmltv_programs_startdate_range = GetXMLTVProgramStartDateRange(xmltv_programs);
246          {              var gbpvr_invalid_programs = new List<SQLLITE.IPROGRAMME>();
247              gLog.Warn.WriteLine("CheckScheduledRecordingsForDiscrepancies() has not been implemented");              var gbpvr_valid_programs = sqlite.FixGBPVRProgramsDatabase(sqllite_programs, xmltv_programs, out gbpvr_invalid_programs);
248          }              //xmltv_programs = xmltv_programs.OrderBy(s => s.ChannelNumber).ThenBy(s => DateTime.Parse(s.Start)).ToList();
249          static void CheckProgramsForDiscrepancies()              //sqllite_channels.TrimExcess();
250          {              //gbpvr_invalid_programs.TrimExcess();
251              gLog.Warn.WriteLine("CheckProgramsForDiscrepancies() has not been implemented");              //gbpvr_valid_programs.TrimExcess();
252                //sqllite_programs.TrimExcess();
253                //xmltv_programs.TrimExcess();
254                //CheckScheduledRecordingsForDiscrepancies(sqllite_recordings);
255                //CheckProgramsForDiscrepancies(gbpvr_valid_programs, xmltv_programs);
256            }
257    
258            static IDateTimeRange GetXMLTVProgramStartDateRange(List<libxmltv.Interfaces.IProgramDefinition> programs)
259            {
260                IDateTimeRange range = DateTimeRange.Create();
261                var list = new List<libxmltv.Interfaces.IProgramDefinition>(programs.ToArray());
262                DateTime first = new DateTime();
263                DateTime last = new DateTime();
264                first = DateTime.Parse(list.OrderBy(s => DateTime.Parse(s.Start)).ToList().First().Start);
265                last = DateTime.Parse(list.OrderBy(s => DateTime.Parse(s.Start)).ToList().Last().Start);
266                gLog.Verbose.Debug.WriteLine("\tFirst: {0} = ({1})", first.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), first.ToDateTimeString());
267                gLog.Verbose.Debug.WriteLine("\tLast: {0} = ({1})", last.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), last.ToDateTimeString());
268                range = DateTimeRange.Create(first, last);
269                return range;
270            }
271    
272            static void CheckScheduledRecordingsForDiscrepancies(List<SQLLITE.IRECORDING_SCHEDULE> gbpvr)
273            {
274                ////gLog.Warn.WriteLine("CheckScheduledRecordingsForDiscrepancies() has not been implemented");
275                //var manual_gbpvr_recordings = gbpvr.FindAll(p => p.recording_type == 0).ToList();
276    
277                //foreach (var manual_recording in manual_gbpvr_recordings)
278                //{
279                //    string title = manual_recording.filename;
280                //    DateTime start = manual_recording.manual_start_time;
281                //    DateTime end = manual_recording.manual_end_time;
282                //    long channel_oid = manual_recording.manual_channel_oid;
283                //    var found_channel = gbpvr_channels.Find(p => p.oid == channel_oid);
284                //    var channel_number = found_channel.channel_number;
285                //    var found_program = xmltv_programs.ToList().Find(p =>
286                //        p.Title.ToLower() == title.ToLower() &&
287                //        p.Start == start.ToDateTimeString() &&
288                //        p.Stop == end.ToDateTimeString() &&
289                //        p.ChannelNumber == channel_number
290                //        );
291                //    if (found_program != null)
292                //    {
293                //        gLog.Info.WriteLine("Recording might be valid: oid='{0}' programme_oid='{1}' title='{2}' start='{3}', end='{4}'", manual_recording.oid, manual_recording.programme_oid, title, start.ToDateTimeString(), end.ToDateTimeString());
294                //    }
295                //    else
296                //    {
297                //        gLog.Warn.WriteLine("Recording may not be valid: oid='{0}' programme_oid='{1}' title='{2}' start='{3}', end='{4}'", manual_recording.oid, manual_recording.programme_oid, title, start.ToDateTimeString(), end.ToDateTimeString());
298                //        // find the program on the channel at the start time
299                //        var correct_program = xmltv_programs.ToList().Find(p =>
300                //            p.ChannelNumber == channel_number &&
301                //            p.Start == start.ToDateTimeString()
302                //            );
303                //        if (correct_program != null)
304                //        {
305                //            gLog.Warn.WriteLine("\tThis will be recorded: {0}", correct_program.ToString());
306                //        }
307                //    }
308                //}
309            }
310    
311            static void CheckProgramsForDiscrepancies(List<SQLLITE.IPROGRAMME> list_gbpvr, List<libxmltv.Interfaces.IProgramDefinition> list_xmltv)
312            {
313                ////gLog.Warn.WriteLine("CheckProgramsForDiscrepancies() has not been implemented");
314                //var gbpvr = list_gbpvr.ToArray();
315                //var xmltv = list_xmltv.ToArray();
316                ////if (gbpvr.Count() != xmltv.Count())
317                ////{
318                ////    throw new ArgumentOutOfRangeException("gbpvr.Count/xmltv.Count", string.Format("gbpvr.Count: '0x{0:x8}' != xmltv.Count: '0x{1:x8}'", gbpvr.Count(),xmltv.Count()));
319                ////}
320                ////for (int i = 0; i < gbpvr.Count(); i++)
321                ////{
322                ////    var gbpvr_entry = gbpvr[i];
323                ////    var xmltv_entry = gbpvr_entry.AsXMLTVProgramDefinition(sqlite);
324                ////    if (!xmltv[i].Equals(xmltv_entry))
325                ////    {
326                ////        gLog.Warn.WriteLine("Warning GBPVR Program oid: {0} might be invalid", gbpvr_entry.oid);
327                ////    }
328                ////}
329          }          }
330      }      }
331  }  }

Legend:
Removed from v.158  
changed lines
  Added in v.174

  ViewVC Help
Powered by ViewVC 1.1.22