/[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 90 by william, Sat Mar 9 17:42:34 2013 UTC revision 105 by william, Sun Mar 10 11:35:26 2013 UTC
# Line 43  namespace libxmltv.Core Line 43  namespace libxmltv.Core
43    
44          private void InternalDictionaryAddKnownProperties()          private void InternalDictionaryAddKnownProperties()
45          {          {
46              Properties = new PropertyDictionary();              MetaData = new PropertyDictionary();
47              Properties.AddProperty("Id", 0);              MetaData.AddProperty("Id", 0);
48              Properties.AddProperty(XMLTVConstants.Programs.ProgramStart, new DateTime());              MetaData.AddProperty(XMLTVConstants.Programs.ProgramStart, new DateTime());
49              Properties.AddProperty(XMLTVConstants.Programs.ProgramStop, new DateTime());              MetaData.AddProperty(XMLTVConstants.Programs.ProgramStop, new DateTime());
50              Properties.AddProperty(XMLTVConstants.Programs.ProgramChannelId, string.Empty);              MetaData.AddProperty(XMLTVConstants.Programs.ProgramChannelId, string.Empty);
51              Properties.AddProperty(XMLTVConstants.Programs.ProgramTitle, string.Empty);              MetaData.AddProperty(XMLTVConstants.Programs.ProgramTitle, string.Empty);
52              Properties.AddProperty(XMLTVConstants.Programs.ProgramSubTitle, string.Empty);              MetaData.AddProperty(XMLTVConstants.Programs.ProgramSubTitle, string.Empty);
53              Properties.AddProperty(XMLTVConstants.Programs.ProgramDescription, string.Empty);              MetaData.AddProperty(XMLTVConstants.Programs.ProgramDescription, string.Empty);
54          }          }
55    
56          #region Property Dictionary Support          #region Property Dictionary Support
57          public PropertyDictionary Properties { get; private set; }          private PropertyDictionary _MetaData;
58            public PropertyDictionary MetaData { get { return _MetaData; } private set { _MetaData = value; } }
59          #endregion          #endregion
60    
61          #endregion          #endregion
62          public override string ToString()          public override string ToString()
63          {          {
64              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",
65                  Properties["Id"].ToString(),                  MetaData["Id"].ToString(),
66                   Properties[(XMLTVConstants.Programs.ProgramTitle)].ToString(),                   MetaData[XMLTVConstants.Programs.ProgramTitle].ToString(),
67                   Properties[(XMLTVConstants.Programs.ProgramSubTitle)].ToString(),                   MetaData[XMLTVConstants.Programs.ProgramSubTitle].ToString(),
68                   Properties[(XMLTVConstants.Programs.ProgramChannelId)].ToString(),                   MetaData[XMLTVConstants.Programs.ProgramChannelId].ToString(),
69                  ((DateTime) Properties[XMLTVConstants.Programs.ProgramStart]).ToString("yyyy/MM/dd hh:mm tt"),                  ((DateTime)MetaData[XMLTVConstants.Programs.ProgramStart]).ToString("yyyy/MM/dd hh:mm tt"),
70                  ((DateTime) Properties[XMLTVConstants.Programs.ProgramStop]).ToString("yyyy/MM/dd hh:mm tt"));                  ((DateTime)MetaData[XMLTVConstants.Programs.ProgramStop]).ToString("yyyy/MM/dd hh:mm tt"));
71          }          }
72    
73    
# Line 86  namespace libxmltv.Core Line 87  namespace libxmltv.Core
87                      {                      {
88                                                    
89                          var list = (List<IXMLTVProgram>)field.GetValue(this.GetInstance());                          var list = (List<IXMLTVProgram>)field.GetValue(this.GetInstance());
90                          Properties["Id"] = list.Count + 1;                          MetaData["Id"] = list.Count + 1;
91                          list.Add(this);                          list.Add(this);
92                          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());
93                          field.SetValue(this.GetInstance(), list);                          field.SetValue(this.GetInstance(), list);
# Line 107  namespace libxmltv.Core Line 108  namespace libxmltv.Core
108    
109          private void Create(XElement node)          private void Create(XElement node)
110          {          {
111              //if (node.HasAttributes)              CreateHandlerForProgramMetaDataNode(node);
112              //{              var nodes = node.Elements().ToList();
             //    var start = node.Attribute(XMLTVConstants.Programs.ProgramStart);  
             //    this.Start = start == null ? new DateTime() : ParseDate(start.Value);  
             //    if (!this.Start.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_start: {0}", start); }  
   
             //    var stop = node.Attribute(XMLTVConstants.Programs.ProgramStop);  
             //    this.Stop = stop == null ? new DateTime() : ParseDate(stop.Value);  
             //    if (!this.Stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }  
   
             //    var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);  
             //    if (!string.IsNullOrEmpty(this.channelid)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid); }  
             //    IXMLTVChannel channel = new XMLTVChannel();  
             //    string _channelid = channelid == null ? string.Empty : channelid.Value;  
             //    this.Channel = this.GetInstance().Channels.Find(m => m.Id == _channelid);  
             //    if (this.Channel == null) { this.Channel = new XMLTVChannel(); }  
             //    if (!string.IsNullOrEmpty(_channelid)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channel: {0}", this.Channel.ToString()); }            //}  
             //try  
             //{  
             //    var title = node.Descendants(XMLTVConstants.Programs.ProgramTitle).FirstOrDefault();  
             //    this.Title = title == null ? string.Empty : title.Value;  
             //}  
             //catch (Exception) { this.Title = string.Empty; }  
             //if (!string.IsNullOrEmpty(this.Title)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_title: {0}", this.Title == string.Empty ? "empty" : this.Title); }  
             //try  
             //{  
             //    var subtitle = node.Descendants(XMLTVConstants.Programs.ProgramSubTitle).FirstOrDefault();  
             //    this.SubTitle = subtitle == null ? string.Empty : subtitle.Value;  
             //}  
             //catch (Exception) { this.SubTitle = string.Empty; }  
             //if (!string.IsNullOrEmpty(this.SubTitle)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_subtitle: {0}", this.SubTitle == string.Empty ? "empty" : this.SubTitle); }  
             //try  
             //{  
             //    var description = node.Descendants(XMLTVConstants.Programs.ProgramDescription).FirstOrDefault();  
             //    this.Description = description == null ? string.Empty : description.Value; ;  
             //}  
             //catch (Exception) { this.Description = string.Empty; }  
             //if (!string.IsNullOrEmpty(this.Description)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_description: {0}", this.Description == string.Empty ? "empty" : this.Description); }  
   
             //ParseExtraData(node);  
   
             var nodes = node.DescendantsAndSelf().ToList();  
113              foreach (var sub_node in nodes)              foreach (var sub_node in nodes)
114              {              {
115                  if (this.GetInstance().IsAborting)                  if (this.GetInstance().IsAborting)
# Line 217  namespace libxmltv.Core Line 178  namespace libxmltv.Core
178              }              }
179              if (handler_type == null)              if (handler_type == null)
180              {              {
181                  StringBuilder node_builder = new StringBuilder();                  try
182                  node_builder.AppendFormat("<{0} ", node.Name);                  {
183                  if (node.HasAttributes) { foreach (var attribute in node.Attributes()) { node_builder.AppendFormat("{0}=\"{1}\" ", attribute.Name, attribute.Value); } }                      raw_instance = Activator.CreateInstance(typeof(UnhandledExtraMetaData), flags, null, new object[] { this, node }, culture);
184                  string node_text = string.Format("{0}>", node_builder.ToString().TrimEnd(new char[] { ' ' }));                  }
185                  xmltv_logger.Verbose.Warn.WriteLine("Ignoring unhandled extra meta-data: {0}", node_text);                  catch (Exception ex) { throw ex; }
186    
187                    if (raw_instance == null)
188                    {
189                        StringBuilder node_builder = new StringBuilder();
190                        node_builder.AppendFormat("<{0} ", node.Name);
191                        if (node.HasAttributes) { foreach (var attribute in node.Attributes()) { node_builder.AppendFormat("{0}=\"{1}\" ", attribute.Name, attribute.Value); } }
192                        string node_text = string.Format("{0}>", node_builder.ToString().TrimEnd(new char[] { ' ' }));
193                        xmltv_logger.Verbose.Warn.WriteLine("Ignoring unhandled extra meta-data: {0}", node_text);
194                    }
195              }              }
196              else              else
197              {              {
198                  raw_instance = Activator.CreateInstance(handler_type, flags, null, new object[] { this, node }, culture);                  try
199                    {
200                        raw_instance = Activator.CreateInstance(handler_type, flags, null, new object[] { this, node }, culture);
201                    }
202                    catch (Exception ex) { throw ex; }
203              }              }
204          }          }
205    
206    
207    
208          #region sub-classes          #region sub-classes      
209          #region program title          #region programme: stop/start/channelid
         private class title : XMLTVBase<XMLTVProgram>  
         {  
             public title() : base(null, XMLTVConstants.Programs.ProgramTitle) { }  
             public title(XMLTVProgram instance, XElement node)  
                 : base(instance, XMLTVConstants.Programs.ProgramTitle)  
             {                  
                 if(node == null){throw new NullReferenceException("The node instance was null");}                  
                 if (node.Value != null)  
                 {  
                     instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramTitle, node.Value);  
                     xmltv_logger.Verbose.Debug.WriteLine("\tprogram_title: {0}", node.Value);  
                 }                  
             }  
         }  
         #endregion  
         #region program stop/start/channel (programme)  
210          private class programme : XMLTVBase<XMLTVProgram>          private class programme : XMLTVBase<XMLTVProgram>
211          {          {
212              public programme() : base(null, XMLTVConstants.Programs.RootElement) { }              public programme() : base(null, XMLTVConstants.Programs.RootElement) { }
# Line 261  namespace libxmltv.Core Line 219  namespace libxmltv.Core
219                      var start = node.Attribute(XMLTVConstants.Programs.ProgramStart);                      var start = node.Attribute(XMLTVConstants.Programs.ProgramStart);
220                      var t_start = start == null ? new DateTime() : ParseDate(start.Value);                      var t_start = start == null ? new DateTime() : ParseDate(start.Value);
221                      if (!t_start.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_start: {0}", start); }                      if (!t_start.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_start: {0}", start); }
222                      instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramStart, t_start);                      instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramStart, t_start);
223    
224                      var stop = node.Attribute(XMLTVConstants.Programs.ProgramStop);                      var stop = node.Attribute(XMLTVConstants.Programs.ProgramStop);
225                      var t_stop = stop == null ? new DateTime() : ParseDate(stop.Value);                      var t_stop = stop == null ? new DateTime() : ParseDate(stop.Value);
226                      if (!t_stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }                      if (!t_stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }
227                      instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramStop, t_stop);                      instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramStop, t_stop);
228    
229                      var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);                      var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);
230                      if (channelid != null)                      if (channelid != null)
231                      {                      {
232                          if (!string.IsNullOrEmpty(channelid.Value)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid.Value); }                          if (!string.IsNullOrEmpty(channelid.Value)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid.Value); }
233                          instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramChannelId, channelid.Value);                          instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramChannelId, channelid.Value);
234                      }                      }
235                                            
236                  }                  }
237              }              }
238          }          }
239          #endregion          #endregion
240            #region title
241          #region sub title          private class title : XMLTVBase<XMLTVProgram>
242            {
243                public title() : base(null, XMLTVConstants.Programs.ProgramTitle) { }
244                public title(XMLTVProgram instance, XElement node)
245                    : base(instance, XMLTVConstants.Programs.ProgramTitle)
246                {
247                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
248                    if (node.Value != null)
249                    {
250                        instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramTitle, node.Value);
251                        xmltv_logger.Verbose.Debug.WriteLine("\tprogram_title: {0}", node.Value);
252                    }
253                }
254            }
255            #endregion
256            #region sub-title
257          private class subtitle : XMLTVBase<XMLTVProgram>          private class subtitle : XMLTVBase<XMLTVProgram>
258          {          {
259              public subtitle() : base(null, XMLTVConstants.Programs.ProgramSubTitle) { }              public subtitle() : base(null, XMLTVConstants.Programs.ProgramSubTitle) { }
# Line 290  namespace libxmltv.Core Line 263  namespace libxmltv.Core
263                  if (node == null) { throw new NullReferenceException("The node instance was null"); }                  if (node == null) { throw new NullReferenceException("The node instance was null"); }
264                  if (node.Value != null)                  if (node.Value != null)
265                  {                  {
266                      instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramSubTitle, node.Value);                      instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramSubTitle, node.Value);
267                      xmltv_logger.Verbose.Debug.WriteLine("\tprogram_subtitle: {0}", node.Value);                      xmltv_logger.Verbose.Debug.WriteLine("\tprogram_subtitle: {0}", node.Value);
268                  }                  }
269              }              }
270          }          }
271          #endregion          #endregion
272          #region sub title          #region description
273          private class description : XMLTVBase<XMLTVProgram>          private class description : XMLTVBase<XMLTVProgram>
274          {          {
275              public description() : base(null, XMLTVConstants.Programs.ProgramDescription) { }              public description() : base(null, XMLTVConstants.Programs.ProgramDescription) { }
# Line 306  namespace libxmltv.Core Line 279  namespace libxmltv.Core
279                  if (node == null) { throw new NullReferenceException("The node instance was null"); }                  if (node == null) { throw new NullReferenceException("The node instance was null"); }
280                  if (node.Value != null)                  if (node.Value != null)
281                  {                  {
282                      instance.Properties.AddProperty(XMLTVConstants.Programs.ProgramDescription, node.Value);                      instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramDescription, node.Value);
283                      xmltv_logger.Verbose.Debug.WriteLine("\tprogram_description: {0}", node.Value);                      xmltv_logger.Verbose.Debug.WriteLine("\tprogram_description: {0}", node.Value);
284                  }                  }
285              }              }
286          }          }
287          #endregion          #endregion
288    
289            #region UnhandledExtraMetaData
290            private class UnhandledExtraMetaData : XMLTVBase<XMLTVProgram>
291            {
292                public UnhandledExtraMetaData() : base(null, null) { }
293                public UnhandledExtraMetaData(XMLTVProgram instance, XElement node)
294                    : base(instance, null)
295                {
296                    if (node == null) { throw new NullReferenceException("The node instance was null"); }
297                    //if (node.Value != null)
298                    //{
299                    //    instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramDescription, node.Value);
300                    //    xmltv_logger.Verbose.Debug.WriteLine("\tprogram_description: {0}", node.Value);
301                    //}
302                    xmltv_logger.Verbose.Debug.WriteLine("Parsng unhandled extra meta-data: {0}", node.Name.ToString());
303    
304                    if (this.GetInstance() != null)
305                    {
306                        if (!instance.MetaData.ContainsProperty(XMLTVConstants.Programs.ProgramExtraMetaData))
307                        {
308                            instance.MetaData.AddProperty(XMLTVConstants.Programs.ProgramExtraMetaData, null);
309                        }
310                    }
311    
312                }
313            }
314            #endregion
315          #endregion          #endregion
316      }      }
317  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.22