/[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 157 by william, Thu Mar 14 19:36:01 2013 UTC revision 164 by william, Fri Mar 15 16:57:50 2013 UTC
# Line 6  using System.Text; Line 6  using System.Text;
6  using System.Data.SQLite;  using System.Data.SQLite;
7  using System.Diagnostics;  using System.Diagnostics;
8  using Enterprise.Logging;  using Enterprise.Logging;
9    using libxmltv;
10  namespace GBPVRProgramDatabaseFixer  namespace GBPVRProgramDatabaseFixer
11  {  {
12      internal class SQLLITE      public interface ISQLLITE
13      {      {
14            List<SQLLITE.IPROGRAMME> Programs { get; }
15            List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; }
16            List<SQLLITE.ICHANNEL> Channels { get; }
17            IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs);
18            List<SQLLITE.IPROGRAMME> FilterProgramsByDateRange(List<SQLLITE.IPROGRAMME> programs, IDateTimeRange range, out List<SQLLITE.IPROGRAMME> removed_programs);
19    
20        }
21        public class SQLLITE : ISQLLITE
22        {
23            public static ISQLLITE Create(string database, EventHandler<EventArgs> OnInstanceCreated)
24            {
25                return new SQLLITE(database, OnInstanceCreated);
26            }
27    
28          #region DATABASE DEFINITIONS          #region DATABASE DEFINITIONS
29    
30            public interface ICHANNEL
31            {
32                Int64 oid { get; }
33                String name { get; }
34                String channelID { get; }
35                Int64 channel_number { get; }
36                String favourite_channel { get; }
37                String display_name { get; }
38            }
39            private class CHANNEL : ICHANNEL
40            {
41                public CHANNEL()
42                {
43                    BaseDatabaseDefinition<CHANNEL>.CreateDefault(this);
44                }
45                //public RECORDING_SCHEDULE(SQLiteDataReader r, int index) { BaseDatabaseDefinition<RECORDING_SCHEDULE>.Create(this, r, index); }
46    
47                public static void Create(ref CHANNEL instance, SQLiteDataReader r, int index)
48                {
49                    BaseDatabaseDefinition<CHANNEL>.Create(ref instance, r, index);
50                }
51                #region ICHANNEL members
52                public Int64 oid { get; set; }
53                public String name { get; set; }
54                public String channelID { get; set; }
55                public Int64 channel_number { get; set; }
56                public String favourite_channel { get; set; }
57                public String display_name { get; set; }
58                #endregion
59            }
60          public interface IRECORDING_SCHEDULE          public interface IRECORDING_SCHEDULE
61          {          {
62              Int64 oid { get; }              Int64 oid { get; }
# Line 182  namespace GBPVRProgramDatabaseFixer Line 227  namespace GBPVRProgramDatabaseFixer
227          {          {
228              public const string RECORDING_SCHEDULE = "RECORDING_SCHEDULE";              public const string RECORDING_SCHEDULE = "RECORDING_SCHEDULE";
229              public const string PROGRAMME = "PROGRAMME";              public const string PROGRAMME = "PROGRAMME";
230                public const string CHANNEL = "CHANNEL";
231          }          }
232    
233          //public SQLLite() { }          //public SQLLite() { }
234          public SQLLITE(string database, EventHandler<EventArgs> OnInstanceCreated)          protected SQLLITE(string database, EventHandler<EventArgs> OnInstanceCreated)
235          {          {
236              this.OnInstanceCreated = OnInstanceCreated;              this.OnInstanceCreated = OnInstanceCreated;
237              //CreateConnection(database);              //CreateConnection(database);
# Line 196  namespace GBPVRProgramDatabaseFixer Line 242  namespace GBPVRProgramDatabaseFixer
242                  return;                  return;
243              }              }
244              ConnectionTest();              ConnectionTest();
245                ReadChannelData();
246              ReadRecodringScheduleData();              ReadRecodringScheduleData();
247              ReadProgrammeData();              ReadProgrammeData();
248              OnCreatedInstance(this, new EventArgs());              OnCreatedInstance(this, new EventArgs());
# Line 210  namespace GBPVRProgramDatabaseFixer Line 257  namespace GBPVRProgramDatabaseFixer
257              if (OnInstanceCreated != null) { OnInstanceCreated.Invoke(sender, e); }              if (OnInstanceCreated != null) { OnInstanceCreated.Invoke(sender, e); }
258          }          }
259    
         #region SQLLite  
260          private string Database;          private string Database;
261            #region ISQLLITE members        
262          public List<IPROGRAMME> Programs { get; private set; }          public List<IPROGRAMME> Programs { get; private set; }
263          public List<IRECORDING_SCHEDULE> Recordings { get; private set; }          public List<IRECORDING_SCHEDULE> Recordings { get; private set; }
264            public List<ICHANNEL> Channels { get; private set; }
265    
266            public IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs)
267            {
268                var list = new List<IPROGRAMME>(programs.ToArray());
269                DateTime first = new DateTime();
270                DateTime last = new DateTime();
271                first = list.OrderBy(s => s.start_time).ToList().First().start_time;            
272                last = list.OrderBy(s => s.start_time).ToList().Last().start_time;
273                gLog.Info.WriteLine("\tFirst: {0} = ({1})", first.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), first.ToDateTimeString());
274                gLog.Info.WriteLine("\tLast: {0} = ({1})", last.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), last.ToDateTimeString());
275                var range = DateTimeRange.Create(first, last);
276                return range;
277            }
278    
279            public List<SQLLITE.IPROGRAMME> FilterProgramsByDateRange(List<SQLLITE.IPROGRAMME> programs, IDateTimeRange range, out List<SQLLITE.IPROGRAMME> removed_programs)
280            {
281                removed_programs = new List<IPROGRAMME>();
282                List<SQLLITE.IPROGRAMME> list = new List<IPROGRAMME>(programs.ToArray());
283                list = list.OrderBy(s => s.start_time).ToList();
284                List<SQLLITE.IPROGRAMME> list2 = new List<IPROGRAMME>();
285                if (range == null)
286                {
287                    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");
288                    return list;
289                }
290                //gLog.Warn.WriteLine("FilterProgramsByDateRange has not been implemented");
291              
292                foreach (var program in list)
293                {
294                    if (program.start_time >= range.Start &&
295                        program.start_time <= range.End)
296                    {
297                        list2.Add(program);
298                    }
299                    else
300                    {
301                        removed_programs.Add(program);
302                    }
303                }
304                list2 = list2.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
305                removed_programs = removed_programs.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
306                return list2;
307            }
308          #endregion          #endregion
309    
310    
# Line 233  namespace GBPVRProgramDatabaseFixer Line 324  namespace GBPVRProgramDatabaseFixer
324                  using (SQLiteConnection con = CreateConnection())                  using (SQLiteConnection con = CreateConnection())
325                  {                  {
326                      con.Open();                      con.Open();
327                      string command_text = string.Format("select * from {0};", TABLES.PROGRAMME);                      string command_text = string.Format("select * from {0};", TABLES.CHANNEL);
328                      gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);                      gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
329                      using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))                      using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
330                      {                      {
# Line 288  namespace GBPVRProgramDatabaseFixer Line 379  namespace GBPVRProgramDatabaseFixer
379                  return false;                  return false;
380              }              }
381          }          }
382            private void ReadChannelData()
383            {
384                try
385                {
386                    List<ICHANNEL> channels = new List<ICHANNEL>();
387                    using (SQLiteConnection con = CreateConnection())
388                    {
389                        con.Open();
390                        string command_text = string.Format("select * from {0};", TABLES.CHANNEL);
391                        gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
392                        using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
393                        {
394                            using (SQLiteDataReader r = cmd.ExecuteReader())
395                            {
396                                if (!r.HasRows)
397                                {
398                                    gLog.Warn.WriteLine("Query: '{0}' returned no rows.", cmd.CommandText);
399                                }
400                                else
401                                {
402                                    while (r.Read())
403                                    {
404                                        CHANNEL channel = new CHANNEL();
405                                        for (int i = 0; i < r.FieldCount; i++)
406                                        {
407                                            CHANNEL.Create(ref channel, r, i);
408                                        }
409                                        channels.Add(channel);
410                                    }
411                                }
412                            }
413                        }
414                        con.Clone();
415                    }
416                    this.Channels = channels;
417                }
418                catch (Exception ex)
419                {
420                    gLog.Error.WriteLine(ex.ToString());
421                }
422            }
423          private void ReadProgrammeData()          private void ReadProgrammeData()
424          {          {
425              try              try
# Line 357  namespace GBPVRProgramDatabaseFixer Line 488  namespace GBPVRProgramDatabaseFixer
488                                      {                                      {
489                                          RECORDING_SCHEDULE.Create(ref recording, r, i);                                          RECORDING_SCHEDULE.Create(ref recording, r, i);
490                                      }                                      }
   
491                                      recordings.Add(recording);                                      recordings.Add(recording);
492                                  }                                  }
493                              }                              }
# Line 372  namespace GBPVRProgramDatabaseFixer Line 502  namespace GBPVRProgramDatabaseFixer
502                  gLog.Error.WriteLine(ex.ToString());                  gLog.Error.WriteLine(ex.ToString());
503              }              }
504          }          }
505    
506      }      }
507  }  }

Legend:
Removed from v.157  
changed lines
  Added in v.164

  ViewVC Help
Powered by ViewVC 1.1.22