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

Diff of /trunk/libxmltv/Core/XMLTVChannel.cs

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

revision 73 by william, Sat Mar 9 10:27:39 2013 UTC revision 77 by william, Sat Mar 9 11:28:41 2013 UTC
# Line 4  using System.Linq; Line 4  using System.Linq;
4  using System.Text;  using System.Text;
5  using libxmltv.Interfaces;  using libxmltv.Interfaces;
6  using System.Xml.Linq;  using System.Xml.Linq;
7    using System.Reflection;
8    
9  namespace libxmltv.Core  namespace libxmltv.Core
10  {  {
11      [Serializable]      [Serializable]
12      internal class XMLTVChannel : IXMLTVChannel      internal class XMLTVChannel : XMLTVBase<XMLTVRuntimeInstance>, IXMLTVChannel
13      {      {
14          public XMLTVChannel()          public XMLTVChannel() : base(null,XMLTVConstants.CHANNEL_ELEMENT)
15          {          {
16              Id = string.Empty;              Id = string.Empty;
17              Number = 0;              Number = 0;
18              CallSign = string.Empty;              CallSign = string.Empty;
19              Name = string.Empty;              Name = string.Empty;
20          }          }
21          public XMLTVChannel(XElement e)          public XMLTVChannel(XMLTVRuntimeInstance instance, XElement node)
22              : this()              : base(instance, XMLTVConstants.CHANNEL_ELEMENT)
23          {          {
24              // get the channel id              xmltv_logger.Verbose.Debug.WriteLine("Creating Instance of XMLTVChannel");
25              Id = e.Attribute(XMLTVConstants.Channels.ChannelId).Value;              Create(node);
26              xmltv_logger.Verbose.Debug.WriteLine("\tchannel_id: {0}", Id);              xmltv_logger.Verbose.Debug.WriteLine("Created Instance of XMLTVChannel");
27              var names = e.Descendants(XMLTVConstants.Channels.ChannelDisplayName).ToList();              UpdateInstance();            
             Number = Convert.ToInt32(names[1].Value);  
             xmltv_logger.Verbose.Debug.WriteLine("\tchannel_number: {0}", Number);  
             CallSign = names[2].Value;  
             xmltv_logger.Verbose.Debug.WriteLine("\tchannel_callsign: {0}", CallSign);  
             Name = names[3].Value;  
             xmltv_logger.Verbose.Debug.WriteLine("\tchannel_name: {0}", Name);  
28          }          }
29          #region IXMLTVChannel members          #region IXMLTVChannel members
30          public string Id { get; private set; }          public string Id { get; private set; }
# Line 41  namespace libxmltv.Core Line 36  namespace libxmltv.Core
36          {          {
37              return string.Format("{0}: {1} {2} ({3})", Id, Number, Name, CallSign);              return string.Format("{0}: {1} {2} ({3})", Id, Number, Name, CallSign);
38          }          }
39    
40            private void UpdateInstance()
41            {
42                bool found_field = false;
43                var instance_type = this.GetInstance().GetType();
44                var fields = instance_type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
45                foreach (var field in fields)
46                {
47                    if (field.FieldType == typeof(List<IXMLTVChannel>))
48                    {
49                        found_field = true;
50                        try
51                        {                                                
52                            var list = (List<IXMLTVChannel>)field.GetValue(this.GetInstance());
53                            list.Add(this);
54                            xmltv_logger.Verbose.Debug.WriteLine("Updating instance with channel information: {0}", this.ToString());
55                            field.SetValue(this.GetInstance(), list);
56                            break;
57                        }
58                        catch (Exception ex)
59                        {
60                            xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with channel information.");
61                            xmltv_logger.Verbose.Error.WriteLine(ex.ToString());
62                        }
63                    }
64                }
65                if (!found_field)
66                {
67                    xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with channel information.");
68                }
69            }
70    
71            private void Create(XElement node)
72            {
73                // get the channel id
74                Id = node.Attribute(XMLTVConstants.Channels.ChannelId).Value;
75                xmltv_logger.Verbose.Debug.WriteLine("\tchannel_id: {0}", Id);
76                var names = node.Descendants(XMLTVConstants.Channels.ChannelDisplayName).ToList();
77                Number = Convert.ToInt32(names[1].Value);
78                xmltv_logger.Verbose.Debug.WriteLine("\tchannel_number: {0}", Number);
79                CallSign = names[2].Value;
80                xmltv_logger.Verbose.Debug.WriteLine("\tchannel_callsign: {0}", CallSign);
81                Name = names[3].Value;
82                xmltv_logger.Verbose.Debug.WriteLine("\tchannel_name: {0}", Name);
83            }
84      }      }
85    
86  }  }

Legend:
Removed from v.73  
changed lines
  Added in v.77

  ViewVC Help
Powered by ViewVC 1.1.22