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

Diff of /trunk/GBPVRProgramDatabaseFixer/SQLLITE.cs

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

revision 179 by william, Sat Mar 16 17:13:23 2013 UTC revision 182 by william, Sat Mar 16 18:23:11 2013 UTC
# Line 11  using libxmltv.Interfaces; Line 11  using libxmltv.Interfaces;
11  using libxmltv.Core;  using libxmltv.Core;
12  namespace GBPVRProgramDatabaseFixer  namespace GBPVRProgramDatabaseFixer
13  {  {
14        public interface IOldNewProgram
15        {
16            SQLLITE.IPROGRAMME OldProgram { get; }
17            SQLLITE.IPROGRAMME NewProgram { get; }
18        }
19      public interface ISQLLITE      public interface ISQLLITE
20      {      {
21          List<SQLLITE.IPROGRAMME> Programs { get; }          List<SQLLITE.IPROGRAMME> Programs { get; }
22          List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; }          List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; }
23          List<SQLLITE.ICHANNEL> Channels { get; }          List<SQLLITE.ICHANNEL> Channels { get; }
24          IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs);          IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs);
25          List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs);          List<IOldNewProgram> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs);
26    
27      }      }
28      public class SQLLITE : ISQLLITE      public class SQLLITE : ISQLLITE
29      {      {
30          private struct OldNewProgram          private class OldNewProgram : IOldNewProgram
31          {          {
32              public IPROGRAMME OldProgram;              public OldNewProgram() : this(new PROGRAMME(), new PROGRAMME()) { }
33              public IPROGRAMME NewProgram;              public OldNewProgram(IPROGRAMME _old, IPROGRAMME _new) { OldProgram = _old; NewProgram = _new; }
34    
35                public IPROGRAMME OldProgram { get; private set; }
36                public IPROGRAMME NewProgram { get; private set; }
37          }          }
38          public static ISQLLITE Create(string database, EventHandler<EventArgs> OnInstanceCreated)          public static ISQLLITE Create(string database, EventHandler<EventArgs> OnInstanceCreated)
39          {          {
# Line 194  namespace GBPVRProgramDatabaseFixer Line 202  namespace GBPVRProgramDatabaseFixer
202              #endregion              #endregion
203          }          }
204    
205          public interface IPROGRAMME          public interface IPROGRAMME : IEquatable<IPROGRAMME>
206          {              {
207              Int64 oid { get; set; }              Int64 oid { get; set; }
208              String name { get; set; }              String name { get; set; }
209              String sub_title { get; set; }              String sub_title { get; set; }
# Line 206  namespace GBPVRProgramDatabaseFixer Line 214  namespace GBPVRProgramDatabaseFixer
214              String unique_identifier { get; set; }              String unique_identifier { get; set; }
215              String rating { get; set; }              String rating { get; set; }
216    
217                string ToString();
218              IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite);              IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite);
219          }          }
220          private class PROGRAMME : IPROGRAMME          private class PROGRAMME : IPROGRAMME
# Line 232  namespace GBPVRProgramDatabaseFixer Line 241  namespace GBPVRProgramDatabaseFixer
241              public IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite)              public IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite)
242              {              {
243                  ProgramList.ProgramDefintion definition = new ProgramList.ProgramDefintion();                  ProgramList.ProgramDefintion definition = new ProgramList.ProgramDefintion();
244    
245                  var channel = sqllite.Channels.Find(s => s.oid == this.channel_oid);                  var channel = sqllite.Channels.Find(s => s.oid == this.channel_oid);
246                  definition.ChannelName = channel.display_name;                  var channelname = channel.display_name;
247                  definition.ChannelNumber = (int)channel.channel_number;                  var split = channelname.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
248                    definition.ChannelNumber = Convert.ToInt32(split.First());
249                    definition.ChannelName = string.IsNullOrEmpty(split.Last()) ? string.Empty : split.Last().ToString();
250                  definition.Description = this.description;                  definition.Description = this.description;
251                  definition.Start = this.start_time.ToDateTimeString();                  definition.Start = this.start_time.ToDateTimeString();
252                  definition.Stop = this.end_time.ToDateTimeString();                  definition.Stop = this.end_time.ToDateTimeString();
# Line 243  namespace GBPVRProgramDatabaseFixer Line 255  namespace GBPVRProgramDatabaseFixer
255                  return definition;                  return definition;
256              }              }
257              #endregion              #endregion
258    
259                public bool Equals(IPROGRAMME other)
260                {
261                    return this.ToString() == other.ToString();
262                }
263                public override string ToString()
264                {
265                    StringBuilder builder = new StringBuilder();
266    
267                    builder.AppendFormat("oid: '{0}' ", oid);
268                    builder.AppendFormat("name: '{0}' ", name);
269                    builder.AppendFormat("sub_title: '{0}' ", sub_title);
270                    builder.AppendFormat("description: '{0}' ", description);
271                    builder.AppendFormat("start_time: '{0}' ", start_time.ToDateTimeString());
272                    builder.AppendFormat("end_time: '{0}' ", end_time.ToDateTimeString());
273                    builder.AppendFormat("channel_oid: '{0}' ", channel_oid);
274                    builder.AppendFormat("unique_identifier: '{0}' ", unique_identifier);
275                    builder.AppendFormat("rating: '{0}'", rating);
276    
277                    return builder.ToString();
278                }
279                public override bool Equals(object obj)
280                {
281                    if (obj == null) { throw new ArgumentNullException("obj", "Object to compare cannot be null"); }
282                    if (obj.GetType().IsAssignableFrom(typeof(IPROGRAMME)))
283                    {
284                        return this.Equals((IPROGRAMME)obj);
285                    }
286                    return base.Equals(obj);
287                }
288                public override int GetHashCode()
289                {
290                    return this.ToString().GetHashCode();
291                }
292          }          }
293          #endregion          #endregion
294          private static class TABLES          private static class TABLES
# Line 298  namespace GBPVRProgramDatabaseFixer Line 344  namespace GBPVRProgramDatabaseFixer
344              return range;              return range;
345          }          }
346    
347          public List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid)          public List<IOldNewProgram> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid)
348          {          {
349              source_invalid = new List<IPROGRAMME>();              source_invalid = new List<IPROGRAMME>();
350              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();                          List<IOldNewProgram> source_valid = new List<IOldNewProgram>();
351              List<SQLLITE.IPROGRAMME> source_valid = new List<IPROGRAMME>();              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();
352                xmltv_programs = xmltv_programs.OrderBy(s => DateTime.Parse(s.Start)).ToList();
353                gbpvr_programs.TrimExcess();
354                xmltv_programs.TrimExcess();
355    
             List<OldNewProgram> source_update = new List<OldNewProgram>();  
             //if (range == null)  
             //{  
             //    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");  
             //    return list;  
             //}  
             //gLog.Warn.WriteLine("FilterProgramsByDateRange has not been implemented");  
               
356              double total = gbpvr_programs.Count;              double total = gbpvr_programs.Count;
357              double index = 0;              double index = 0;
358              double progress = 0;              double progress = 0;
359              foreach (var program in gbpvr_programs)              foreach (var program in gbpvr_programs)
360              {                {
361                  progress = 100.0 * (index / total);                  progress = 100.0 * (index / total);
362                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Filtering GBPVR Programs: {0:00}%", (int)progress)));                                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Filtering GBPVR Programs: {0:00}%", (int)progress)));                
363                  var channel_oid = program.channel_oid;                  // find an entry in xmltv_programs by Channel Number & StartDate                
364                  var channel = this.Channels.Find(s => s.oid == channel_oid);                  var program_xmltv_entry = program.AsXMLTVProgramDefinition(this);
365                  var start_date = program.start_time;                  var xmltv_entry = xmltv_programs.Find(s => s.ChannelNumber == program_xmltv_entry.ChannelNumber && s.Start == program_xmltv_entry.Start);
                 //var xmltv_entry_list = xmltv_programs.FindAll(s => s.ChannelNumber == channel.channel_number && s.Start == start_date.ToDateTimeString());  
                 var query = from c in xmltv_programs  
                             where  
                             c.ChannelNumber == channel.channel_number &&  
                             c.Start == start_date.ToDateTimeString()  
                             select c;  
   
                 IProgramDefinition xmltv_entry = null;  
                 if (query.Count()-1 > 0)  
                 {  
                     gLog.Verbose.Error.WriteLine("Found more than one entry: Matching channel='{0}' and start='{1}'", channel.channel_number, start_date.ToDateTimeString());  
                     gLog.Verbose.Error.WriteLine("    GB-PVR Program Data: oid='{0}' channel_oid='{1}' name='{2}' sub_title='{3}' description='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.description);  
                     if (Debugger.IsAttached)  
                     {                        
                         gLog.Error.WriteLine("    Found: {0} matching entries", query.Count());  
                         int k_index = 0;  
                         foreach (var k in query)  
                         {  
                             gLog.Verbose.Error.WriteLine("    query[{0}]: channel='{1}' start='{2}' ('{3}') title='{4}' subtitle='{5}' description='{6}'", k_index, k.ChannelNumber, k.Start, DateTime.Parse(k.Start).ToString("yyyy/MM/dd HH:mm:ss.fffffff"), k.Title, k.SubTitle, k.Description);  
                             k_index++;  
                         }  
                         Debugger.Break();  
                     }  
                 }  
                 else  
                 {  
                     xmltv_entry = query.FirstOrDefault();  
                 }  
   
366                  if (xmltv_entry == null)                  if (xmltv_entry == null)
367                  {                  {
368                      //gLog.Verbose.Warn.WriteLine("Invalidating GB-PVR Program: oid='{0}' channel_oid='{1}' title='{2}' start='{3}'", program.oid, program.channel_oid, program.name, program.start_time.ToDateTimeString());                      // xmltv entry was not found
369                      source_invalid.Add(program);                                        source_invalid.Add(program);
370                  }                  }
371                  else                  else
372                  {                  {
373                      //gLog.Verbose.Warn.WriteLine("Updating GB-PVR Program (if needed): oid='{0}' channel_oid='{1}' title='{2}' subtitle='{3}' start='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.start_time.ToDateTimeString());                      // check if the xmltv entry has different data from the current program
374                      var updated_program = program;                      if(!xmltv_entry.Equals(program_xmltv_entry))
                     bool needsupdate = false;  
                     if (xmltv_entry.Title != program.name)  
                     {  
                         //gLog.Verbose.Warn.WriteLine("    Updating:");  
                         //gLog.Verbose.Warn.WriteLine("        Old Title: {0}", program.name);  
                         //gLog.Verbose.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);  
                         updated_program.name = xmltv_entry.Title;  
                         needsupdate = true;  
                     }  
                     if (xmltv_entry.SubTitle != program.sub_title)  
                     {  
                         //gLog.Verbose.Warn.WriteLine("    Updating:");  
                         //gLog.Verbose.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);  
                         //gLog.Verbose.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);  
                         updated_program.sub_title = xmltv_entry.SubTitle;  
                         needsupdate = true;  
                     }  
                     if (xmltv_entry.Description != program.description)  
                     {  
                         //gLog.Verbose.Warn.WriteLine("    Updating:");  
                         //gLog.Verbose.Warn.WriteLine("        Old Descption: {0}", program.description);  
                         //gLog.Verbose.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);  
                         updated_program.description = xmltv_entry.Description;  
                         needsupdate = true;  
                     }  
                     if (DateTime.Parse(xmltv_entry.Start) != program.start_time)  
                     {  
                         //gLog.Verbose.Warn.WriteLine("    Updating:");  
                         //gLog.Verbose.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());  
                         //gLog.Verbose.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());  
                         updated_program.start_time = DateTime.Parse(xmltv_entry.Start);  
                         needsupdate = true;  
                     }  
                     if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)  
                     {  
                         //gLog.Verbose.Warn.WriteLine("    Updating:");  
                         //gLog.Verbose.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());  
                         //gLog.Verbose.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());  
                         updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);  
                         needsupdate = true;  
                     }  
                       
                     if (needsupdate)  
375                      {                      {
376                          OldNewProgram p = new OldNewProgram();                          // data is different
377                          p.OldProgram = program;                          var updated_program = program;
                         p.NewProgram = updated_program;  
                         source_update.Add(p);  
                     }  
                     source_valid.Add(updated_program);  
                 }  
                 index++;  
             }  
   
378    
379              source_valid = source_valid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();                          if (program_xmltv_entry.Title != xmltv_entry.Title)
380              source_invalid = source_invalid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();                          {
381                                gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing title", updated_program.oid);
382              if (source_invalid.Count > 0)                              updated_program.name = xmltv_entry.Title;
383              {                          }
384                  double source_invalid_count = source_valid.Count;                          if (program_xmltv_entry.SubTitle != xmltv_entry.SubTitle)
385                  double source_invalid_index = 0;                          {
386                  double source_invalid_progress = 0;                              gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing sub_title", updated_program.oid);
387                  foreach (var old_program in source_invalid)                              updated_program.sub_title = xmltv_entry.SubTitle;
388                  {                          }
389                      source_invalid_progress = 100.0 * (source_invalid_index / source_invalid_count);                          if (program_xmltv_entry.Stop != xmltv_entry.Stop)
390                      gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_invalid_progress, string.Format("Removing old GBPVR Programs: {0:00}%", (int)source_invalid_progress)));                              {
391                      // remove database entry                              gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing end_time", updated_program.oid);
392                      if (!RemoveProgramDatabaseEntry(old_program))                              updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);
393                      {                          }
394                          gLog.Error.WriteLine("Failed to remove program with oid: '{0}'", old_program.oid);                          if (program_xmltv_entry.Start != xmltv_entry.Start)
395                      }                          {
396                      else                              gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing start_time", updated_program.oid);
397                      {                              updated_program.start_time = DateTime.Parse(xmltv_entry.Start);
398                          gLog.Verbose.Info.WriteLine("Removed program with oid: '{0}'", old_program.oid);                          }
399                      }                          if (program_xmltv_entry.Description != xmltv_entry.Description)
400                      source_invalid_index++;                          {
401                  }                              gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing description", updated_program.oid);
402              }                              updated_program.description = xmltv_entry.Description;
403              else                          }
             {  
                 gLog.Info.WriteLine("No old GB-PVR Programs needed to be removed.");  
             }  
404    
405              if (source_update.Count > 0)                          var updated_xmltv_entry = updated_program.AsXMLTVProgramDefinition(this);
406              {                          if (!xmltv_entry.Equals(updated_xmltv_entry))
407                  double source_update_count = source_valid.Count;                          {
408                  double source_update_index = 0;                              throw new Exception(string.Format("Program oid '{0}' was not properly updated.", updated_program.oid));
409                  double source_update_progress = 0;                          }
410                  foreach (var p in source_update)                          source_valid.Add(new OldNewProgram(program, updated_program));
                 {  
                     source_update_progress = 100.0 * (source_update_index / source_update_count);  
                     gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_update_progress, string.Format("Updating GBPVR Programs: {0:00}%", (int)source_update_progress)));      
                     // remove database entry  
                     if (!UpdateProgramDatabaseEntry(p.OldProgram,p.NewProgram))  
                     {  
                         gLog.Error.WriteLine("Failed to update program with oid: '{0}'", p.OldProgram.oid);  
411                      }                      }
412                      else                      else
413                      {                      {
414                          gLog.Verbose.Info.WriteLine("Upated program with oid: '{0}'", p.OldProgram.oid);                          // data is the same
415                            source_valid.Add(new OldNewProgram(program, program));
416                      }                      }
                     source_update_index++;  
417                  }                  }
418              }                  index++;
             else  
             {  
                 gLog.Info.WriteLine("No GB-PVR Programs needed to be updated.");  
419              }              }
420    
421              gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);              #region old-code
422              gLog.Info.WriteLine("Updated: 0x{0:x8} GB-PVR Programs", source_valid.Count);              //List<OldNewProgram> source_update = new List<OldNewProgram>();
423              gLog.Info.WriteLine("Removed: 0x{0:x8} GB-PVR Programs", source_invalid.Count);              ////if (range == null)
424              gLog.Info.WriteLine("Total GB-PVR Programs (Updated & Removed): 0x{0:x8}", source_valid.Count + source_invalid.Count);              ////{
425                ////    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");
426                ////    return list;
427                ////}
428                ////gLog.Warn.WriteLine("FilterProgramsByDateRange has not been implemented");            
429                //double total = gbpvr_programs.Count;
430                //double index = 0;
431                //double progress = 0;
432                //foreach (var program in gbpvr_programs)
433                //{  
434                //    progress = 100.0 * (index / total);
435                //    gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Filtering GBPVR Programs: {0:00}%", (int)progress)));                
436                //    var channel_oid = program.channel_oid;
437                //    var channel = this.Channels.Find(s => s.oid == channel_oid);
438                //    var start_date = program.start_time;
439                //    //var xmltv_entry_list = xmltv_programs.FindAll(s => s.ChannelNumber == channel.channel_number && s.Start == start_date.ToDateTimeString());
440                //    var query = from c in xmltv_programs
441                //                where
442                //                c.ChannelNumber == channel.channel_number &&
443                //                c.Start == start_date.ToDateTimeString()
444                //                select c;
445                //    IProgramDefinition xmltv_entry = null;
446                //    if (query.Count()-1 > 0)
447                //    {
448                //        gLog.Verbose.Error.WriteLine("Found more than one entry: Matching channel='{0}' and start='{1}'", channel.channel_number, start_date.ToDateTimeString());
449                //        gLog.Verbose.Error.WriteLine("    GB-PVR Program Data: oid='{0}' channel_oid='{1}' name='{2}' sub_title='{3}' description='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.description);
450                //        if (Debugger.IsAttached)
451                //        {                      
452                //            gLog.Error.WriteLine("    Found: {0} matching entries", query.Count());
453                //            int k_index = 0;
454                //            foreach (var k in query)
455                //            {
456                //                gLog.Verbose.Error.WriteLine("    query[{0}]: channel='{1}' start='{2}' ('{3}') title='{4}' subtitle='{5}' description='{6}'", k_index, k.ChannelNumber, k.Start, DateTime.Parse(k.Start).ToString("yyyy/MM/dd HH:mm:ss.fffffff"), k.Title, k.SubTitle, k.Description);
457                //                k_index++;
458                //            }
459                //            Debugger.Break();
460                //        }
461                //    }
462                //    else
463                //    {
464                //        xmltv_entry = query.FirstOrDefault();
465                //    }
466                //    if (xmltv_entry == null)
467                //    {
468                //        //gLog.Verbose.Warn.WriteLine("Invalidating GB-PVR Program: oid='{0}' channel_oid='{1}' title='{2}' start='{3}'", program.oid, program.channel_oid, program.name, program.start_time.ToDateTimeString());
469                //        source_invalid.Add(program);                  
470                //    }
471                //    else
472                //    {
473                //        //gLog.Verbose.Warn.WriteLine("Updating GB-PVR Program (if needed): oid='{0}' channel_oid='{1}' title='{2}' subtitle='{3}' start='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.start_time.ToDateTimeString());
474                //        var updated_program = program;
475                //        bool needsupdate = false;
476                //        if (xmltv_entry.Title != program.name)
477                //        {
478                //            //gLog.Verbose.Warn.WriteLine("    Updating:");
479                //            //gLog.Verbose.Warn.WriteLine("        Old Title: {0}", program.name);
480                //            //gLog.Verbose.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);
481                //            updated_program.name = xmltv_entry.Title;
482                //            needsupdate = true;
483                //        }
484                //        if (xmltv_entry.SubTitle != program.sub_title)
485                //        {
486                //            //gLog.Verbose.Warn.WriteLine("    Updating:");
487                //            //gLog.Verbose.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);
488                //            //gLog.Verbose.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);
489                //            updated_program.sub_title = xmltv_entry.SubTitle;
490                //            needsupdate = true;
491                //        }
492                //        if (xmltv_entry.Description != program.description)
493                //        {
494                //            //gLog.Verbose.Warn.WriteLine("    Updating:");
495                //            //gLog.Verbose.Warn.WriteLine("        Old Descption: {0}", program.description);
496                //            //gLog.Verbose.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);
497                //            updated_program.description = xmltv_entry.Description;
498                //            needsupdate = true;
499                //        }
500                //        if (DateTime.Parse(xmltv_entry.Start) != program.start_time)
501                //        {
502                //            //gLog.Verbose.Warn.WriteLine("    Updating:");
503                //            //gLog.Verbose.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());
504                //            //gLog.Verbose.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());
505                //            updated_program.start_time = DateTime.Parse(xmltv_entry.Start);
506                //            needsupdate = true;
507                //        }
508                //        if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)
509                //        {
510                //            //gLog.Verbose.Warn.WriteLine("    Updating:");
511                //            //gLog.Verbose.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());
512                //            //gLog.Verbose.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());
513                //            updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);
514                //            needsupdate = true;
515                //        }                    
516                //        if (needsupdate)
517                //        {
518                //            OldNewProgram p = new OldNewProgram();
519                //            p.OldProgram = program;
520                //            p.NewProgram = updated_program;
521                //            source_update.Add(p);
522                //        }
523                //        source_valid.Add(updated_program);
524                //    }
525                //    index++;
526                //}
527                //source_valid = source_valid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
528                //source_invalid = source_invalid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
529                //if (source_invalid.Count > 0)
530                //{
531                //    double source_invalid_count = source_valid.Count;
532                //    double source_invalid_index = 0;
533                //    double source_invalid_progress = 0;
534                //    foreach (var old_program in source_invalid)
535                //    {
536                //        source_invalid_progress = 100.0 * (source_invalid_index / source_invalid_count);
537                //        gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_invalid_progress, string.Format("Removing old GBPVR Programs: {0:00}%", (int)source_invalid_progress)));    
538                //        // remove database entry
539                //        if (!RemoveProgramDatabaseEntry(old_program))
540                //        {
541                //            gLog.Error.WriteLine("Failed to remove program with oid: '{0}'", old_program.oid);
542                //        }
543                //        else
544                //        {
545                //            gLog.Verbose.Info.WriteLine("Removed program with oid: '{0}'", old_program.oid);
546                //        }
547                //        source_invalid_index++;
548                //    }
549                //}
550                //else
551                //{
552                //    gLog.Info.WriteLine("No old GB-PVR Programs needed to be removed.");
553                //}
554                //if (source_update.Count > 0)
555                //{
556                //    double source_update_count = source_valid.Count;
557                //    double source_update_index = 0;
558                //    double source_update_progress = 0;
559                //    foreach (var p in source_update)
560                //    {
561                //        source_update_progress = 100.0 * (source_update_index / source_update_count);
562                //        gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_update_progress, string.Format("Updating GBPVR Programs: {0:00}%", (int)source_update_progress)));    
563                //        // remove database entry
564                //        if (!UpdateProgramDatabaseEntry(p.OldProgram,p.NewProgram))
565                //        {
566                //            gLog.Error.WriteLine("Failed to update program with oid: '{0}'", p.OldProgram.oid);
567                //        }
568                //        else
569                //        {
570                //            gLog.Verbose.Info.WriteLine("Upated program with oid: '{0}'", p.OldProgram.oid);
571                //        }
572                //        source_update_index++;
573                //    }
574                //}
575                //else
576                //{
577                //    gLog.Info.WriteLine("No GB-PVR Programs needed to be updated.");
578                //}
579                //gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);
580                //gLog.Info.WriteLine("Updated: 0x{0:x8} GB-PVR Programs", source_valid.Count);
581                //gLog.Info.WriteLine("Removed: 0x{0:x8} GB-PVR Programs", source_invalid.Count);
582                //gLog.Info.WriteLine("Total GB-PVR Programs (Updated & Removed): 0x{0:x8}", source_valid.Count + source_invalid.Count);
583                #endregion
584    
585              return source_valid;              return source_valid;
586          }          }
# Line 680  namespace GBPVRProgramDatabaseFixer Line 787  namespace GBPVRProgramDatabaseFixer
787          private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program)          private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program)
788          {          {
789              bool result = false;              bool result = false;
790              try              //try
791              {                              //{                
792                  using (SQLiteConnection con = CreateConnection())              //    using (SQLiteConnection con = CreateConnection())
793                  {              //    {
794                      try              //        try
795                      {              //        {
796                          gLog.Verbose.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);              //            gLog.Verbose.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);
797                          con.Open();              //            con.Open();
798                          string command_text = string.Format(@"DELETE FROM [{0}] WHERE [oid] = @oid;", TABLES.PROGRAMME);              //            string command_text = string.Format(@"DELETE FROM [{0}] WHERE [oid] = @oid;", TABLES.PROGRAMME);
799                          gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);              //            gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
800                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))              //            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
801                          {              //            {
802                              cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));              //                cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
803                              int rowsupdated = cmd.ExecuteNonQuery();              //                int rowsupdated = cmd.ExecuteNonQuery();
804                              gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);              //                gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
805                          }              //            }
806                          con.Clone();              //            con.Clone();
807                          result = true;              //            result = true;
808                      }              //        }
809                      catch (SQLiteException ex)              //        catch (SQLiteException ex)
810                      {              //        {
811                          gLog.Error.WriteLine(ex.ToString());              //            gLog.Error.WriteLine(ex.ToString());
812                          result = false;              //            result = false;
813                      }              //        }
814                  }              //    }
815              }              //}
816              catch (Exception ex)              //catch (Exception ex)
817              {              //{
818                  gLog.Error.WriteLine(ex.ToString());              //    gLog.Error.WriteLine(ex.ToString());
819                  result = false;              //    result = false;
820              }              //}
821              return result;              return result;
822          }          }
823          private bool UpdateProgramDatabaseEntry(IPROGRAMME old_program, IPROGRAMME new_program)          private bool UpdateProgramDatabaseEntry(IPROGRAMME old_program, IPROGRAMME new_program)
824          {          {
825              bool result = false;              bool result = false;
826              try              //try
827              {              //{
828                  using (SQLiteConnection con = CreateConnection())              //    using (SQLiteConnection con = CreateConnection())
829                  {              //    {
830                      try              //        try
831                      {              //        {
832                          gLog.Verbose.Info.WriteLine("Updating old program with oid: '{0}'", old_program.oid);              //            gLog.Verbose.Info.WriteLine("Updating old program with oid: '{0}'", old_program.oid);
833                          con.Open();              //            con.Open();
834                          //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);              //            //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
835                          string command_text = string.Empty;              //            string command_text = string.Empty;
836                          StringBuilder builder = new StringBuilder();              //            StringBuilder builder = new StringBuilder();
837                //            builder.AppendLine(string.Format("UPDATE [{0}]", TABLES.PROGRAMME));
838                          builder.AppendLine(string.Format("UPDATE [{0}]", TABLES.PROGRAMME));              //            builder.Append("SET ");
839                          builder.Append("SET ");              //            builder.AppendFormat("[name]=@name,");
840                          builder.AppendFormat("[name]=@name,");              //            builder.AppendFormat("[sub_title]=@sub_title,");
841                          builder.AppendFormat("[sub_title]=@sub_title,");              //            builder.AppendFormat("[description]=@description,");
842                          builder.AppendFormat("[description]=@description,");              //            builder.AppendFormat("[start_time]=@start_time,");
843                          builder.AppendFormat("[start_time]=@start_time,");              //            builder.AppendFormat("[end_time]=@end_time,");
844                          builder.AppendFormat("[end_time]=@end_time,");              //            builder.AppendFormat("[channel_oid]=@channel_oid,");
845                          builder.AppendFormat("[channel_oid]=@channel_oid,");              //            builder.AppendFormat("[unique_identifier]=@unique_identifier,");
846                          builder.AppendFormat("[unique_identifier]=@unique_identifier,");              //            builder.AppendFormat("[rating]=@rating");
847                          builder.AppendFormat("[rating]=@rating");              //            builder.AppendLine(" WHERE [oid] = @oid");
848                          builder.AppendLine(" WHERE [oid] = @oid");              //            command_text = builder.ToString();
849                //            gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
850                          command_text = builder.ToString();              //            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
851                          gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);              //            {
852                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))              //                cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
853                          {              //                cmd.Parameters.Add(new SQLiteParameter("name", new_program.name));
854                              cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));              //                cmd.Parameters.Add(new SQLiteParameter("sub_title", new_program.sub_title));
855                              cmd.Parameters.Add(new SQLiteParameter("name", new_program.name));              //                cmd.Parameters.Add(new SQLiteParameter("description", new_program.description));
856                              cmd.Parameters.Add(new SQLiteParameter("sub_title", new_program.sub_title));              //                cmd.Parameters.Add(new SQLiteParameter("start_time", new_program.start_time));
857                              cmd.Parameters.Add(new SQLiteParameter("description", new_program.description));              //                cmd.Parameters.Add(new SQLiteParameter("end_time", new_program.end_time));
858                              cmd.Parameters.Add(new SQLiteParameter("start_time", new_program.start_time));              //                cmd.Parameters.Add(new SQLiteParameter("channel_oid", new_program.channel_oid));
859                              cmd.Parameters.Add(new SQLiteParameter("end_time", new_program.end_time));              //                cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));
860                              cmd.Parameters.Add(new SQLiteParameter("channel_oid", new_program.channel_oid));              //                cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));
861                              cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));              //                int rowsupdated = cmd.ExecuteNonQuery();
862                              cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));              //                gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
863                              int rowsupdated = cmd.ExecuteNonQuery();              //            }
864                              gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);              //            con.Clone();
865                          }              //            result = true;
866                          con.Clone();              //        }
867                          result = true;              //        catch (SQLiteException ex)
868                      }              //        {
869                      catch (SQLiteException ex)              //            gLog.Error.WriteLine(ex.ToString());
870                      {              //            result = false;
871                          gLog.Error.WriteLine(ex.ToString());              //        }
872                          result = false;              //    }
873                      }              //}
874                  }              //catch (Exception ex)
875              }              //{
876              catch (Exception ex)              //    gLog.Error.WriteLine(ex.ToString());
877              {              //    result = false;
878                  gLog.Error.WriteLine(ex.ToString());              //}
                 result = false;  
             }  
879              return result;              return result;
880          }          }
881      }      }

Legend:
Removed from v.179  
changed lines
  Added in v.182

  ViewVC Help
Powered by ViewVC 1.1.22