/[xmltv_parser]/branches/linux/xmltv_parser/libxmltv/Core/XMLTVProgram.cs
ViewVC logotype

Diff of /branches/linux/xmltv_parser/libxmltv/Core/XMLTVProgram.cs

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

revision 86 by william, Sat Mar 9 13:51:58 2013 UTC revision 90 by william, Sat Mar 9 17:42:34 2013 UTC
# Line 14  namespace libxmltv.Core Line 14  namespace libxmltv.Core
14      [Serializable]      [Serializable]
15      internal class XMLTVProgram : XMLTVBase<XMLTVRuntimeInstance>, IXMLTVProgram      internal class XMLTVProgram : XMLTVBase<XMLTVRuntimeInstance>, IXMLTVProgram
16      {      {
17          public XMLTVProgram() : base(null,XMLTVConstants.PROGRAM_ELEMENT)          public XMLTVProgram()
18                : base(null, XMLTVConstants.Programs.RootElement)
19          {          {
20              InternalDictionaryAddKnownProperties();              InternalDictionaryAddKnownProperties();
21                    
22          }          }
23          public XMLTVProgram(XMLTVRuntimeInstance instance, XElement node)          public XMLTVProgram(XMLTVRuntimeInstance instance, XElement node)
24              : base(instance, XMLTVConstants.PROGRAM_ELEMENT)              : base(instance, XMLTVConstants.Programs.RootElement)
25          {          {
26              InternalDictionaryAddKnownProperties();              InternalDictionaryAddKnownProperties();
27              try {              try {
# Line 42  namespace libxmltv.Core Line 43  namespace libxmltv.Core
43    
44          private void InternalDictionaryAddKnownProperties()          private void InternalDictionaryAddKnownProperties()
45          {          {
46              Properties = new Dictionary<string, object>();              Properties = new PropertyDictionary();
47              Properties.Add("Id", 0);              Properties.AddProperty("Id", 0);
48              Properties.Add(XMLTVConstants.Programs.ProgramStart, new DateTime());              Properties.AddProperty(XMLTVConstants.Programs.ProgramStart, new DateTime());
49              Properties.Add(XMLTVConstants.Programs.ProgramStop, new DateTime());              Properties.AddProperty(XMLTVConstants.Programs.ProgramStop, new DateTime());
50              Properties.Add(XMLTVConstants.Programs.ProgramChannelId, string.Empty);              Properties.AddProperty(XMLTVConstants.Programs.ProgramChannelId, string.Empty);
51              Properties.Add(XMLTVConstants.Programs.ProgramTitle, string.Empty);              Properties.AddProperty(XMLTVConstants.Programs.ProgramTitle, string.Empty);
52              Properties.Add(XMLTVConstants.Programs.ProgramSubTitle, string.Empty);              Properties.AddProperty(XMLTVConstants.Programs.ProgramSubTitle, string.Empty);
53              Properties.Add(XMLTVConstants.Programs.ProgramDescription, string.Empty);              Properties.AddProperty(XMLTVConstants.Programs.ProgramDescription, string.Empty);
54          }          }
55    
56          public Dictionary<string, object> Properties { get; private set; }          #region Property Dictionary Support
57            public PropertyDictionary Properties { get; private set; }
58            #endregion
59    
         private void InternalDictionaryTestOrThrow()  
         {  
             if (Properties == null) { throw new NullReferenceException("Properties collection has not been initialized."); }  
             if (Properties.Count == 0) { throw new IndexOutOfRangeException("Properties collection has 0 elements."); }  
         }  
         private void InternalProperyExistsOrThrow(string name)  
         {  
             InternalDictionaryTestOrThrow();  
             if (!Properties.ContainsKey(name)) { throw new KeyNotFoundException(string.Format("Property '{0}' does not exist", name)); }  
         }  
         public object GetProperty(string name)  
         {  
             InternalProperyExistsOrThrow(name);  
             return Properties[name];              
         }  
         public void SetProperty(string name, object value)  
         {  
             InternalProperyExistsOrThrow(name);  
             Properties[name] = value;  
         }  
60          #endregion          #endregion
61          public override string ToString()          public override string ToString()
62          {          {
63              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",
64                  GetProperty("Id").ToString(),                  Properties["Id"].ToString(),
65                  GetProperty(XMLTVConstants.Programs.ProgramTitle).ToString(),                   Properties[(XMLTVConstants.Programs.ProgramTitle)].ToString(),
66                  GetProperty(XMLTVConstants.Programs.ProgramSubTitle), ToString(),                   Properties[(XMLTVConstants.Programs.ProgramSubTitle)].ToString(),
67                  GetProperty(XMLTVConstants.Programs.ProgramChannelId).ToString(),                   Properties[(XMLTVConstants.Programs.ProgramChannelId)].ToString(),
68                  ((DateTime)GetProperty(XMLTVConstants.Programs.ProgramStart)).ToString("yyyy/MM/dd hh:mm tt"),                  ((DateTime) Properties[XMLTVConstants.Programs.ProgramStart]).ToString("yyyy/MM/dd hh:mm tt"),
69                  ((DateTime)GetProperty(XMLTVConstants.Programs.ProgramStop)).ToString("yyyy/MM/dd hh:mm tt"));                  ((DateTime) Properties[XMLTVConstants.Programs.ProgramStop]).ToString("yyyy/MM/dd hh:mm tt"));
70          }          }
71    
72    
# Line 103  namespace libxmltv.Core Line 86  namespace libxmltv.Core
86                      {                      {
87                                                    
88                          var list = (List<IXMLTVProgram>)field.GetValue(this.GetInstance());                          var list = (List<IXMLTVProgram>)field.GetValue(this.GetInstance());
89                          this.SetProperty("Id", list.Count + 1);                          Properties["Id"] = list.Count + 1;
90                          list.Add(this);                          list.Add(this);
91                          xmltv_logger.Verbose.Debug.WriteLine("Updating instance with program information: {0}", this.ToString());                          xmltv_logger.Verbose.Debug.WriteLine("Updating instance with program information: {0}", this.ToString());
92                          field.SetValue(this.GetInstance(), list);                          field.SetValue(this.GetInstance(), list);
# Line 135  namespace libxmltv.Core Line 118  namespace libxmltv.Core
118              //    if (!this.Stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }              //    if (!this.Stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }
119    
120              //    var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);              //    var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);
121              //    if (!string.IsNullOrEmpty(this.Description)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid); }              //    if (!string.IsNullOrEmpty(this.channelid)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid); }
122              //    IXMLTVChannel channel = new XMLTVChannel();              //    IXMLTVChannel channel = new XMLTVChannel();
123              //    string _channelid = channelid == null ? string.Empty : channelid.Value;              //    string _channelid = channelid == null ? string.Empty : channelid.Value;
124              //    this.Channel = this.GetInstance().Channels.Find(m => m.Id == _channelid);              //    this.Channel = this.GetInstance().Channels.Find(m => m.Id == _channelid);
# Line 165  namespace libxmltv.Core Line 148  namespace libxmltv.Core
148    
149              //ParseExtraData(node);              //ParseExtraData(node);
150    
151              var nodes = node.Elements().ToList();              var nodes = node.DescendantsAndSelf().ToList();
152              foreach (var sub_node in nodes)              foreach (var sub_node in nodes)
153              {              {
154                  if (this.GetInstance().IsAborting)                  if (this.GetInstance().IsAborting)
# Line 175  namespace libxmltv.Core Line 158  namespace libxmltv.Core
158                  CreateHandlerForProgramMetaDataNode(sub_node);                  CreateHandlerForProgramMetaDataNode(sub_node);
159              }              }
160          }          }
161          private DateTime ParseDate(string timeStamp)          private static DateTime ParseDate(string timeStamp)
162          {          {
163              DateTime dt = new DateTime();              DateTime dt = new DateTime();
164              try              try
# Line 188  namespace libxmltv.Core Line 171  namespace libxmltv.Core
171    
172          private void CreateHandlerForProgramMetaDataNode(XElement node)          private void CreateHandlerForProgramMetaDataNode(XElement node)
173          {          {
174    
175              Type t = this.GetType();              Type t = this.GetType();
176              Assembly asm = t.Assembly;              Assembly asm = t.Assembly;
177              var types = asm.GetTypes();              var types = asm.GetTypes();
# Line 239  namespace libxmltv.Core Line 223  namespace libxmltv.Core
223                  string node_text = string.Format("{0}>", node_builder.ToString().TrimEnd(new char[] { ' ' }));                  string node_text = string.Format("{0}>", node_builder.ToString().TrimEnd(new char[] { ' ' }));
224                  xmltv_logger.Verbose.Warn.WriteLine("Ignoring unhandled extra meta-data: {0}", node_text);                  xmltv_logger.Verbose.Warn.WriteLine("Ignoring unhandled extra meta-data: {0}", node_text);
225              }              }
226              raw_instance = Activator.CreateInstance(handler_type, flags, null, new object[] { this, node }, culture);              else
227                {
228                    raw_instance = Activator.CreateInstance(handler_type, flags, null, new object[] { this, node }, culture);
229                }
230          }          }
231    
232    
233    
234          #region sub-classes          #region sub-classes
235            #region program title
236          private class title : XMLTVBase<XMLTVProgram>          private class title : XMLTVBase<XMLTVProgram>
237          {          {
238              public title() : base(null, XMLTVConstants.Programs.ProgramTitle) { }              public title() : base(null, XMLTVConstants.Programs.ProgramTitle) { }
239              public title(XMLTVProgram instance, XElement node)              public title(XMLTVProgram instance, XElement node)
240                  : base(instance, XMLTVConstants.Programs.ProgramTitle)                  : base(instance, XMLTVConstants.Programs.ProgramTitle)
241                {                
242                    if(node == null){throw new NullReferenceException("The node instance was null");}                
243                    if (node.Value != null)
244                    {
245                        instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramTitle, node.Value);
246                        xmltv_logger.Verbose.Debug.WriteLine("\tprogram_title: {0}", node.Value);
247                    }                
248                }
249            }
250            #endregion
251            #region program stop/start/channel (programme)
252            private class programme : XMLTVBase<XMLTVProgram>
253            {
254                public programme() : base(null, XMLTVConstants.Programs.RootElement) { }
255                public programme(XMLTVProgram instance, XElement node)
256                    : base(instance, XMLTVConstants.Programs.RootElement)
257              {              {
258                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
259                    if (node.HasAttributes)
260                    {                    
261                        var start = node.Attribute(XMLTVConstants.Programs.ProgramStart);
262                        var t_start = start == null ? new DateTime() : ParseDate(start.Value);
263                        if (!t_start.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_start: {0}", start); }
264                        instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramStart, t_start);
265    
266                        var stop = node.Attribute(XMLTVConstants.Programs.ProgramStop);
267                        var t_stop = stop == null ? new DateTime() : ParseDate(stop.Value);
268                        if (!t_stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }
269                        instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramStop, t_stop);
270    
271                        var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);
272                        if (channelid != null)
273                        {
274                            if (!string.IsNullOrEmpty(channelid.Value)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid.Value); }
275                            instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramChannelId, channelid.Value);
276                        }
277                        
278                    }
279                }
280            }
281            #endregion
282    
283            #region sub title
284            private class subtitle : XMLTVBase<XMLTVProgram>
285            {
286                public subtitle() : base(null, XMLTVConstants.Programs.ProgramSubTitle) { }
287                public subtitle(XMLTVProgram instance, XElement node)
288                    : base(instance, XMLTVConstants.Programs.ProgramSubTitle)
289                {
290                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
291                    if (node.Value != null)
292                    {
293                        instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramSubTitle, node.Value);
294                        xmltv_logger.Verbose.Debug.WriteLine("\tprogram_subtitle: {0}", node.Value);
295                    }
296              }              }
297          }          }
298          #endregion          #endregion
299            #region sub title
300            private class description : XMLTVBase<XMLTVProgram>
301            {
302                public description() : base(null, XMLTVConstants.Programs.ProgramDescription) { }
303                public description(XMLTVProgram instance, XElement node)
304                    : base(instance, XMLTVConstants.Programs.ProgramDescription)
305                {
306                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
307                    if (node.Value != null)
308                    {
309                        instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramDescription, node.Value);
310                        xmltv_logger.Verbose.Debug.WriteLine("\tprogram_description: {0}", node.Value);
311                    }
312                }
313            }
314            #endregion
315            #endregion
316      }      }
317  }  }

Legend:
Removed from v.86  
changed lines
  Added in v.90

  ViewVC Help
Powered by ViewVC 1.1.22