/[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 165 by william, Fri Mar 15 17:33:15 2013 UTC revision 166 by william, Sat Mar 16 13:16:42 2013 UTC
# Line 18  namespace GBPVRProgramDatabaseFixer Line 18  namespace GBPVRProgramDatabaseFixer
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 99  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                      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)  
135                      {                      {
136                          Console.WriteLine("XMLTV: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);                          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                        if (LAST_REPORTED_PROGRESS != e.Progress)
147                        {
148                            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                        if (LAST_REPORTED_PROGRESS != e.Progress)
162                        {
163                            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                      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)  
174                      {                      {
175                          Console.WriteLine("SQLLITE: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);                          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 = SQLLITE.Create(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_invalid_programs;          //static List<SQLLITE.IPROGRAMME> gbpvr_invalid_programs;
232          static List<SQLLITE.IPROGRAMME> gbpvr_valid_programs;          //static List<SQLLITE.IPROGRAMME> gbpvr_valid_programs;
233          static List<SQLLITE.ICHANNEL> gbpvr_channels;          //static List<SQLLITE.ICHANNEL> gbpvr_channels;
234          static List<SQLLITE.IRECORDING_SCHEDULE> gbpvr_recordings;          //static List<SQLLITE.IRECORDING_SCHEDULE> gbpvr_recordings;
235          static List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs;          //static List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs;
236          static void PerformDatabaseProcessing()          static void PerformDatabaseProcessing()
237          {          {
238             gbpvr_channels = sqlite.Channels;              var sqllite_channels = sqlite.Channels;
239              //gbpvr_programs = sqlite.Programs;              var sqllite_recordings = sqlite.Recordings;
240              gbpvr_invalid_programs = new List<SQLLITE.IPROGRAMME>();              var sqllite_programs = sqlite.Programs;
             gbpvr_valid_programs = new List<SQLLITE.IPROGRAMME>();  
             gbpvr_recordings = sqlite.Recordings;              
241              Type datatype;              Type datatype;
242              var xmlt_raw_program_data = (IProgramDefinitionList)XMLTV.CreateBindingSourceFromData(XMLTV.GetPrograms(), out datatype);              var xmlt_raw_program_data = (IProgramDefinitionList)XMLTV.CreateBindingSourceFromData(XMLTV.GetPrograms(), out datatype);
243              //xmltv_programs = xmlt_raw_program_data.ToList().OrderBy(p => p.ChannelNumber).ThenBy(p => DateTime.Parse(p.Start)).ToList();              var xmltv_programs = xmlt_raw_program_data.ToList().OrderBy(p => DateTime.Parse(p.Start)).ToList();
244              //xmltv_programs = xmltv_programs.FindAll(p => p.Title == "Law & Order: Criminal Intent").ToList();              var sqllite_programs_startdate_range = sqlite.GetProgramsDateRange(sqllite_programs);
             xmltv_programs = xmlt_raw_program_data.ToList().OrderBy(p => DateTime.Parse(p.Start)).ToList();  
             var gbpvr_programs_startdate_range = sqlite.GetProgramsDateRange(sqlite.Programs);  
245              var xmltv_programs_startdate_range = GetXMLTVProgramStartDateRange(xmltv_programs);              var xmltv_programs_startdate_range = GetXMLTVProgramStartDateRange(xmltv_programs);
246                var gbpvr_invalid_programs = new List<SQLLITE.IPROGRAMME>();
247              gbpvr_valid_programs = sqlite.FilterProgramsByDateRange(sqlite.Programs, xmltv_programs_startdate_range, out gbpvr_invalid_programs);              var gbpvr_valid_programs = sqlite.GetValidPrograms(sqllite_programs, xmltv_programs, out gbpvr_invalid_programs);
248              xmltv_programs = xmltv_programs.OrderBy(s => s.ChannelNumber).ThenBy(s => DateTime.Parse(s.Start)).ToList();              xmltv_programs = xmltv_programs.OrderBy(s => s.ChannelNumber).ThenBy(s => DateTime.Parse(s.Start)).ToList();
249                //sqllite_channels.TrimExcess();
250              gbpvr_channels.TrimExcess();              //gbpvr_invalid_programs.TrimExcess();
251              gbpvr_invalid_programs.TrimExcess();              //gbpvr_valid_programs.TrimExcess();
252              gbpvr_valid_programs.TrimExcess();              //sqllite_programs.TrimExcess();
253              gbpvr_recordings.TrimExcess();              //xmltv_programs.TrimExcess();
254              xmltv_programs.TrimExcess();              //CheckScheduledRecordingsForDiscrepancies(sqllite_recordings);
255                //CheckProgramsForDiscrepancies(gbpvr_valid_programs, xmltv_programs);
               
               
   
   
             CheckScheduledRecordingsForDiscrepancies(gbpvr_recordings);  
               
             CheckProgramsForDiscrepancies(gbpvr_valid_programs.ToArray(), xmltv_programs.ToArray());  
256          }          }
257    
258          static IDateTimeRange GetXMLTVProgramStartDateRange(List<libxmltv.Interfaces.IProgramDefinition> programs)          static IDateTimeRange GetXMLTVProgramStartDateRange(List<libxmltv.Interfaces.IProgramDefinition> programs)
# Line 224  namespace GBPVRProgramDatabaseFixer Line 271  namespace GBPVRProgramDatabaseFixer
271    
272          static void CheckScheduledRecordingsForDiscrepancies(List<SQLLITE.IRECORDING_SCHEDULE> gbpvr)          static void CheckScheduledRecordingsForDiscrepancies(List<SQLLITE.IRECORDING_SCHEDULE> gbpvr)
273          {          {
274              //gLog.Warn.WriteLine("CheckScheduledRecordingsForDiscrepancies() has not been implemented");              ////gLog.Warn.WriteLine("CheckScheduledRecordingsForDiscrepancies() has not been implemented");
275              var manual_gbpvr_recordings = gbpvr.FindAll(p => p.recording_type == 0).ToList();              //var manual_gbpvr_recordings = gbpvr.FindAll(p => p.recording_type == 0).ToList();
   
             foreach (var manual_recording in manual_gbpvr_recordings)  
             {  
                 string title = manual_recording.filename;  
                 DateTime start = manual_recording.manual_start_time;  
                 DateTime end = manual_recording.manual_end_time;  
   
                 long channel_oid = manual_recording.manual_channel_oid;  
   
                 var found_channel = gbpvr_channels.Find(p => p.oid == channel_oid);  
                 var channel_number = found_channel.channel_number;  
   
                 var found_program = xmltv_programs.ToList().Find(p =>  
                     p.Title.ToLower() == title.ToLower() &&  
                     p.Start == start.ToDateTimeString() &&  
                     p.Stop == end.ToDateTimeString() &&  
                     p.ChannelNumber == channel_number  
                     );  
276    
277                  if (found_program != null)              //foreach (var manual_recording in manual_gbpvr_recordings)
278                  {              //{
279                      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());              //    string title = manual_recording.filename;
280                  }              //    DateTime start = manual_recording.manual_start_time;
281                  else              //    DateTime end = manual_recording.manual_end_time;
282                  {              //    long channel_oid = manual_recording.manual_channel_oid;
283                      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());              //    var found_channel = gbpvr_channels.Find(p => p.oid == channel_oid);
284                //    var channel_number = found_channel.channel_number;
285                      // find the program on the channel at the start time              //    var found_program = xmltv_programs.ToList().Find(p =>
286                      var correct_program = xmltv_programs.ToList().Find(p =>              //        p.Title.ToLower() == title.ToLower() &&
287                          p.ChannelNumber == channel_number &&              //        p.Start == start.ToDateTimeString() &&
288                          p.Start == start.ToDateTimeString()              //        p.Stop == end.ToDateTimeString() &&
289                          );              //        p.ChannelNumber == channel_number
290                      if (correct_program != null)              //        );
291                      {              //    if (found_program != null)
292                          gLog.Warn.WriteLine("\tThis will be recorded: {0}", correct_program.ToString());              //    {
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          static void CheckProgramsForDiscrepancies(SQLLITE.IPROGRAMME[] gbpvr, libxmltv.Interfaces.IProgramDefinition[] xmltv)              //        // find the program on the channel at the start time
299          {              //        var correct_program = xmltv_programs.ToList().Find(p =>
300              //gLog.Warn.WriteLine("CheckProgramsForDiscrepancies() has not been implemented");              //            p.ChannelNumber == channel_number &&
301              if (gbpvr.Count() != xmltv.Count())              //            p.Start == start.ToDateTimeString()
302              {              //            );
303                  throw new ArgumentOutOfRangeException("gbpvr.Count/xmltv.Count", string.Format("gbpvr.Count: '0x{0:x8}' != xmltv.Count: '0x{1:x8}'", gbpvr.Count(),xmltv.Count()));              //        if (correct_program != null)
304              }              //        {
305              for (int i = 0; i < gbpvr.Count(); i++)              //            gLog.Warn.WriteLine("\tThis will be recorded: {0}", correct_program.ToString());
306              {              //        }
307                  var gbpvr_entry = gbpvr[i];              //    }
308                  var xmltv_entry = gbpvr_entry.AsXMLTVProgramDefinition(sqlite);              //}
309                  if (!xmltv[i].Equals(xmltv_entry))          }
310                  {  
311                      gLog.Warn.WriteLine("Warning GBPVR Program oid: {0} might be invalid", gbpvr_entry.oid);          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.165  
changed lines
  Added in v.166

  ViewVC Help
Powered by ViewVC 1.1.22