/[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 173 by william, Sat Mar 16 15:33:25 2013 UTC revision 174 by william, Sat Mar 16 16:03:19 2013 UTC
# Line 17  namespace GBPVRProgramDatabaseFixer Line 17  namespace GBPVRProgramDatabaseFixer
17          List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; }          List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; }
18          List<SQLLITE.ICHANNEL> Channels { get; }          List<SQLLITE.ICHANNEL> Channels { get; }
19          IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs);          IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs);
20          List<SQLLITE.IPROGRAMME> CreateUpdatedProgramsList(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs);          List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs);
21    
22      }      }
23      public class SQLLITE : ISQLLITE      public class SQLLITE : ISQLLITE
# Line 293  namespace GBPVRProgramDatabaseFixer Line 293  namespace GBPVRProgramDatabaseFixer
293              return range;              return range;
294          }          }
295    
296          public List<SQLLITE.IPROGRAMME> CreateUpdatedProgramsList(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid)          public List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid)
297          {          {
298              source_invalid = new List<IPROGRAMME>();              source_invalid = new List<IPROGRAMME>();
299              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();                          gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();            
# Line 348  namespace GBPVRProgramDatabaseFixer Line 348  namespace GBPVRProgramDatabaseFixer
348                  {                  {
349                      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.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());
350                      source_invalid.Add(program);                      source_invalid.Add(program);
351                        // remove database entry
352                        if (!RemoveProgramDatabaseEntry(program))
353                        {
354                            gLog.Error.WriteLine("Failed to remove entry with oid: '{0}'", program.oid);
355                        }
356                  }                  }
357                  else                  else
358                  {                  {
359                      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.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());
360                      var updated_program = program;                      var updated_program = program;
361                        bool needsupdate = false;
362                      if (xmltv_entry.Title != program.name)                      if (xmltv_entry.Title != program.name)
363                      {                      {
364                          gLog.Warn.WriteLine("    Updating:");                          gLog.Warn.WriteLine("    Updating:");
365                          gLog.Warn.WriteLine("        Old Title: {0}", program.name);                          gLog.Warn.WriteLine("        Old Title: {0}", program.name);
366                          gLog.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);                          gLog.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);
367                          updated_program.name = xmltv_entry.Title;                          updated_program.name = xmltv_entry.Title;
368                            needsupdate = true;
369                      }                      }
370                      if (xmltv_entry.SubTitle != program.sub_title)                      if (xmltv_entry.SubTitle != program.sub_title)
371                      {                      {
# Line 366  namespace GBPVRProgramDatabaseFixer Line 373  namespace GBPVRProgramDatabaseFixer
373                          gLog.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);                          gLog.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);
374                          gLog.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);                          gLog.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);
375                          updated_program.sub_title = xmltv_entry.SubTitle;                          updated_program.sub_title = xmltv_entry.SubTitle;
376                            needsupdate = true;
377                      }                      }
378                      if (xmltv_entry.Description != program.description)                      if (xmltv_entry.Description != program.description)
379                      {                      {
380                          gLog.Warn.WriteLine("    Updating:");                          gLog.Warn.WriteLine("    Updating:");
381                          gLog.Warn.WriteLine("        Old Descption: {0}", program.description);                          gLog.Warn.WriteLine("        Old Descption: {0}", program.description);
382                          gLog.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);                          gLog.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);
383                          updated_program.description = xmltv_entry.Description;                                                  updated_program.description = xmltv_entry.Description;
384                            needsupdate = true;
385                      }                      }
386                      if (DateTime.Parse(xmltv_entry.Start) != program.start_time)                      if (DateTime.Parse(xmltv_entry.Start) != program.start_time)
387                      {                      {
# Line 380  namespace GBPVRProgramDatabaseFixer Line 389  namespace GBPVRProgramDatabaseFixer
389                          gLog.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());                          gLog.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());
390                          gLog.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());                          gLog.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());
391                          updated_program.start_time = DateTime.Parse(xmltv_entry.Start);                          updated_program.start_time = DateTime.Parse(xmltv_entry.Start);
392                            needsupdate = true;
393                      }                      }
394                      if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)                      if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)
395                      {                      {
# Line 387  namespace GBPVRProgramDatabaseFixer Line 397  namespace GBPVRProgramDatabaseFixer
397                          gLog.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());                          gLog.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());
398                          gLog.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());                          gLog.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());
399                          updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);                          updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);
400                            needsupdate = true;
401                      }                      }
402                      source_valid.Add(updated_program);                      source_valid.Add(updated_program);
403                        if (needsupdate)
404                        {
405                            // update database entry
406                            if (!UpdateProgramDatabaseEntry(program, updated_program))
407                            {
408                                gLog.Error.WriteLine("Failed to update entry with oid: '{0}'", program.oid);
409                            }
410                        }
411                  }                  }
412                  index++;                  index++;
413              }              }
# Line 611  namespace GBPVRProgramDatabaseFixer Line 630  namespace GBPVRProgramDatabaseFixer
630              }              }
631          }          }
632    
633    
634    
635            private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program)
636            {
637                bool result = false;
638                try
639                {                
640                    using (SQLiteConnection con = CreateConnection())
641                    {
642                        try
643                        {
644                            gLog.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);
645                            con.Open();
646                            string command_text = string.Format(@"DELETE FROM [{0}] WHERE [oid] = @oid;", TABLES.PROGRAMME);
647                            gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
648                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
649                            {
650                                cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
651                                int rowsupdated = cmd.ExecuteNonQuery();
652                                gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated);
653                            }
654                            con.Clone();
655                            result = true;
656                        }
657                        catch (SQLiteException ex)
658                        {
659                            gLog.Error.WriteLine(ex.ToString());
660                            result = false;
661                        }
662                    }
663                }
664                catch (Exception ex)
665                {
666                    gLog.Error.WriteLine(ex.ToString());
667                    result = false;
668                }
669                return result;
670            }
671            private bool UpdateProgramDatabaseEntry(IPROGRAMME old_program, IPROGRAMME new_program)
672            {
673                bool result = false;
674                try
675                {
676                    using (SQLiteConnection con = CreateConnection())
677                    {
678                        try
679                        {
680                            gLog.Info.WriteLine("Updating old program with oid: '{0}'", old_program.oid);
681                            con.Open();
682                            //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
683                            string command_text = string.Empty;
684                            StringBuilder builder = new StringBuilder();
685    
686                            builder.AppendLine(string.Format("UPDATE [{0}]", TABLES.PROGRAMME));
687                            builder.Append("SET ");
688                            builder.AppendFormat("[name]=@name,");
689                            builder.AppendFormat("[sub_title]=@sub_title,");
690                            builder.AppendFormat("[description]=@description,");
691                            builder.AppendFormat("[start_time]=@start_time,");
692                            builder.AppendFormat("[end_time]=@end_time,");
693                            builder.AppendFormat("[channel_oid]=@channel_oid,");
694                            builder.AppendFormat("[unique_identifier]=@unique_identifier,");
695                            builder.AppendFormat("[rating]=@rating");
696                            builder.AppendLine(" WHERE [oid] = @oid");
697    
698                            command_text = builder.ToString();
699                            gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
700                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
701                            {
702                                cmd.Parameters.Add(new SQLiteParameter("name", new_program.name));
703                                cmd.Parameters.Add(new SQLiteParameter("sub_title", new_program.sub_title));
704                                cmd.Parameters.Add(new SQLiteParameter("description", new_program.description));
705                                cmd.Parameters.Add(new SQLiteParameter("start_time", new_program.start_time));
706                                cmd.Parameters.Add(new SQLiteParameter("end_time", new_program.end_time));
707                                cmd.Parameters.Add(new SQLiteParameter("channel_oid", new_program.channel_oid));
708                                cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));
709                                cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));
710                                int rowsupdated = cmd.ExecuteNonQuery();
711                                gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated);
712                            }
713                            con.Clone();
714                            result = true;
715                        }
716                        catch (SQLiteException ex)
717                        {
718                            gLog.Error.WriteLine(ex.ToString());
719                            result = false;
720                        }
721                    }
722                }
723                catch (Exception ex)
724                {
725                    gLog.Error.WriteLine(ex.ToString());
726                    result = false;
727                }
728                return result;
729            }
730      }      }
731  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.22