/[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 195 by william, Sat Mar 16 21:44:30 2013 UTC revision 196 by william, Sat Mar 16 21:53:19 2013 UTC
# Line 22  namespace GBPVRProgramDatabaseFixer Line 22  namespace GBPVRProgramDatabaseFixer
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<IOldNewProgram> FixGBPVRProgramsDatabase(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);
26    
27          void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs);          void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs);
28          void UpdateGBPVRPrograms(List<IOldNewProgram> programs);          void UpdateGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs);
29    
30      }      }
31      public class SQLLITE : ISQLLITE      public class SQLLITE : ISQLLITE
# Line 347  namespace GBPVRProgramDatabaseFixer Line 347  namespace GBPVRProgramDatabaseFixer
347              return range;              return range;
348          }          }
349    
350          public List<IOldNewProgram> FixGBPVRProgramsDatabase(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)
351          {          {
352              source_invalid = new List<IPROGRAMME>();              source_invalid = new List<IPROGRAMME>();
353              List<IOldNewProgram> source_valid = new List<IOldNewProgram>();              List<IPROGRAMME> source_valid = new List<IPROGRAMME>();
354              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();              gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();
355              xmltv_programs = xmltv_programs.OrderBy(s => DateTime.Parse(s.Start)).ToList();              xmltv_programs = xmltv_programs.OrderBy(s => DateTime.Parse(s.Start)).ToList();
356              gbpvr_programs.TrimExcess();              gbpvr_programs.TrimExcess();
# Line 410  namespace GBPVRProgramDatabaseFixer Line 410  namespace GBPVRProgramDatabaseFixer
410                          {                          {
411                              throw new Exception(string.Format("Program oid '{0}' was not properly updated.", updated_program.oid));                              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));                          //source_valid.Add(new OldNewProgram(program, updated_program));
414                            source_valid.Add(updated_program);
415                      }                      }
416                      else                      else
417                      {                      {
418                          // data is the same                          // data is the same
419                          source_valid.Add(new OldNewProgram(program, program));                          //source_valid.Add(new OldNewProgram(program, program));
420                            source_valid.Add(program);
421                      }                      }
422                  }                  }
423                  index++;                  index++;
# Line 843  namespace GBPVRProgramDatabaseFixer Line 845  namespace GBPVRProgramDatabaseFixer
845              st.Stop();              st.Stop();
846              gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes);              gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes);
847          }          }
848          public void UpdateGBPVRPrograms(List<IOldNewProgram> programs)          public void UpdateGBPVRPrograms(List<IPROGRAMME> programs)
849          {          {
850              int STEP = 500;              int ChunkSize = 500;
851              List<List<IPROGRAMME>> array_list = new List<List<IPROGRAMME>>(); // holds a list of ~STEP programs per index              var ChunkList = programs.Chunk<IPROGRAMME>(ChunkSize);
             for (int i = 0; i < programs.Count;)  
             {  
                 List<IPROGRAMME> tmp = new List<IPROGRAMME>(STEP);  
                 for (int j = 0; j < STEP; j++)  
                 {  
                     try  
                     {  
                         tmp.Add(programs[i + j].NewProgram);  
                     }  
                     catch { }  
                 }  
                 tmp.TrimExcess();  
                 array_list.Add(tmp);  
                 i += STEP;  
             }  
             array_list.TrimExcess();  
852    
853              int total = programs.Count;              int total = programs.Count;
854              int index = 0;              int index = 0;
855              double progress = 0;              double progress = 0;
856              Stopwatch st = new Stopwatch();              Stopwatch st = new Stopwatch();
857              st.Start();              st.Start();
858              foreach (var p in array_list)              foreach (var p in ChunkList)
859              {              {
860                  progress = 100.0 * (index / total);                                progress = 100.0 * (index / total);
861                  //gLog.Info.WriteLine("Inserting {0} gbpvr programs.", p.Count);                    //gLog.Info.WriteLine("Inserting {0} gbpvr programs.", p.Count);  
862                  if (!InsertProgramEntryDatabase(p))                  if (!InsertProgramEntryDatabase(p.ToList()))
863                  {                  {
864                      gLog.Error.WriteLine("Failed to insert one or more program(s)");                      gLog.Error.WriteLine("Failed to insert one or more program(s)");
865                  }                                }
866                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Inserting GBPVR Programs: {0:00}%", (int)progress)));                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Inserting GBPVR Programs: {0:00}%", (int)progress)));
867                  index += p.Count;                  index += p.Count();
868              }              }
869              st.Stop();              st.Stop();
870              gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes);              gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes);

Legend:
Removed from v.195  
changed lines
  Added in v.196

  ViewVC Help
Powered by ViewVC 1.1.22