/[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

--- trunk/GBPVRProgramDatabaseFixer/SQLLITE.cs	2013/03/16 16:06:20	175
+++ trunk/GBPVRProgramDatabaseFixer/SQLLITE.cs	2013/03/16 17:13:23	179
@@ -22,6 +22,11 @@
     }
     public class SQLLITE : ISQLLITE
     {
+        private struct OldNewProgram
+        {
+            public IPROGRAMME OldProgram;
+            public IPROGRAMME NewProgram;
+        }
         public static ISQLLITE Create(string database, EventHandler<EventArgs> OnInstanceCreated)
         {
             return new SQLLITE(database, OnInstanceCreated);
@@ -298,6 +303,8 @@
             source_invalid = new List<IPROGRAMME>();
             gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();            
             List<SQLLITE.IPROGRAMME> source_valid = new List<IPROGRAMME>();
+
+            List<OldNewProgram> source_update = new List<OldNewProgram>();
             //if (range == null)
             //{
             //    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");
@@ -325,15 +332,15 @@
                 IProgramDefinition xmltv_entry = null;
                 if (query.Count()-1 > 0)
                 {
-                    gLog.Error.WriteLine("Found more than one entry: Matching channel='{0}' and start='{1}'", channel.channel_number, start_date.ToDateTimeString());
-                    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("Found more than one entry: Matching channel='{0}' and start='{1}'", channel.channel_number, start_date.ToDateTimeString());
+                    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);
                     if (Debugger.IsAttached)
                     {                      
                         gLog.Error.WriteLine("    Found: {0} matching entries", query.Count());
                         int k_index = 0;
                         foreach (var k in query)
                         {
-                            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);
                             k_index++;
                         }
                         Debugger.Break();
@@ -346,85 +353,123 @@
 
                 if (xmltv_entry == null)
                 {
-                    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());
-                    source_invalid.Add(program);
-                    // remove database entry
-                    if (!RemoveProgramDatabaseEntry(program))
-                    {
-                        gLog.Error.WriteLine("Failed to remove entry with oid: '{0}'", program.oid);
-                    }
+                    //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());
+                    source_invalid.Add(program);                   
                 }
                 else
                 {
-                    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());
                     var updated_program = program;
                     bool needsupdate = false;
                     if (xmltv_entry.Title != program.name)
                     {
-                        gLog.Warn.WriteLine("    Updating:");
-                        gLog.Warn.WriteLine("        Old Title: {0}", program.name);
-                        gLog.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);
+                        //gLog.Verbose.Warn.WriteLine("    Updating:");
+                        //gLog.Verbose.Warn.WriteLine("        Old Title: {0}", program.name);
+                        //gLog.Verbose.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);
                         updated_program.name = xmltv_entry.Title;
                         needsupdate = true;
                     }
                     if (xmltv_entry.SubTitle != program.sub_title)
                     {
-                        gLog.Warn.WriteLine("    Updating:");
-                        gLog.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);
-                        gLog.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);
+                        //gLog.Verbose.Warn.WriteLine("    Updating:");
+                        //gLog.Verbose.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);
+                        //gLog.Verbose.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);
                         updated_program.sub_title = xmltv_entry.SubTitle;
                         needsupdate = true;
                     }
                     if (xmltv_entry.Description != program.description)
                     {
-                        gLog.Warn.WriteLine("    Updating:");
-                        gLog.Warn.WriteLine("        Old Descption: {0}", program.description);
-                        gLog.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);
+                        //gLog.Verbose.Warn.WriteLine("    Updating:");
+                        //gLog.Verbose.Warn.WriteLine("        Old Descption: {0}", program.description);
+                        //gLog.Verbose.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);
                         updated_program.description = xmltv_entry.Description;
                         needsupdate = true;
                     }
                     if (DateTime.Parse(xmltv_entry.Start) != program.start_time)
                     {
-                        gLog.Warn.WriteLine("    Updating:");
-                        gLog.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());
-                        gLog.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());
+                        //gLog.Verbose.Warn.WriteLine("    Updating:");
+                        //gLog.Verbose.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());
+                        //gLog.Verbose.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());
                         updated_program.start_time = DateTime.Parse(xmltv_entry.Start);
                         needsupdate = true;
                     }
                     if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)
                     {
-                        gLog.Warn.WriteLine("    Updating:");
-                        gLog.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());
-                        gLog.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());
+                        //gLog.Verbose.Warn.WriteLine("    Updating:");
+                        //gLog.Verbose.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());
+                        //gLog.Verbose.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());
                         updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);
                         needsupdate = true;
                     }
-                    source_valid.Add(updated_program);
+                    
                     if (needsupdate)
                     {
-                        // update database entry
-                        if (!UpdateProgramDatabaseEntry(program, updated_program))
-                        {
-                            gLog.Error.WriteLine("Failed to update entry with oid: '{0}'", program.oid);
-                        }
+                        OldNewProgram p = new OldNewProgram();
+                        p.OldProgram = program;
+                        p.NewProgram = updated_program;
+                        source_update.Add(p);
                     }
+                    source_valid.Add(updated_program);
                 }
                 index++;
             }
 
-            //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);
-            //    }
-            //}
 
             source_valid = source_valid.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();
 
+            if (source_invalid.Count > 0)
+            {
+                double source_invalid_count = source_valid.Count;
+                double source_invalid_index = 0;
+                double source_invalid_progress = 0;
+                foreach (var old_program in source_invalid)
+                {
+                    source_invalid_progress = 100.0 * (source_invalid_index / source_invalid_count);
+                    gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_invalid_progress, string.Format("Removing old GBPVR Programs: {0:00}%", (int)source_invalid_progress)));    
+                    // remove database entry
+                    if (!RemoveProgramDatabaseEntry(old_program))
+                    {
+                        gLog.Error.WriteLine("Failed to remove program with oid: '{0}'", old_program.oid);
+                    }
+                    else
+                    {
+                        gLog.Verbose.Info.WriteLine("Removed program with oid: '{0}'", old_program.oid);
+                    }
+                    source_invalid_index++;
+                }
+            }
+            else
+            {
+                gLog.Info.WriteLine("No old GB-PVR Programs needed to be removed.");
+            }
+
+            if (source_update.Count > 0)
+            {
+                double source_update_count = source_valid.Count;
+                double source_update_index = 0;
+                double source_update_progress = 0;
+                foreach (var p in source_update)
+                {
+                    source_update_progress = 100.0 * (source_update_index / source_update_count);
+                    gLog.ReportProgress(this, new ReportProgressEventArgs((int)source_update_progress, string.Format("Updating GBPVR Programs: {0:00}%", (int)source_update_progress)));    
+                    // remove database entry
+                    if (!UpdateProgramDatabaseEntry(p.OldProgram,p.NewProgram))
+                    {
+                        gLog.Error.WriteLine("Failed to update program with oid: '{0}'", p.OldProgram.oid);
+                    }
+                    else
+                    {
+                        gLog.Verbose.Info.WriteLine("Upated program with oid: '{0}'", p.OldProgram.oid);
+                    }
+                    source_update_index++;
+                }
+            }
+            else
+            {
+                gLog.Info.WriteLine("No GB-PVR Programs needed to be updated.");
+            }
+
             gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);
             gLog.Info.WriteLine("Updated: 0x{0:x8} GB-PVR Programs", source_valid.Count);
             gLog.Info.WriteLine("Removed: 0x{0:x8} GB-PVR Programs", source_invalid.Count);
@@ -641,7 +686,7 @@
                 {
                     try
                     {
-                        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);
                         con.Open();
                         string command_text = string.Format(@"DELETE FROM [{0}] WHERE [oid] = @oid;", TABLES.PROGRAMME);
                         gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
@@ -649,7 +694,7 @@
                         {
                             cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
                             int rowsupdated = cmd.ExecuteNonQuery();
-                            gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated);
+                            gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
                         }
                         con.Clone();
                         result = true;
@@ -677,7 +722,7 @@
                 {
                     try
                     {
-                        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);
                         con.Open();
                         //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
                         string command_text = string.Empty;
@@ -709,7 +754,7 @@
                             cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));
                             cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));
                             int rowsupdated = cmd.ExecuteNonQuery();
-                            gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated);
+                            gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
                         }
                         con.Clone();
                         result = true;

 

  ViewVC Help
Powered by ViewVC 1.1.22