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

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

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

revision 36 by william, Fri Mar 8 02:13:59 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.Diagnostics;  using System.Diagnostics;
7    using System.Xml.Linq;
8    using System.Reflection;
9    
10  namespace libxmltv.Core  namespace libxmltv.Core
11  {  {
12      [Serializable]      [Serializable]
13      internal class XMLTVSource : IXMLTVSource      internal class XMLTVSource : XMLTVBase<XMLTVRuntimeInstance>, IXMLTVSource, IDisposable//, ICloneable
14      {      {
15          
16          private Dictionary<string, string> entries = new Dictionary<string, string>();          private Dictionary<string, string> entries = new Dictionary<string, string>();
17          private XMLTVRuntimeInstance instance;          //internal static void CreateInstance(XMLTVRuntimeInstance xmltv)
18          public XMLTVSource(XMLTVRuntimeInstance xmltv)          //{
19            //    using (XMLTVSource g = new XMLTVSource(xmltv)) { g.instance.Source = (IXMLTVSource)g.Clone(); }
20            //}
21    
22            //private XMLTVRuntimeInstance instance;
23            //protected XMLTVSource(string sourcename, string generatorname, string generatorurl)
24            //{
25            //    this.SourceName = sourcename;
26            //    this.GeneratorName = generatorname;
27            //    this.GeneratorUrl = generatorurl;
28            //}
29            public XMLTVSource()
30                : base(null, XMLTVConstants.ROOT_ELEMENT)
31          {          {
32              XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("Creating Instance of XMLTVSource");              this.SourceName = string.Empty;
33              //IXMLTV_PARSER _xmltv;              this.GeneratorName = string.Empty;
34              //if (!Internals.VerifyInstance<IXMLTV_PARSER>(xmltv, out _xmltv)) { return; }              this.GeneratorUrl = string.Empty;
35              //XMLTV_PARSER = _xmltv;          }
36              instance = xmltv;          public XMLTVSource(XMLTVRuntimeInstance instance) : base(instance, XMLTVConstants.ROOT_ELEMENT)
37            {
38                xmltv_logger.Verbose.Debug.WriteLine("Creating Instance of XMLTVSource");
39              Create();              Create();
40                xmltv_logger.Verbose.Debug.WriteLine("Created Instance of XMLTVSource '{0}'", SourceName);
41                UpdateInstance();
42          }          }
43          
44            private void UpdateInstance()
45            {
46                bool found_field = false;
47                var instance_type = this.GetInstance().GetType();
48                var fields = instance_type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
49                foreach (var field in fields)
50                {
51                    if (field.FieldType == typeof(IXMLTVSource))
52                    {
53                        found_field = true;
54                        try
55                        {
56                            xmltv_logger.Verbose.Debug.WriteLine("Updating instance with source information: {0}", this.ToString());
57                            field.SetValue(this.GetInstance(), this);                        
58                            break;
59                        }
60                        catch (Exception ex)
61                        {
62                            xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with source information.");
63                            xmltv_logger.Verbose.Error.WriteLine(ex.ToString());
64                        }
65                    }
66                }
67                if (!found_field)
68                {
69                    xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with source information.");
70                }
71            }
72    
73          #region IXMLTVSource          #region IXMLTVSource
74          //private IXMLTV_PARSER XMLTV_PARSER { get; set; }          //private IXMLTV_PARSER XMLTV_PARSER { get; set; }
75          public string SourceName { get { return entries[XMLTVConstants.Source.SourceName]; } }          public string SourceName { get; private set; }
76          public string GeneratorName { get { return entries[XMLTVConstants.Source.GeneratorName]; } }          public string GeneratorName { get; private set; }
77          public string GeneratorUrl { get { return entries[XMLTVConstants.Source.GeneratorUrl]; } }          public string GeneratorUrl { get; private set; }
78          #endregion          #endregion
79    
80          private void Create()          private void Create()
81          {          {
82              var doc = instance.XmlDoc;              var doc = XDocument.Parse(this.GetInstance().XmlDoc);
83              Debug.Assert(doc.Root.Name == XMLTVConstants.ROOT_ELEMENT, string.Format("Expected Root Element: '{0}' but read: '{1}'", XMLTVConstants.ROOT_ELEMENT, doc.Root.Name));              Debug.Assert(doc.Root.Name == XMLTVConstants.ROOT_ELEMENT, string.Format("Expected Root Element: '{0}' but read: '{1}'", XMLTVConstants.ROOT_ELEMENT, doc.Root.Name));
84              XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\tRoot: {0}", doc.Root.Name);              //xmltv_logger.Verbose.Debug.WriteLine("\tRoot: {0}", doc.Root.Name);
85              var attributes = doc.Root.Attributes().ToList();              var attributes = doc.Root.Attributes().ToList();
86              foreach (var attribute in attributes)              foreach (var attribute in attributes)
87              {              {
88                  //XMLTV_LOGGER.Log.Verbose.Debug.WriteLine("\t{0}: {1}", attribute.Name, attribute.Value);                  xmltv_logger.Verbose.Debug.WriteLine("\t{0}: {1}", attribute.Name, attribute.Value);
89                  entries.Add(attribute.Name.ToString(), attribute.Value);                  entries.Add(attribute.Name.ToString(), attribute.Value);
90              }              }
91    
92                SourceName = entries[XMLTVConstants.Source.SourceName];
93                GeneratorName = entries[XMLTVConstants.Source.GeneratorName];
94                GeneratorUrl = entries[XMLTVConstants.Source.GeneratorUrl];
95    
96          }          }
97          public override string ToString()          public override string ToString()
98          {          {
99              return string.Format("XmlTv Source: '{0}' (Generated by: '{1}') (support: '{2}')", SourceName, GeneratorName, GeneratorUrl);              return string.Format("XmlTv Source: '{0}' (Generated by: '{1}') (support: '{2}')", SourceName, GeneratorName, GeneratorUrl);
100          }          }
101    
102            public void Dispose()
103            {
104                //throw new NotImplementedException();
105            }
106    
107            //public object Clone()
108            //{
109            //    return new XMLTVSource(this.SourceName, this.GeneratorName, this.GeneratorUrl);
110            //}
111      }      }
112  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.22