/[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 181 by william, Sat Mar 16 17:56:55 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 class OldNewProgram          private class OldNewProgram : IOldNewProgram
31          {          {
32              public OldNewProgram() : this(new PROGRAMME(), new PROGRAMME()) { }              public OldNewProgram() : this(new PROGRAMME(), new PROGRAMME()) { }
33              public OldNewProgram(IPROGRAMME _old, IPROGRAMME _new) { OldProgram = _old; NewProgram = _new; }              public OldNewProgram(IPROGRAMME _old, IPROGRAMME _new) { OldProgram = _old; NewProgram = _new; }
# Line 197  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 209  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 249  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 304  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              List<SQLLITE.IPROGRAMME> source_valid = new List<IPROGRAMME>();              List<IOldNewProgram> source_valid = new List<IOldNewProgram>();
351              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();
352              xmltv_programs = xmltv_programs.OrderBy(s => DateTime.Parse(s.Start)).ToList();              xmltv_programs = xmltv_programs.OrderBy(s => DateTime.Parse(s.Start)).ToList();
353              gbpvr_programs.TrimExcess();              gbpvr_programs.TrimExcess();
# Line 334  namespace GBPVRProgramDatabaseFixer Line 374  namespace GBPVRProgramDatabaseFixer
374                      if(!xmltv_entry.Equals(program_xmltv_entry))                      if(!xmltv_entry.Equals(program_xmltv_entry))
375                      {                      {
376                          // data is different                          // data is different
377                          if (Debugger.IsAttached)                          var updated_program = program;
378    
379                            if (program_xmltv_entry.Title != xmltv_entry.Title)
380                            {
381                                gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing title", updated_program.oid);
382                                updated_program.name = xmltv_entry.Title;
383                            }
384                            if (program_xmltv_entry.SubTitle != xmltv_entry.SubTitle)
385                            {
386                                gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing sub_title", updated_program.oid);
387                                updated_program.sub_title = xmltv_entry.SubTitle;
388                            }
389                            if (program_xmltv_entry.Stop != xmltv_entry.Stop)
390                            {
391                                gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing end_time", updated_program.oid);
392                                updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);
393                            }
394                            if (program_xmltv_entry.Start != xmltv_entry.Start)
395                            {
396                                gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing start_time", updated_program.oid);
397                                updated_program.start_time = DateTime.Parse(xmltv_entry.Start);
398                            }
399                            if (program_xmltv_entry.Description != xmltv_entry.Description)
400                            {
401                                gLog.Verbose.Warn.WriteLine("    Program oid: '{0}' - replacing description", updated_program.oid);
402                                updated_program.description = xmltv_entry.Description;
403                            }
404    
405                            var updated_xmltv_entry = updated_program.AsXMLTVProgramDefinition(this);
406                            if (!xmltv_entry.Equals(updated_xmltv_entry))
407                          {                          {
408                              Debugger.Break();                              throw new Exception(string.Format("Program oid '{0}' was not properly updated.", updated_program.oid));
409                          }                          }
410                            source_valid.Add(new OldNewProgram(program, updated_program));
411                      }                      }
412                      else                      else
413                      {                      {
414                          // data is the same                          // data is the same
415                            source_valid.Add(new OldNewProgram(program, program));
416                      }                      }
417                  }                  }
418                  index++;                  index++;

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

  ViewVC Help
Powered by ViewVC 1.1.22