/[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 163 by william, Fri Mar 15 16:53:40 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);
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)
280            {
281                List<SQLLITE.IPROGRAMME> list = new List<IPROGRAMME>(programs.ToArray());
282                list = list.OrderBy(s => s.start_time).ToList();
283                List<SQLLITE.IPROGRAMME> list2 = new List<IPROGRAMME>();
284                if (range == null)
285                {
286                    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");
287                    return list;
288                }
289                //gLog.Warn.WriteLine("FilterProgramsByDateRange has not been implemented");
290              
291                foreach (var program in list)
292                {
293                    if (program.start_time >= range.Start &&
294                        program.start_time <= range.End)
295                    {
296                        list2.Add(program);
297                    }
298                }
299                list2 = list2.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
300                return list2;
301            }
302          #endregion          #endregion
303    
304    
# Line 233  namespace GBPVRProgramDatabaseFixer Line 318  namespace GBPVRProgramDatabaseFixer
318                  using (SQLiteConnection con = CreateConnection())                  using (SQLiteConnection con = CreateConnection())
319                  {                  {
320                      con.Open();                      con.Open();
321                      string command_text = string.Format("select * from {0};", TABLES.PROGRAMME);                      string command_text = string.Format("select * from {0};", TABLES.CHANNEL);
322                      gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);                      gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
323                      using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))                      using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
324                      {                      {
# Line 288  namespace GBPVRProgramDatabaseFixer Line 373  namespace GBPVRProgramDatabaseFixer
373                  return false;                  return false;
374              }              }
375          }          }
376            private void ReadChannelData()
377            {
378                try
379                {
380                    List<ICHANNEL> channels = new List<ICHANNEL>();
381                    using (SQLiteConnection con = CreateConnection())
382                    {
383                        con.Open();
384                        string command_text = string.Format("select * from {0};", TABLES.CHANNEL);
385                        gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
386                        using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
387                        {
388                            using (SQLiteDataReader r = cmd.ExecuteReader())
389                            {
390                                if (!r.HasRows)
391                                {
392                                    gLog.Warn.WriteLine("Query: '{0}' returned no rows.", cmd.CommandText);
393                                }
394                                else
395                                {
396                                    while (r.Read())
397                                    {
398                                        CHANNEL channel = new CHANNEL();
399                                        for (int i = 0; i < r.FieldCount; i++)
400                                        {
401                                            CHANNEL.Create(ref channel, r, i);
402                                        }
403                                        channels.Add(channel);
404                                    }
405                                }
406                            }
407                        }
408                        con.Clone();
409                    }
410                    this.Channels = channels;
411                }
412                catch (Exception ex)
413                {
414                    gLog.Error.WriteLine(ex.ToString());
415                }
416            }
417          private void ReadProgrammeData()          private void ReadProgrammeData()
418          {          {
419              try              try
# Line 357  namespace GBPVRProgramDatabaseFixer Line 482  namespace GBPVRProgramDatabaseFixer
482                                      {                                      {
483                                          RECORDING_SCHEDULE.Create(ref recording, r, i);                                          RECORDING_SCHEDULE.Create(ref recording, r, i);
484                                      }                                      }
   
485                                      recordings.Add(recording);                                      recordings.Add(recording);
486                                  }                                  }
487                              }                              }
# Line 372  namespace GBPVRProgramDatabaseFixer Line 496  namespace GBPVRProgramDatabaseFixer
496                  gLog.Error.WriteLine(ex.ToString());                  gLog.Error.WriteLine(ex.ToString());
497              }              }
498          }          }
499    
500      }      }
501  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.22