/[xmltv_parser]/trunk/libxmltv/Core/XMLTVProgram.cs
ViewVC logotype

Diff of /trunk/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 89 by william, Sat Mar 9 14:58:09 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 57  namespace libxmltv.Core Line 58  namespace libxmltv.Core
58          private void InternalDictionaryTestOrThrow()          private void InternalDictionaryTestOrThrow()
59          {          {
60              if (Properties == null) { throw new NullReferenceException("Properties collection has not been initialized."); }              if (Properties == null) { throw new NullReferenceException("Properties collection has not been initialized."); }
61              if (Properties.Count == 0) { throw new IndexOutOfRangeException("Properties collection has 0 elements."); }              //if (Properties.Count == 0) { throw new IndexOutOfRangeException("Properties collection has 0 elements."); }
62          }          }
63          private void InternalProperyExistsOrThrow(string name)          private void InternalProperyExistsOrThrow(string propertyname)
64          {          {
65              InternalDictionaryTestOrThrow();              InternalDictionaryTestOrThrow();
66              if (!Properties.ContainsKey(name)) { throw new KeyNotFoundException(string.Format("Property '{0}' does not exist", name)); }              //if (!ContainsProperty(propertyname)) { throw new KeyNotFoundException(string.Format("Property '{0}' does not exist.", propertyname)); }
67          }          }
68          public object GetProperty(string name)  
69            public void RemoveProperty(string propertyname)
70            {
71                if (ContainsProperty(propertyname))
72                {
73                    Properties.Remove(propertyname);
74                }
75                else
76                {
77                    throw new ArgumentException(string.Format("Property '{0}' deos not exist", propertyname), propertyname);
78                }
79            }
80    
81            public void AddProperty(string propertyname) { AddProperty(propertyname, new object()); }
82            public void AddProperty(string propertyname, object propertyvalue)
83            {
84                if (!ContainsProperty(propertyname))
85                {
86                    Properties.Add(propertyname, propertyvalue);
87                }
88                else
89                {
90                    SetProperty(propertyname, propertyvalue);
91                }
92            }
93            public bool ContainsProperty(string propertyname)
94          {          {
95              InternalProperyExistsOrThrow(name);              return Properties.ContainsKey(propertyname);
             return Properties[name];              
96          }          }
97          public void SetProperty(string name, object value)          public object GetProperty(string propertyname)
98          {          {
99              InternalProperyExistsOrThrow(name);              InternalProperyExistsOrThrow(propertyname);
100              Properties[name] = value;              if (!ContainsProperty(propertyname)) { throw new KeyNotFoundException(string.Format("Property '{0}' does not exist.", propertyname)); }
101                return Properties[propertyname];            
102            }
103            public void SetProperty(string propertyname, object propertyvalue)
104            {
105                InternalProperyExistsOrThrow(propertyname);
106                if (!ContainsProperty(propertyname)) { throw new KeyNotFoundException(string.Format("Property '{0}' does not exist.", propertyname)); }
107                Properties[propertyname] = propertyvalue;
108          }          }
109          #endregion          #endregion
110          public override string ToString()          public override string ToString()
# Line 80  namespace libxmltv.Core Line 112  namespace libxmltv.Core
112              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",
113                  GetProperty("Id").ToString(),                  GetProperty("Id").ToString(),
114                  GetProperty(XMLTVConstants.Programs.ProgramTitle).ToString(),                  GetProperty(XMLTVConstants.Programs.ProgramTitle).ToString(),
115                  GetProperty(XMLTVConstants.Programs.ProgramSubTitle), ToString(),                  GetProperty(XMLTVConstants.Programs.ProgramSubTitle).ToString(),
116                  GetProperty(XMLTVConstants.Programs.ProgramChannelId).ToString(),                  GetProperty(XMLTVConstants.Programs.ProgramChannelId).ToString(),
117                  ((DateTime)GetProperty(XMLTVConstants.Programs.ProgramStart)).ToString("yyyy/MM/dd hh:mm tt"),                  ((DateTime)GetProperty(XMLTVConstants.Programs.ProgramStart)).ToString("yyyy/MM/dd hh:mm tt"),
118                  ((DateTime)GetProperty(XMLTVConstants.Programs.ProgramStop)).ToString("yyyy/MM/dd hh:mm tt"));                  ((DateTime)GetProperty(XMLTVConstants.Programs.ProgramStop)).ToString("yyyy/MM/dd hh:mm tt"));
# Line 135  namespace libxmltv.Core Line 167  namespace libxmltv.Core
167              //    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); }
168    
169              //    var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);              //    var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);
170              //    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); }
171              //    IXMLTVChannel channel = new XMLTVChannel();              //    IXMLTVChannel channel = new XMLTVChannel();
172              //    string _channelid = channelid == null ? string.Empty : channelid.Value;              //    string _channelid = channelid == null ? string.Empty : channelid.Value;
173              //    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 197  namespace libxmltv.Core
197    
198              //ParseExtraData(node);              //ParseExtraData(node);
199    
200              var nodes = node.Elements().ToList();              var nodes = node.DescendantsAndSelf().ToList();
201              foreach (var sub_node in nodes)              foreach (var sub_node in nodes)
202              {              {
203                  if (this.GetInstance().IsAborting)                  if (this.GetInstance().IsAborting)
# Line 175  namespace libxmltv.Core Line 207  namespace libxmltv.Core
207                  CreateHandlerForProgramMetaDataNode(sub_node);                  CreateHandlerForProgramMetaDataNode(sub_node);
208              }              }
209          }          }
210          private DateTime ParseDate(string timeStamp)          private static DateTime ParseDate(string timeStamp)
211          {          {
212              DateTime dt = new DateTime();              DateTime dt = new DateTime();
213              try              try
# Line 188  namespace libxmltv.Core Line 220  namespace libxmltv.Core
220    
221          private void CreateHandlerForProgramMetaDataNode(XElement node)          private void CreateHandlerForProgramMetaDataNode(XElement node)
222          {          {
223    
224              Type t = this.GetType();              Type t = this.GetType();
225              Assembly asm = t.Assembly;              Assembly asm = t.Assembly;
226              var types = asm.GetTypes();              var types = asm.GetTypes();
# Line 239  namespace libxmltv.Core Line 272  namespace libxmltv.Core
272                  string node_text = string.Format("{0}>", node_builder.ToString().TrimEnd(new char[] { ' ' }));                  string node_text = string.Format("{0}>", node_builder.ToString().TrimEnd(new char[] { ' ' }));
273                  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);
274              }              }
275              raw_instance = Activator.CreateInstance(handler_type, flags, null, new object[] { this, node }, culture);              else
276                {
277                    raw_instance = Activator.CreateInstance(handler_type, flags, null, new object[] { this, node }, culture);
278                }
279          }          }
280    
281    
282    
283          #region sub-classes          #region sub-classes
284            #region program title
285          private class title : XMLTVBase<XMLTVProgram>          private class title : XMLTVBase<XMLTVProgram>
286          {          {
287              public title() : base(null, XMLTVConstants.Programs.ProgramTitle) { }              public title() : base(null, XMLTVConstants.Programs.ProgramTitle) { }
288              public title(XMLTVProgram instance, XElement node)              public title(XMLTVProgram instance, XElement node)
289                  : base(instance, XMLTVConstants.Programs.ProgramTitle)                  : base(instance, XMLTVConstants.Programs.ProgramTitle)
290                {                
291                    if(node == null){throw new NullReferenceException("The node instance was null");}                
292                    if (node.Value != null)
293                    {
294                        instance.AddProperty(XMLTVConstants.Programs.ProgramTitle, node.Value);
295                        xmltv_logger.Verbose.Debug.WriteLine("\tprogram_title: {0}", node.Value);
296                    }                
297                }
298            }
299            #endregion
300            #region program stop/start/channel (programme)
301            private class programme : XMLTVBase<XMLTVProgram>
302            {
303                public programme() : base(null, XMLTVConstants.Programs.RootElement) { }
304                public programme(XMLTVProgram instance, XElement node)
305                    : base(instance, XMLTVConstants.Programs.RootElement)
306                {
307                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
308                    if (node.HasAttributes)
309                    {                    
310                        var start = node.Attribute(XMLTVConstants.Programs.ProgramStart);
311                        var t_start = start == null ? new DateTime() : ParseDate(start.Value);
312                        if (!t_start.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_start: {0}", start); }
313                        instance.AddProperty(XMLTVConstants.Programs.ProgramStart, t_start);
314    
315                        var stop = node.Attribute(XMLTVConstants.Programs.ProgramStop);
316                        var t_stop = stop == null ? new DateTime() : ParseDate(stop.Value);
317                        if (!t_stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }
318                        instance.AddProperty(XMLTVConstants.Programs.ProgramStop, t_stop);
319    
320                        var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);
321                        if (channelid != null)
322                        {
323                            if (!string.IsNullOrEmpty(channelid.Value)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid.Value); }
324                            instance.AddProperty(XMLTVConstants.Programs.ProgramChannelId, channelid.Value);
325                        }
326                        
327                    }
328                }
329            }
330            #endregion
331    
332            #region sub title
333            private class subtitle : XMLTVBase<XMLTVProgram>
334            {
335                public subtitle() : base(null, XMLTVConstants.Programs.ProgramSubTitle) { }
336                public subtitle(XMLTVProgram instance, XElement node)
337                    : base(instance, XMLTVConstants.Programs.ProgramSubTitle)
338              {              {
339                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
340                    if (node.Value != null)
341                    {
342                        instance.AddProperty(XMLTVConstants.Programs.ProgramSubTitle, node.Value);
343                        xmltv_logger.Verbose.Debug.WriteLine("\tprogram_subtitle: {0}", node.Value);
344                    }
345              }              }
346          }          }
347          #endregion          #endregion
348            #region sub title
349            private class description : XMLTVBase<XMLTVProgram>
350            {
351                public description() : base(null, XMLTVConstants.Programs.ProgramDescription) { }
352                public description(XMLTVProgram instance, XElement node)
353                    : base(instance, XMLTVConstants.Programs.ProgramDescription)
354                {
355                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
356                    if (node.Value != null)
357                    {
358                        instance.AddProperty(XMLTVConstants.Programs.ProgramDescription, node.Value);
359                        xmltv_logger.Verbose.Debug.WriteLine("\tprogram_description: {0}", node.Value);
360                    }
361                }
362            }
363            #endregion
364            #endregion
365      }      }
366  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.22