/[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 91 by william, Sat Mar 9 17:48:02 2013 UTC revision 105 by william, Sun Mar 10 11:35:26 2013 UTC
# Line 54  namespace libxmltv.Core Line 54  namespace libxmltv.Core
54          }          }
55    
56          #region Property Dictionary Support          #region Property Dictionary Support
57          public PropertyDictionary MetaData { get; private set; }          private PropertyDictionary _MetaData;
58            public PropertyDictionary MetaData { get { return _MetaData; } private set { _MetaData = value; } }
59          #endregion          #endregion
60    
61          #endregion          #endregion
# Line 62  namespace libxmltv.Core Line 63  namespace libxmltv.Core
63          {          {
64              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",              return string.Format("{0}: {1} - {2} ({3}) ['{4}' <==> '{5}']",
65                  MetaData["Id"].ToString(),                  MetaData["Id"].ToString(),
66                   MetaData[(XMLTVConstants.Programs.ProgramTitle)].ToString(),                   MetaData[XMLTVConstants.Programs.ProgramTitle].ToString(),
67                   MetaData[(XMLTVConstants.Programs.ProgramSubTitle)].ToString(),                   MetaData[XMLTVConstants.Programs.ProgramSubTitle].ToString(),
68                   MetaData[(XMLTVConstants.Programs.ProgramChannelId)].ToString(),                   MetaData[XMLTVConstants.Programs.ProgramChannelId].ToString(),
69                  ((DateTime)MetaData[XMLTVConstants.Programs.ProgramStart]).ToString("yyyy/MM/dd hh:mm tt"),                  ((DateTime)MetaData[XMLTVConstants.Programs.ProgramStart]).ToString("yyyy/MM/dd hh:mm tt"),
70                  ((DateTime)MetaData[XMLTVConstants.Programs.ProgramStop]).ToString("yyyy/MM/dd hh:mm tt"));                  ((DateTime)MetaData[XMLTVConstants.Programs.ProgramStop]).ToString("yyyy/MM/dd hh:mm tt"));
71          }          }
# Line 107  namespace libxmltv.Core Line 108  namespace libxmltv.Core
108    
109          private void Create(XElement node)          private void Create(XElement node)
110          {          {
111              var nodes = node.DescendantsAndSelf().ToList();              CreateHandlerForProgramMetaDataNode(node);
112                var nodes = node.Elements().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 176  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.MetaData.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 238  namespace libxmltv.Core Line 237  namespace libxmltv.Core
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 255  namespace libxmltv.Core Line 269  namespace libxmltv.Core
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 271  namespace libxmltv.Core Line 285  namespace libxmltv.Core
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.91  
changed lines
  Added in v.105

  ViewVC Help
Powered by ViewVC 1.1.22