ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/xmltv_parser/trunk/libxmltv/Core/XMLTVProgramCollection.cs
Revision: 54
Committed: Fri Mar 8 08:51:10 2013 UTC (10 years ago) by william
File size: 6636 byte(s)
Log Message:

File Contents

# User Rev Content
1 william 27 using System;
2     using System.Collections.Generic;
3     using System.Linq;
4     using System.Text;
5     using libxmltv.Interfaces;
6     using System.Xml.Linq;
7 william 28 using System.Globalization;
8 william 43 using System.Windows.Forms;
9 william 27
10     namespace libxmltv.Core
11     {
12 william 44 internal class XMLTVProgramCollection : IDisposable
13 william 27 {
14     private Dictionary<int, IXMLTVProgram> entries = new Dictionary<int, IXMLTVProgram>();
15 william 44 internal static void CreateInstance(XMLTVRuntimeInstance xmltv)
16     {
17 william 48 using (XMLTVProgramCollection g = new XMLTVProgramCollection(xmltv))
18     {
19     g.instance.Programs = g.Collection;
20     xmltv_logger.Log.Info.WriteLine(g.ToString());
21     }
22 william 44 }
23 william 36 private XMLTVRuntimeInstance instance;
24 william 44 protected XMLTVProgramCollection(XMLTVRuntimeInstance xmltv)
25 william 27 {
26 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("Creating Instance of XMLTVProgramCollection");
27 william 36 //IXMLTV_PARSER _xmltv;
28     //if (!Internals.VerifyInstance<IXMLTV_PARSER>(xmltv, out _xmltv)) { return; }
29     //XMLTV_PARSER = _xmltv;
30     instance = xmltv;
31 william 27 Create();
32     }
33    
34     #region IXMLTVSource
35 william 36 //private IXMLTV_PARSER XMLTV_PARSER { get; set; }
36 william 27 public Dictionary<int, IXMLTVProgram> Collection
37     {
38     get { return entries; }
39     }
40     #endregion
41    
42 william 28 //
43     private DateTime ParseDate(string timeStamp)
44     {
45     DateTime dt = new DateTime();
46     try
47     {
48     dt = DateTime.ParseExact(timeStamp, "yyyyMMddHHmmss zzzz", System.Globalization.CultureInfo.CurrentCulture);
49     }
50     catch (Exception ex) { throw ex; }
51     return dt;
52     }
53 william 27 private void Create()
54     {
55 william 49 var doc = XDocument.Parse(instance.XmlDoc);
56 william 27 int index = 0;
57 william 36 foreach (var c in doc.Descendants(XMLTVConstants.PROGRAM_ELEMENT))
58 william 27 {
59 william 46 if (instance.IsAborting)
60 william 45 {
61 william 54 xmltv_logger.Log.Verbose.Debug.WriteLine("Detected Instance abort event...");
62 william 45 break;
63     }
64 william 28 Program program = new Program();
65    
66     program.Id = index;
67 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("program_Id: {0}", program.Id);
68 william 28 if (c.HasAttributes)
69     {
70 william 36 var start = c.Attribute(XMLTVConstants.Programs.ProgramStart).Value;
71 william 28 program.Start = ParseDate(start);
72 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("\tprogram_start: {0}", start);
73 william 36 var stop = c.Attribute(XMLTVConstants.Programs.ProgramStop).Value;
74 william 28 program.Stop = ParseDate(stop);
75 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop);
76 william 36 var channelid = c.Attribute(XMLTVConstants.Programs.ProgramChannelId).Value;
77 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid);
78 william 28 IXMLTVChannel channel = new Channel();
79     try
80     {
81 william 36 channel = instance.Channels[channelid];
82 william 28 }
83     catch (KeyNotFoundException)
84     {
85 william 46 xmltv_logger.Log.Verbose.Error.WriteLine(string.Format("Unable to find Channel by id: '{0}' for this program.", channelid));
86 william 28 }
87     program.Channel = channel;
88 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("\tprogram_channel: {0}", program.Channel.ToString());
89 william 28 }
90 william 30 try
91     {
92 william 36 var title = c.Descendants(XMLTVConstants.Programs.ProgramTitle).FirstOrDefault().Value;
93 william 30 program.Title = title;
94     }
95     catch (Exception) { program.Title = string.Empty; }
96 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("\tprogram_title: {0}", program.Title == string.Empty ? "empty" : program.Title);
97 william 30 try
98     {
99 william 36 var subtitle = c.Descendants(XMLTVConstants.Programs.ProgramSubTitle).FirstOrDefault().Value;
100 william 30 program.SubTitle = subtitle;
101     }
102     catch (Exception) { program.SubTitle = string.Empty; }
103 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("\tprogram_subtitle: {0}", program.SubTitle == string.Empty ? "empty" : program.SubTitle);
104 william 30 try
105     {
106 william 36 var description = c.Descendants(XMLTVConstants.Programs.ProgramDescription).FirstOrDefault().Value;
107 william 30 program.Description = description;
108     }
109     catch (Exception) { program.Description = string.Empty; }
110 william 46 xmltv_logger.Log.Verbose.Debug.WriteLine("\tprogram_description: {0}", program.Description == string.Empty ? "empty" : program.Description);
111 william 28
112     entries.Add(program.Id, program);
113 william 43 Application.DoEvents();
114 william 27 index++;
115     }
116 william 44 //instance.Programs = Collection;
117 william 27 }
118     public override string ToString()
119     {
120 william 48 return string.Format("Total Programs Parsed: {0}", Collection == null ? 0 : Collection.Count);
121 william 27 }
122 william 44
123     public void Dispose()
124     {
125     //throw new NotImplementedException();
126     }
127 william 27 }
128 william 31 [Serializable]
129 william 27 internal class Program : IXMLTVProgram
130     {
131     public Program()
132     {
133 william 28 Id = 0;
134     Start = new DateTime();
135     Stop = new DateTime();
136     Channel = new Channel();
137     Title = string.Empty;
138     SubTitle = string.Empty;
139     Description = string.Empty;
140 william 27 }
141 william 28 #region IXMLTVProgram members
142     public int Id { get; set; }
143     public DateTime Start { get; set; }
144     public DateTime Stop { get; set; }
145     public IXMLTVChannel Channel { get; set; }
146     public string Title { get; set; }
147     public string SubTitle { get; set; }
148     public string Description { get; set; }
149     #endregion
150     public override string ToString()
151 william 27 {
152 william 28 return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']", Id, Title, SubTitle, Channel.ToString(), Start.ToString("yyyy/MM/dd hh:mm tt"), Stop.ToString("yyyy/MM/dd hh:mm tt"));
153 william 27 }
154     }
155     }