/[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 175 by william, Sat Mar 16 16:06:20 2013 UTC revision 179 by william, Sat Mar 16 17:13:23 2013 UTC
# Line 22  namespace GBPVRProgramDatabaseFixer Line 22  namespace GBPVRProgramDatabaseFixer
22      }      }
23      public class SQLLITE : ISQLLITE      public class SQLLITE : ISQLLITE
24      {      {
25            private struct OldNewProgram
26            {
27                public IPROGRAMME OldProgram;
28                public IPROGRAMME NewProgram;
29            }
30          public static ISQLLITE Create(string database, EventHandler<EventArgs> OnInstanceCreated)          public static ISQLLITE Create(string database, EventHandler<EventArgs> OnInstanceCreated)
31          {          {
32              return new SQLLITE(database, OnInstanceCreated);              return new SQLLITE(database, OnInstanceCreated);
# Line 298  namespace GBPVRProgramDatabaseFixer Line 303  namespace GBPVRProgramDatabaseFixer
303              source_invalid = new List<IPROGRAMME>();              source_invalid = new List<IPROGRAMME>();
304              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();                          gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();            
305              List<SQLLITE.IPROGRAMME> source_valid = new List<IPROGRAMME>();              List<SQLLITE.IPROGRAMME> source_valid = new List<IPROGRAMME>();
306    
307                List<OldNewProgram> source_update = new List<OldNewProgram>();
308              //if (range == null)              //if (range == null)
309              //{              //{
310              //    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");              //    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");
# Line 325  namespace GBPVRProgramDatabaseFixer Line 332  namespace GBPVRProgramDatabaseFixer
332                  IProgramDefinition xmltv_entry = null;                  IProgramDefinition xmltv_entry = null;
333                  if (query.Count()-1 > 0)                  if (query.Count()-1 > 0)
334                  {                  {
335                      gLog.Error.WriteLine("Found more than one entry: Matching channel='{0}' and start='{1}'", channel.channel_number, start_date.ToDateTimeString());                      gLog.Verbose.Error.WriteLine("Found more than one entry: Matching channel='{0}' and start='{1}'", channel.channel_number, start_date.ToDateTimeString());
336                      gLog.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);                      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);
337                      if (Debugger.IsAttached)                      if (Debugger.IsAttached)
338                      {                                            {                      
339                          gLog.Error.WriteLine("    Found: {0} matching entries", query.Count());                          gLog.Error.WriteLine("    Found: {0} matching entries", query.Count());
340                          int k_index = 0;                          int k_index = 0;
341                          foreach (var k in query)                          foreach (var k in query)
342                          {                          {
343                              gLog.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);                              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);
344                              k_index++;                              k_index++;
345                          }                          }
346                          Debugger.Break();                          Debugger.Break();
# Line 346  namespace GBPVRProgramDatabaseFixer Line 353  namespace GBPVRProgramDatabaseFixer
353    
354                  if (xmltv_entry == null)                  if (xmltv_entry == null)
355                  {                  {
356                      gLog.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());                      //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());
357                      source_invalid.Add(program);                      source_invalid.Add(program);                  
                     // remove database entry  
                     if (!RemoveProgramDatabaseEntry(program))  
                     {  
                         gLog.Error.WriteLine("Failed to remove entry with oid: '{0}'", program.oid);  
                     }  
358                  }                  }
359                  else                  else
360                  {                  {
361                      gLog.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());                      //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());
362                      var updated_program = program;                      var updated_program = program;
363                      bool needsupdate = false;                      bool needsupdate = false;
364                      if (xmltv_entry.Title != program.name)                      if (xmltv_entry.Title != program.name)
365                      {                      {
366                          gLog.Warn.WriteLine("    Updating:");                          //gLog.Verbose.Warn.WriteLine("    Updating:");
367                          gLog.Warn.WriteLine("        Old Title: {0}", program.name);                          //gLog.Verbose.Warn.WriteLine("        Old Title: {0}", program.name);
368                          gLog.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);                          //gLog.Verbose.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);
369                          updated_program.name = xmltv_entry.Title;                          updated_program.name = xmltv_entry.Title;
370                          needsupdate = true;                          needsupdate = true;
371                      }                      }
372                      if (xmltv_entry.SubTitle != program.sub_title)                      if (xmltv_entry.SubTitle != program.sub_title)
373                      {                      {
374                          gLog.Warn.WriteLine("    Updating:");                          //gLog.Verbose.Warn.WriteLine("    Updating:");
375                          gLog.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);                          //gLog.Verbose.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);
376                          gLog.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);                          //gLog.Verbose.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);
377                          updated_program.sub_title = xmltv_entry.SubTitle;                          updated_program.sub_title = xmltv_entry.SubTitle;
378                          needsupdate = true;                          needsupdate = true;
379                      }                      }
380                      if (xmltv_entry.Description != program.description)                      if (xmltv_entry.Description != program.description)
381                      {                      {
382                          gLog.Warn.WriteLine("    Updating:");                          //gLog.Verbose.Warn.WriteLine("    Updating:");
383                          gLog.Warn.WriteLine("        Old Descption: {0}", program.description);                          //gLog.Verbose.Warn.WriteLine("        Old Descption: {0}", program.description);
384                          gLog.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);                          //gLog.Verbose.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);
385                          updated_program.description = xmltv_entry.Description;                          updated_program.description = xmltv_entry.Description;
386                          needsupdate = true;                          needsupdate = true;
387                      }                      }
388                      if (DateTime.Parse(xmltv_entry.Start) != program.start_time)                      if (DateTime.Parse(xmltv_entry.Start) != program.start_time)
389                      {                      {
390                          gLog.Warn.WriteLine("    Updating:");                          //gLog.Verbose.Warn.WriteLine("    Updating:");
391                          gLog.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());                          //gLog.Verbose.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());
392                          gLog.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());                          //gLog.Verbose.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());
393                          updated_program.start_time = DateTime.Parse(xmltv_entry.Start);                          updated_program.start_time = DateTime.Parse(xmltv_entry.Start);
394                          needsupdate = true;                          needsupdate = true;
395                      }                      }
396                      if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)                      if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)
397                      {                      {
398                          gLog.Warn.WriteLine("    Updating:");                          //gLog.Verbose.Warn.WriteLine("    Updating:");
399                          gLog.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());                          //gLog.Verbose.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());
400                          gLog.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());                          //gLog.Verbose.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());
401                          updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);                          updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);
402                          needsupdate = true;                          needsupdate = true;
403                      }                      }
404                      source_valid.Add(updated_program);                      
405                      if (needsupdate)                      if (needsupdate)
406                      {                      {
407                          // update database entry                          OldNewProgram p = new OldNewProgram();
408                          if (!UpdateProgramDatabaseEntry(program, updated_program))                          p.OldProgram = program;
409                          {                          p.NewProgram = updated_program;
410                              gLog.Error.WriteLine("Failed to update entry with oid: '{0}'", program.oid);                          source_update.Add(p);
                         }  
411                      }                      }
412                        source_valid.Add(updated_program);
413                  }                  }
414                  index++;                  index++;
415              }              }
416    
             //for (int i = 0; i < programs.Count(); i++)  
             //{  
             //    var gbpvr_entry = gbpvr[i];  
             //    var xmltv_entry = gbpvr_entry.AsXMLTVProgramDefinition(sqlite);  
             //    if (!xmltv[i].Equals(xmltv_entry))  
             //    {  
             //        gLog.Warn.WriteLine("Warning GBPVR Program oid: {0} might be invalid", gbpvr_entry.oid);  
             //    }  
             //}  
417    
418              source_valid = source_valid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();              source_valid = source_valid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
419              source_invalid = source_invalid.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();
420    
421                if (source_invalid.Count > 0)
422                {
423                    double source_invalid_count = source_valid.Count;
424                    double source_invalid_index = 0;
425                    double source_invalid_progress = 0;
426                    foreach (var old_program in source_invalid)
427                    {
428                        source_invalid_progress = 100.0 * (source_invalid_index / source_invalid_count);
429                        gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_invalid_progress, string.Format("Removing old GBPVR Programs: {0:00}%", (int)source_invalid_progress)));    
430                        // remove database entry
431                        if (!RemoveProgramDatabaseEntry(old_program))
432                        {
433                            gLog.Error.WriteLine("Failed to remove program with oid: '{0}'", old_program.oid);
434                        }
435                        else
436                        {
437                            gLog.Verbose.Info.WriteLine("Removed program with oid: '{0}'", old_program.oid);
438                        }
439                        source_invalid_index++;
440                    }
441                }
442                else
443                {
444                    gLog.Info.WriteLine("No old GB-PVR Programs needed to be removed.");
445                }
446    
447                if (source_update.Count > 0)
448                {
449                    double source_update_count = source_valid.Count;
450                    double source_update_index = 0;
451                    double source_update_progress = 0;
452                    foreach (var p in source_update)
453                    {
454                        source_update_progress = 100.0 * (source_update_index / source_update_count);
455                        gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_update_progress, string.Format("Updating GBPVR Programs: {0:00}%", (int)source_update_progress)));    
456                        // remove database entry
457                        if (!UpdateProgramDatabaseEntry(p.OldProgram,p.NewProgram))
458                        {
459                            gLog.Error.WriteLine("Failed to update program with oid: '{0}'", p.OldProgram.oid);
460                        }
461                        else
462                        {
463                            gLog.Verbose.Info.WriteLine("Upated program with oid: '{0}'", p.OldProgram.oid);
464                        }
465                        source_update_index++;
466                    }
467                }
468                else
469                {
470                    gLog.Info.WriteLine("No GB-PVR Programs needed to be updated.");
471                }
472    
473              gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);              gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);
474              gLog.Info.WriteLine("Updated: 0x{0:x8} GB-PVR Programs", source_valid.Count);              gLog.Info.WriteLine("Updated: 0x{0:x8} GB-PVR Programs", source_valid.Count);
475              gLog.Info.WriteLine("Removed: 0x{0:x8} GB-PVR Programs", source_invalid.Count);              gLog.Info.WriteLine("Removed: 0x{0:x8} GB-PVR Programs", source_invalid.Count);
# Line 641  namespace GBPVRProgramDatabaseFixer Line 686  namespace GBPVRProgramDatabaseFixer
686                  {                  {
687                      try                      try
688                      {                      {
689                          gLog.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);                          gLog.Verbose.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);
690                          con.Open();                          con.Open();
691                          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);
692                          gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);                          gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
# Line 649  namespace GBPVRProgramDatabaseFixer Line 694  namespace GBPVRProgramDatabaseFixer
694                          {                          {
695                              cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));                              cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
696                              int rowsupdated = cmd.ExecuteNonQuery();                              int rowsupdated = cmd.ExecuteNonQuery();
697                              gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated);                              gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
698                          }                          }
699                          con.Clone();                          con.Clone();
700                          result = true;                          result = true;
# Line 677  namespace GBPVRProgramDatabaseFixer Line 722  namespace GBPVRProgramDatabaseFixer
722                  {                  {
723                      try                      try
724                      {                      {
725                          gLog.Info.WriteLine("Updating old program with oid: '{0}'", old_program.oid);                          gLog.Verbose.Info.WriteLine("Updating old program with oid: '{0}'", old_program.oid);
726                          con.Open();                          con.Open();
727                          //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);
728                          string command_text = string.Empty;                          string command_text = string.Empty;
# Line 709  namespace GBPVRProgramDatabaseFixer Line 754  namespace GBPVRProgramDatabaseFixer
754                              cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));                              cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));
755                              cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));                              cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));
756                              int rowsupdated = cmd.ExecuteNonQuery();                              int rowsupdated = cmd.ExecuteNonQuery();
757                              gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated);                              gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
758                          }                          }
759                          con.Clone();                          con.Clone();
760                          result = true;                          result = true;

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

  ViewVC Help
Powered by ViewVC 1.1.22