/[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 185 by william, Sat Mar 16 18:55:49 2013 UTC revision 194 by william, Sat Mar 16 21:37:29 2013 UTC
# Line 420  namespace GBPVRProgramDatabaseFixer Line 420  namespace GBPVRProgramDatabaseFixer
420                  }                  }
421                  index++;                  index++;
422              }              }
423                gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);
424                gLog.Info.WriteLine("Total Valid GB-PVR Programs: 0x{0:x8}", source_valid.Count);
425                gLog.Info.WriteLine("Total Invalid GB-PVR Programs: 0x{0:x8}", source_invalid.Count);
426                gLog.Info.WriteLine("Total GB-PVR Programs (Valid+Invalid): 0x{0:x8} == 0x{1:x8}", source_valid.Count + source_invalid.Count, gbpvr_programs.Count);
427              #region old-code              #region old-code
428              //List<OldNewProgram> source_update = new List<OldNewProgram>();              //List<OldNewProgram> source_update = new List<OldNewProgram>();
429              ////if (range == null)              ////if (range == null)
# Line 816  namespace GBPVRProgramDatabaseFixer Line 819  namespace GBPVRProgramDatabaseFixer
819          }          }
820    
821          public void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs)          public void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs)
822          {          {            
823              gLog.Info.WriteLine("Removing {0} old gbpvr programs.", programs.Count);              gLog.Info.WriteLine("Removing all gbpvr programs.");
824              double total = programs.Count;              //double total = programs.Count;
825              double index = 0;              //double index = 0;
826              double progress = 0;              //double progress = 0;
827              foreach (var program in programs)              //foreach (var program in programs)
828                //{
829                //    progress = 100.0 * (index / total);
830                //    gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing GBPVR Programs: {0:00}%", (int)progress)));
831                //    if (!RemoveProgramDatabaseEntry(program))
832                //    {
833                //        gLog.Error.WriteLine("Failed to remove program with oid: {0}", program.oid);
834                //    }
835                //    index++;
836                //}
837                Stopwatch st = new Stopwatch();
838                st.Start();
839                if (!RemoveAllProgramDatabaseEntries())
840              {              {
841                  progress = 100.0 * (index / total);                  gLog.Error.WriteLine("Failed to remove one or more program(s)");
                 gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing GBPVR Programs: {0:00}%", (int)progress)));  
                 if (!RemoveProgramDatabaseEntry(program))  
                 {  
                     gLog.Error.WriteLine("Failed to remove program with oid: {0}", program.oid);  
                 }  
                 index++;  
842              }              }
843                st.Stop();
844                gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes);
845          }          }
846          public void UpdateGBPVRPrograms(List<IOldNewProgram> programs)          public void UpdateGBPVRPrograms(List<IOldNewProgram> programs)
847          {          {
848              gLog.Info.WriteLine("Updating {0} gbpvr programs.", programs.Count);              int STEP = 500;
849              double total = programs.Count;              List<List<IPROGRAMME>> array_list = new List<List<IPROGRAMME>>(); // holds a list of ~STEP programs per index
850              double index = 0;              for (int i = 0; i < programs.Count;)
851                {
852                    List<IPROGRAMME> tmp = new List<IPROGRAMME>(STEP);
853                    for (int j = 0; j < STEP; j++)
854                    {
855                        try
856                        {
857                            tmp.Add(programs[i + j].NewProgram);
858                        }
859                        catch { }
860                    }
861                    tmp.TrimExcess();
862                    array_list.Add(tmp);
863                    i += STEP;
864                }
865                array_list.TrimExcess();
866    
867                int total = programs.Count;
868                int index = 0;
869              double progress = 0;              double progress = 0;
870              foreach (var program in programs)              foreach (var p in array_list)
871              {              {
872                  progress = 100.0 * (index / total);                  progress = 100.0 * (index / total);
873                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Updating GBPVR Programs: {0:00}%", (int)progress)));                
874                  if (program.NewProgram.Equals(program.OldProgram))                  gLog.Info.WriteLine("Inserting {0} gbpvr programs.", p.Count);                
875                    Stopwatch st = new Stopwatch();
876                    st.Start();
877                    if (!InsertProgramEntryDatabase(p))
878                  {                  {
879                      // program does not need to be updated                      gLog.Error.WriteLine("Failed to insert one or more program(s)");
                     continue;  
880                  }                  }
881                  else                  st.Stop();
882                    gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes);
883                    gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Inserting GBPVR Programs: {0:00}%", (int)progress)));
884                    index += p.Count;
885                }          
886    
887            }
888    
889            private bool RemoveAllProgramDatabaseEntries()
890            {
891                bool result = false;
892                try
893                {
894                    using (SQLiteConnection con = CreateConnection())
895                  {                  {
896                      if (!UpdateProgramDatabaseEntry(program.NewProgram))                      try
897                      {                      {
898                          gLog.Error.WriteLine("Failed to update program with oid: {0}", program.NewProgram.oid);                          //gLog.Verbose.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);
899                            con.Open();
900                            string command_text = string.Format(@"DELETE FROM [{0}];", TABLES.PROGRAMME);
901                            //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
902                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
903                            {
904                                //cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
905                                int rowsupdated = cmd.ExecuteNonQuery();
906                                //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
907                            }
908                            result = true;
909                        }
910                        catch (SQLiteException ex)
911                        {
912                            gLog.Error.WriteLine(ex.ToString());
913                            result = false;
914                        }
915                        finally
916                        {
917                            con.Close();
918                      }                      }
919                  }                  }
                 index++;  
920              }              }
921                catch (Exception ex)
922                {
923                    gLog.Error.WriteLine(ex.ToString());
924                    result = false;
925                }
926                return result;
927          }          }
   
928          private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program)          private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program)
929          {          {
930              bool result = false;              bool result = false;
# Line 897  namespace GBPVRProgramDatabaseFixer Line 964  namespace GBPVRProgramDatabaseFixer
964              }              }
965              return result;              return result;
966          }          }
967          private bool UpdateProgramDatabaseEntry(IPROGRAMME new_program)          private bool InsertProgramEntryDatabase(List<IPROGRAMME> list)
968          {          {
969              bool result = false;              bool result = false;
970              try              try
# Line 910  namespace GBPVRProgramDatabaseFixer Line 977  namespace GBPVRProgramDatabaseFixer
977                          con.Open();                          con.Open();
978                          //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);
979                          string command_text = string.Empty;                          string command_text = string.Empty;
980                          StringBuilder builder = new StringBuilder();                          command_text = BuildGBPVRMultiInsertCommand(list);
                         builder.AppendLine(string.Format("UPDATE [{0}]", TABLES.PROGRAMME));  
                         builder.Append("SET ");  
                         builder.AppendFormat("[name]=@name,");  
                         builder.AppendFormat("[sub_title]=@sub_title,");  
                         builder.AppendFormat("[description]=@description,");  
                         builder.AppendFormat("[start_time]=@start_time,");  
                         builder.AppendFormat("[end_time]=@end_time,");  
                         builder.AppendFormat("[channel_oid]=@channel_oid,");  
                         builder.AppendFormat("[unique_identifier]=@unique_identifier,");  
                         builder.AppendFormat("[rating]=@rating");  
                         builder.AppendLine(" WHERE [oid] = @oid");  
                         command_text = builder.ToString();  
981                          //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);                          //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
982                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
983                          {                          {                          
                             cmd.Parameters.Add(new SQLiteParameter("oid", new_program.oid));  
                             cmd.Parameters.Add(new SQLiteParameter("name", new_program.name));  
                             cmd.Parameters.Add(new SQLiteParameter("sub_title", new_program.sub_title));  
                             cmd.Parameters.Add(new SQLiteParameter("description", new_program.description));  
                             cmd.Parameters.Add(new SQLiteParameter("start_time", new_program.start_time));  
                             cmd.Parameters.Add(new SQLiteParameter("end_time", new_program.end_time));  
                             cmd.Parameters.Add(new SQLiteParameter("channel_oid", new_program.channel_oid));  
                             cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));  
                             cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));  
984                              int rowsupdated = cmd.ExecuteNonQuery();                              int rowsupdated = cmd.ExecuteNonQuery();
985                              //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);                              //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
986                          }                          }
# Line 959  namespace GBPVRProgramDatabaseFixer Line 1005  namespace GBPVRProgramDatabaseFixer
1005              }              }
1006              return result;              return result;
1007          }          }
1008    
1009            private string BuildGBPVRMultiInsertCommand(List<IPROGRAMME> list)
1010            {
1011                StringBuilder builder = new StringBuilder();
1012                /*
1013                    insert into table1 (field1,field2) values (value1,value2);
1014                    insert into table1 (field1,field2) values (value1,value2);
1015                    insert into table1 (field1,field2) values (value1,value2);
1016                    insert into table1 (field1,field2) values (value1,value2)
1017                 */
1018                builder.AppendLine("begin transaction;");
1019                foreach (var t in list)
1020                {
1021                    builder.AppendLine(BuildGBPVRSingleInsertCommand(t));
1022                }
1023                builder.AppendLine("end transaction;");
1024                return builder.ToString();
1025            }
1026    
1027            private string BuildGBPVRSingleInsertCommand(IPROGRAMME program)
1028            {
1029                StringBuilder builder = new StringBuilder();
1030                builder.AppendFormat("insert into {0} (oid,name,sub_title,description,start_time,end_time,channel_oid,unique_identifier,rating) values (", TABLES.PROGRAMME);
1031                builder.AppendFormat("{0},",program.oid);
1032                builder.AppendFormat("\"{0}\",", program.name);
1033                builder.AppendFormat("\"{0}\",", program.sub_title);
1034                builder.AppendFormat("\"{0}\",", program.description);
1035                builder.AppendFormat("'{0}',", program.start_time);
1036                builder.AppendFormat("'{0}',", program.end_time);
1037                builder.AppendFormat("{0},", program.channel_oid);
1038                builder.AppendFormat("\"{0}\",", program.unique_identifier);
1039                builder.AppendFormat("\"{0}\");", program.rating);
1040                return builder.ToString();
1041            }
1042          
1043      }      }
1044  }  }

Legend:
Removed from v.185  
changed lines
  Added in v.194

  ViewVC Help
Powered by ViewVC 1.1.22