/[xmltv_parser]/trunk/GBPVRProgramDatabaseFixer/Program.cs
ViewVC logotype

Diff of /trunk/GBPVRProgramDatabaseFixer/Program.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 174 by william, Sat Mar 16 16:03:19 2013 UTC revision 241 by william, Sun Mar 17 10:40:09 2013 UTC
# Line 10  using System.IO; Line 10  using System.IO;
10  using libxmltv.Core;  using libxmltv.Core;
11  using libxmltv.Interfaces;  using libxmltv.Interfaces;
12  using libxmltv;  using libxmltv;
13    using GBPVR.Public;
14    using GBPVR.Backend.Common;
15  namespace GBPVRProgramDatabaseFixer  namespace GBPVRProgramDatabaseFixer
16  {  {
17      class Program      class Program
18      {      {
19            const long MAX_LOG_FILESIZE_IN_BYTES = 250000; //250kb max
20            static void TruncateLogFile(FileInfo log_file)
21            {
22                if (!log_file.Exists)
23                {
24                    gLog.CreateLog(log_file.FullName, false, LogLevel.kLogLevel_All);
25                }
26                else
27                {
28                    if (log_file.Length > MAX_LOG_FILESIZE_IN_BYTES)
29                    {
30                        string match = string.Format("{0}.*", log_file.Name);
31                        var files = Directory.GetFiles(log_file.Directory.FullName, match).ToList();
32                        files.RemoveAt(0);
33                        files.TrimExcess();
34                        int count = files.Count;
35                        if (log_file.Exists)
36                        {
37                            File.Copy(log_file.FullName, string.Format("{0}.{1}", log_file.FullName, count));
38                        }
39                        gLog.CreateLog(log_file.FullName, true, LogLevel.kLogLevel_All);
40                    }
41                    else
42                    {
43                        gLog.CreateLog(log_file.FullName, false, LogLevel.kLogLevel_All);
44                    }
45                }
46            }
47    
48          static ISQLLITE sqlite;          static ISQLLITE sqlite;
49          static string XMLTV_FILE = "";          static string XMLTV_FILE = "";
50          static string GBPVR_DATABASE = "";          static string GBPVR_DATABASE = "";
# Line 27  namespace GBPVRProgramDatabaseFixer Line 58  namespace GBPVRProgramDatabaseFixer
58          static bool SQLLIST_INSTANCE_CREATED = false;          static bool SQLLIST_INSTANCE_CREATED = false;
59          //static int LAST_REPORTED_SQLLITE_PROGRESS = 0;          //static int LAST_REPORTED_SQLLITE_PROGRESS = 0;
60    
61          static int LAST_REPORTED_PROGRESS = 0;          //static int LAST_REPORTED_PROGRESS = 0;
62    
63          static FileInfo fi_XMLTVFILE;          static FileInfo fi_XMLTVFILE;
64          static FileInfo fi_GBPVRDATABASE;          static FileInfo fi_GBPVRDATABASE;
# Line 35  namespace GBPVRProgramDatabaseFixer Line 66  namespace GBPVRProgramDatabaseFixer
66          {          {
67              string log_path = Application.StartupPath;              string log_path = Application.StartupPath;
68              string log_filename = string.Format("{0}.log", typeof(Program).Assembly.GetName().Name);              string log_filename = string.Format("{0}.log", typeof(Program).Assembly.GetName().Name);
69              gLog.CreateLog(string.Format(@"{0}\{1}", log_path, log_filename), false, LogLevel.kLogLevel_All);              FileInfo log_file = new FileInfo(string.Format(@"{0}\{1}", log_path, log_filename));
70                TruncateLogFile(log_file);
71  #if DEBUG  #if DEBUG
72              LogLevel gLevel = gLog.LogLevel;              LogLevel gLevel = gLog.LogLevel;
73              gLevel |= LogLevel.kLogLevel_VerboseDebug;              gLevel |= LogLevel.kLogLevel_VerboseDebug;
# Line 99  namespace GBPVRProgramDatabaseFixer Line 131  namespace GBPVRProgramDatabaseFixer
131              Console.SetCursorPosition(0, Console.CursorTop - 1);              Console.SetCursorPosition(0, Console.CursorTop - 1);
132          }          }
133    
134          static void gLog_ReportProgress(object sender, ReportProgressEventArgs e)          static void gLog_ReportProgress(object sender, ReportProgressEventArgs e)
135          {          {
136              //if (!XMLTV_INSTANCE_CREATED && LOADING_XMLTV_FILE)              object k = e.UserState; // we will assum that is a status message
137              //{              if (k == null) // assume we do not have a user status message (ie: is only a progress message)
             //    if (LAST_REPORTED_XMLTV_PROGRESS != e.Progress)  
             //    {  
             //        ConsoleOverwritePreviosLine("XMLTV: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);  
             //        LAST_REPORTED_XMLTV_PROGRESS = e.Progress;  
             //        if (e.Progress == 100)  
             //        {  
             //            Console.WriteLine("XMLTV: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);  
             //        }  
             //    }  
             //}  
             //if (!SQLLIST_INSTANCE_CREATED && LOADING_GBPVR_DATABASE)  
             //{  
             //    if (LAST_REPORTED_SQLLITE_PROGRESS != e.Progress)  
             //    {  
             //        ConsoleOverwritePreviosLine("SQLLITE: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);  
             //        LAST_REPORTED_SQLLITE_PROGRESS = e.Progress;  
             //        if (e.Progress == 100)  
             //        {  
             //            Console.WriteLine("SQLLITE: {0} Loading: {1:00}%", fi_XMLTVFILE.Name, e.Progress);  
             //        }  
             //    }  
             //}  
   
             object k = e.UserState;  
             if (k == null)  
138              {              {
139                  if (sender == null)                  if (sender == null) { ConsoleOverwritePreviosLine("Progress: {0} ", e.Progress); }
140                  {                  else { ConsoleOverwritePreviosLine("{0}: Progress: {1:00}%", sender.GetType().Name, e.Progress); }
                     if (LAST_REPORTED_PROGRESS != e.Progress)  
                     {  
                         ConsoleOverwritePreviosLine("Progress: {0} ", e.Progress);  
                         LAST_REPORTED_PROGRESS = e.Progress;  
                         if (e.Progress == 100)  
                         {  
                             Console.WriteLine("Progress: {0} ", e.Progress);  
                         }  
                     }  
                 }  
                 else  
                 {  
                     if (LAST_REPORTED_PROGRESS != e.Progress)  
                     {  
                         ConsoleOverwritePreviosLine("{0}: Progress: {1:00}%", sender.GetType().Name, e.Progress);  
                         LAST_REPORTED_PROGRESS = e.Progress;  
                         if (e.Progress == 100)  
                         {  
                             Console.WriteLine("{0}: Progress: {1:00}%", sender.GetType().Name, e.Progress);  
                         }  
                     }  
                 }  
141              }              }
142              else              else // assume we have a user status message
143              {              {
144                  if (sender == null)                  if (sender == null) { ConsoleOverwritePreviosLine("{0} ", k.ToString()); }
145                  {                  else { ConsoleOverwritePreviosLine("{0}: {1}", sender.GetType().Name, k.ToString()); }
                     if (LAST_REPORTED_PROGRESS != e.Progress)  
                     {  
                         ConsoleOverwritePreviosLine("Progress: {0} ", k.ToString());  
                         LAST_REPORTED_PROGRESS = e.Progress;  
                         if (e.Progress == 100)  
                         {  
                             Console.WriteLine("Progress: {0} ", k.ToString());  
                         }  
                     }  
                 }  
                 else  
                 {  
                     if (LAST_REPORTED_PROGRESS != e.Progress)  
                     {  
                         ConsoleOverwritePreviosLine("{0}: {1}", sender.GetType().Name, k.ToString());  
                         LAST_REPORTED_PROGRESS = e.Progress;  
                         if (e.Progress == 100)  
                         {  
                             Console.WriteLine("{0}: {1}", sender.GetType().Name, k.ToString());  
                         }  
                     }  
                 }  
146              }              }
147          }          }
148          static void LoadXMLTVFile()          static void LoadXMLTVFile()
# Line 227  namespace GBPVRProgramDatabaseFixer Line 190  namespace GBPVRProgramDatabaseFixer
190          }          }
191          static void SQLLITE_OnInstanceCreated(object sender, EventArgs e) { SQLLIST_INSTANCE_CREATED = true; }          static void SQLLITE_OnInstanceCreated(object sender, EventArgs e) { SQLLIST_INSTANCE_CREATED = true; }
192    
   
         //static List<SQLLITE.IPROGRAMME> gbpvr_invalid_programs;  
         //static List<SQLLITE.IPROGRAMME> gbpvr_valid_programs;  
         //static List<SQLLITE.ICHANNEL> gbpvr_channels;  
         //static List<SQLLITE.IRECORDING_SCHEDULE> gbpvr_recordings;  
         //static List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs;  
193          static void PerformDatabaseProcessing()          static void PerformDatabaseProcessing()
194          {          {
195              var sqllite_channels = sqlite.Channels;              var sqllite_channels = sqlite.Channels;
# Line 244  namespace GBPVRProgramDatabaseFixer Line 201  namespace GBPVRProgramDatabaseFixer
201              var sqllite_programs_startdate_range = sqlite.GetProgramsDateRange(sqllite_programs);              var sqllite_programs_startdate_range = sqlite.GetProgramsDateRange(sqllite_programs);
202              var xmltv_programs_startdate_range = GetXMLTVProgramStartDateRange(xmltv_programs);              var xmltv_programs_startdate_range = GetXMLTVProgramStartDateRange(xmltv_programs);
203              var gbpvr_invalid_programs = new List<SQLLITE.IPROGRAMME>();              var gbpvr_invalid_programs = new List<SQLLITE.IPROGRAMME>();
204              var gbpvr_valid_programs = sqlite.FixGBPVRProgramsDatabase(sqllite_programs, xmltv_programs, out gbpvr_invalid_programs);              var gbpvr_valid_programs = sqlite.FixGBPVRProgramsDatabase(sqllite_programs, xmltv_programs, out gbpvr_invalid_programs);    
205              //xmltv_programs = xmltv_programs.OrderBy(s => s.ChannelNumber).ThenBy(s => DateTime.Parse(s.Start)).ToList();              sqlite.RemoveOldGBPVRPrograms(gbpvr_invalid_programs);
206              //sqllite_channels.TrimExcess();              sqlite.UpdateGBPVRPrograms(gbpvr_valid_programs);
207              //gbpvr_invalid_programs.TrimExcess();  
208              //gbpvr_valid_programs.TrimExcess();              sqllite_programs.Clear();
209              //sqllite_programs.TrimExcess();              gbpvr_valid_programs.ForEach(s=>sqllite_programs.Add(s.NewProgram));
210              //xmltv_programs.TrimExcess();  
211              //CheckScheduledRecordingsForDiscrepancies(sqllite_recordings);              CheckScheduledRecordingsForDiscrepancies(sqllite_recordings,sqllite_programs);
             //CheckProgramsForDiscrepancies(gbpvr_valid_programs, xmltv_programs);  
212          }          }
213    
214          static IDateTimeRange GetXMLTVProgramStartDateRange(List<libxmltv.Interfaces.IProgramDefinition> programs)          static IDateTimeRange GetXMLTVProgramStartDateRange(List<libxmltv.Interfaces.IProgramDefinition> programs)
# Line 269  namespace GBPVRProgramDatabaseFixer Line 225  namespace GBPVRProgramDatabaseFixer
225              return range;              return range;
226          }          }
227    
228          static void CheckScheduledRecordingsForDiscrepancies(List<SQLLITE.IRECORDING_SCHEDULE> gbpvr)          static void CheckScheduledRecordingsForDiscrepancies(List<SQLLITE.IRECORDING_SCHEDULE> recordings, List<SQLLITE.IPROGRAMME> programs)
229          {          {
230              ////gLog.Warn.WriteLine("CheckScheduledRecordingsForDiscrepancies() has not been implemented");              List<SQLLITE.IRECORDING_SCHEDULE> recordings_to_delete = new List<SQLLITE.IRECORDING_SCHEDULE>();
231              //var manual_gbpvr_recordings = gbpvr.FindAll(p => p.recording_type == 0).ToList();              //List<SQLLITE.IRECORDING_SCHEDULE> deleted_recordings = new List<SQLLITE.IRECORDING_SCHEDULE>();
232                //List<SQLLITE.IRECORDING_SCHEDULE> reocurring_recordings = new List<SQLLITE.IRECORDING_SCHEDULE>();
233    
234    
235              //foreach (var manual_recording in manual_gbpvr_recordings)              //reocurring_recordings = recordings.FindAll(s => s.recording_type != (long)RecordingType.TYPE_RECORD_ONCE).ToList();
236              //{  
237              //    string title = manual_recording.filename;              foreach (var recording in recordings)
238              //    DateTime start = manual_recording.manual_start_time;              {
239              //    DateTime end = manual_recording.manual_end_time;                  RecordingStatus status = (RecordingStatus)recording.status;
240              //    long channel_oid = manual_recording.manual_channel_oid;                  RecordingType type = (RecordingType)recording.recording_type;
241              //    var found_channel = gbpvr_channels.Find(p => p.oid == channel_oid);                  if (type == RecordingType.TYPE_RECORD_SEASON)
242              //    var channel_number = found_channel.channel_number;                  {
243              //    var found_program = xmltv_programs.ToList().Find(p =>                      continue; // ignore TYPE_RECORD_SEASON
244              //        p.Title.ToLower() == title.ToLower() &&                  }
245              //        p.Start == start.ToDateTimeString() &&                  if (status != RecordingStatus.STATUS_PENDING)
246              //        p.Stop == end.ToDateTimeString() &&                  {
247              //        p.ChannelNumber == channel_number                      continue; // ignore any status except STATUS_PENDING
248              //        );                  }
249              //    if (found_program != null)                  if (recording.recording_group == 0 && recording.programme_oid == 0)
250              //    {                  {
251              //        gLog.Info.WriteLine("Recording might be valid: oid='{0}' programme_oid='{1}' title='{2}' start='{3}', end='{4}'", manual_recording.oid, manual_recording.programme_oid, title, start.ToDateTimeString(), end.ToDateTimeString());                      continue; // ignore manual recordings
252              //    }                  }
253              //    else                  // verify data for this recording
254              //    {                  var recording_oid = recording.oid;
255              //        gLog.Warn.WriteLine("Recording may not be valid: oid='{0}' programme_oid='{1}' title='{2}' start='{3}', end='{4}'", manual_recording.oid, manual_recording.programme_oid, title, start.ToDateTimeString(), end.ToDateTimeString());                  var programme_oid = recording.programme_oid;
256              //        // find the program on the channel at the start time                  var filename = recording.filename;
257              //        var correct_program = xmltv_programs.ToList().Find(p =>                  var manual_start_time = recording.manual_start_time;
258              //            p.ChannelNumber == channel_number &&                  var manual_end_time = recording.manual_end_time;
259              //            p.Start == start.ToDateTimeString()                  var manual_channel_oid = recording.manual_channel_oid;
260              //            );  
261              //        if (correct_program != null)                  // lookup program by oid
262              //        {                  var entry = programs.Find(s => s.oid == programme_oid);
263              //            gLog.Warn.WriteLine("\tThis will be recorded: {0}", correct_program.ToString());                  if (entry == null)
264              //        }                  {
265              //    }                      gLog.Warn.WriteLine("Unable to find program with oid: '{0}' for recording with oid: '{1}' -- assuming it should be deleted", programme_oid, recording_oid);
266              //}                      //throw new NullReferenceException(string.Format("Unable to find program with oid: '{0}' for recording with oid: '{1}'", programme_oid, recording_oid));
267          }                      //deleted_recordings.Add(recording);
268                    }
269          static void CheckProgramsForDiscrepancies(List<SQLLITE.IPROGRAMME> list_gbpvr, List<libxmltv.Interfaces.IProgramDefinition> list_xmltv)                  else
270          {                  {
271              ////gLog.Warn.WriteLine("CheckProgramsForDiscrepancies() has not been implemented");                      recordings_to_delete.Add(recording);        
272              //var gbpvr = list_gbpvr.ToArray();                  }
273              //var xmltv = list_xmltv.ToArray();              }
274              ////if (gbpvr.Count() != xmltv.Count())              recordings_to_delete.TrimExcess();
275              ////{              if (recordings_to_delete.Count > 0)
276              ////    throw new ArgumentOutOfRangeException("gbpvr.Count/xmltv.Count", string.Format("gbpvr.Count: '0x{0:x8}' != xmltv.Count: '0x{1:x8}'", gbpvr.Count(),xmltv.Count()));              {
277              ////}                  gLog.Info.WriteLine("Found {0} recordings to delete.", recordings_to_delete.Count);
278              ////for (int i = 0; i < gbpvr.Count(); i++)                  sqlite.DeleteGBPVRScheduledRecordings(recordings_to_delete);
279              ////{              }
280              ////    var gbpvr_entry = gbpvr[i];  
281              ////    var xmltv_entry = gbpvr_entry.AsXMLTVProgramDefinition(sqlite);              try
282              ////    if (!xmltv[i].Equals(xmltv_entry))              {
283              ////    {  
284              ////        gLog.Warn.WriteLine("Warning GBPVR Program oid: {0} might be invalid", gbpvr_entry.oid);                  // taken from: Config.EpgUpdateProgress.method_1()
285              ////    }                  Zap2itEpgReader.smethod_0();
286              ////}                  GClass4.smethod_0().method_14();
287    
288                }
289                catch (Exception ex)
290                {
291                    gLog.Error.WriteLine(ex.ToString());
292                }
293          }          }
294      }      }
295  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.22