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

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

  ViewVC Help
Powered by ViewVC 1.1.22