/[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 99 by william, Sun Mar 10 10:18:06 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    using System.IO;
9    using System.Diagnostics;
10    
11  namespace libxmltv.Core  namespace libxmltv.Core
12  {  {
13      [Serializable]      [Serializable]
14      internal class XMLTVChannel : IXMLTVChannel      internal class XMLTVChannel : XMLTVBase<XMLTVRuntimeInstance>, IXMLTVChannel
15      {      {
16          public XMLTVChannel()          public XMLTVChannel()
17                : base(null, XMLTVConstants.Channels.RootElement)
18          {          {
19                InternalDictionaryAddKnownProperties();
20              Id = string.Empty;              Id = string.Empty;
21              Number = 0;              //Number = 0;
22              CallSign = string.Empty;              //CallSign = string.Empty;
23              Name = string.Empty;              //Name = string.Empty;
24          }          }
25          public XMLTVChannel(XElement e)          public XMLTVChannel(XMLTVRuntimeInstance instance, XElement node)
26              : this()              : base(instance, XMLTVConstants.Channels.RootElement)
27          {          {
28              // get the channel id              InternalDictionaryAddKnownProperties();
29              Id = e.Attribute(XMLTVConstants.Channels.ChannelId).Value;              try
30              xmltv_logger.Verbose.Debug.WriteLine("\tchannel_id: {0}", Id);              {
31              var names = e.Descendants(XMLTVConstants.Channels.ChannelDisplayName).ToList();                  xmltv_logger.Verbose.Debug.WriteLine("Creating Instance of XMLTVChannel");
32              Number = Convert.ToInt32(names[1].Value);                  Create(node);
33              xmltv_logger.Verbose.Debug.WriteLine("\tchannel_number: {0}", Number);                  xmltv_logger.Verbose.Debug.WriteLine("Created Instance of XMLTVChannel");
34              CallSign = names[2].Value;                  UpdateInstance();
35              xmltv_logger.Verbose.Debug.WriteLine("\tchannel_callsign: {0}", CallSign);              }
36              Name = names[3].Value;              catch (IOException ex) { Debug.WriteLine(ex.ToString()); }
37              xmltv_logger.Verbose.Debug.WriteLine("\tchannel_name: {0}", Name);          }
38            private void InternalDictionaryAddKnownProperties()
39            {
40                MetaData = new PropertyList();
41                //MetaData.AddProperty("Id", string.Empty);
42          }          }
43          #region IXMLTVChannel members          #region IXMLTVChannel members
44          public string Id { get; private set; }          public string Id { get; private set; }
45          public int Number { get; private set; }          //public int Number { get; private set; }
46          public string CallSign { get; private set; }          //public string CallSign { get; private set; }
47          public string Name { get; private set; }          //public string Name { get; private set; }
48            private PropertyList _MetaData;
49            public PropertyList MetaData { get { return _MetaData; } private set { _MetaData = value; } }
50          #endregion          #endregion
51          public override string ToString()          public override string ToString()
52          {          {
53              return string.Format("{0}: {1} {2} ({3})", Id, Number, Name, CallSign);              return string.Format("{0}", Id);
54            }
55    
56            private void UpdateInstance()
57            {
58                bool found_field = false;
59                var instance_type = this.GetInstance().GetType();
60                var fields = instance_type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
61                foreach (var field in fields)
62                {
63                    if (field.FieldType == typeof(List<IXMLTVChannel>))
64                    {
65                        found_field = true;
66                        try
67                        {
68                            var list = (List<IXMLTVChannel>)field.GetValue(this.GetInstance());
69                            list.Add(this);
70                            xmltv_logger.Verbose.Debug.WriteLine("Updating instance with channel information: {0}", this.ToString());
71                            field.SetValue(this.GetInstance(), list);
72                            break;
73                        }
74                        catch (Exception ex)
75                        {
76                            xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with channel information.");
77                            xmltv_logger.Verbose.Error.WriteLine(ex.ToString());
78                        }
79                    }
80                }
81                if (!found_field)
82                {
83                    xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with channel information.");
84                }
85            }
86    
87            private void Create(XElement node)
88            {
89                //throw new NotImplementedException("Channel.Create(node) is not currently implemented.");
90                // get the channel id
91                Id = node.Attribute(XMLTVConstants.Channels.ChannelId).Value;
92                xmltv_logger.Verbose.Debug.WriteLine("\tchannel_id: {0}", Id);
93                var names = node.Elements().ToList();
94    
95                foreach (var name in names)
96                {
97                    PropertyValuePair p = new PropertyValuePair(name.Name.ToString(), name.Value);
98                    MetaData.AddProperty(p.Name,p.Value);
99                    xmltv_logger.Verbose.Debug.WriteLine("\t{0}: {1}", p.Name, p.Value);
100                }
101    
102          }          }
103      }      }
104    

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

  ViewVC Help
Powered by ViewVC 1.1.22