/[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

--- trunk/libxmltv/Core/XMLTVSource.cs	2013/03/08 04:01:25	46
+++ trunk/libxmltv/Core/XMLTVSource.cs	2013/03/09 14:52:10	88
@@ -4,32 +4,77 @@
 using System.Text;
 using libxmltv.Interfaces;
 using System.Diagnostics;
+using System.Xml.Linq;
+using System.Reflection;
+using System.IO;
 
 namespace libxmltv.Core
 {
     [Serializable]
-    internal class XMLTVSource : IXMLTVSource, IDisposable, ICloneable
+    internal class XMLTVSource : XMLTVBase<XMLTVRuntimeInstance>, IXMLTVSource, IDisposable//, ICloneable
     {
+       
         private Dictionary<string, string> entries = new Dictionary<string, string>();
-        internal static void CreateInstance(XMLTVRuntimeInstance xmltv)
-        {
-            using (XMLTVSource g = new XMLTVSource(xmltv)) { g.instance.Source = (IXMLTVSource)g.Clone(); }
+        //internal static void CreateInstance(XMLTVRuntimeInstance xmltv)
+        //{
+        //    using (XMLTVSource g = new XMLTVSource(xmltv)) { g.instance.Source = (IXMLTVSource)g.Clone(); }
+        //}
+
+        //private XMLTVRuntimeInstance instance;
+        //protected XMLTVSource(string sourcename, string generatorname, string generatorurl)
+        //{
+        //    this.SourceName = sourcename;
+        //    this.GeneratorName = generatorname;
+        //    this.GeneratorUrl = generatorurl;
+        //}
+        public XMLTVSource()
+            : base(null, XMLTVConstants.Root.RootElement) 
+        {
+            this.SourceName = string.Empty;
+            this.GeneratorName = string.Empty;
+            this.GeneratorUrl = string.Empty;
         }
-
-        private XMLTVRuntimeInstance instance;
-        protected XMLTVSource(string sourcename, string generatorname, string generatorurl)
+        public XMLTVSource(XMLTVRuntimeInstance instance)
+            : base(instance, XMLTVConstants.Root.RootElement)
         {
+            try {
+            xmltv_logger.Verbose.Debug.WriteLine("Creating Instance of XMLTVSource");
+            Create();
+            xmltv_logger.Verbose.Debug.WriteLine("Created Instance of XMLTVSource '{0}'", SourceName);
+            UpdateInstance();
+            }
+            catch (IOException ex) { Debug.WriteLine(ex.ToString()); }
         }
-        protected XMLTVSource(XMLTVRuntimeInstance xmltv)
+
+        private void UpdateInstance()
         {
-            xmltv_logger.Log.Verbose.Debug.WriteLine("Creating Instance of XMLTVSource");
-            //IXMLTV_PARSER _xmltv;
-            //if (!Internals.VerifyInstance<IXMLTV_PARSER>(xmltv, out _xmltv)) { return; }
-            //XMLTV_PARSER = _xmltv;
-            instance = xmltv;
-            Create();
+            bool found_field = false;
+            var instance_type = this.GetInstance().GetType();
+            var fields = instance_type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+            foreach (var field in fields)
+            {
+                if (field.FieldType == typeof(IXMLTVSource))
+                {
+                    found_field = true;
+                    try
+                    {
+                        xmltv_logger.Verbose.Debug.WriteLine("Updating instance with source information: {0}", this.ToString());
+                        field.SetValue(this.GetInstance(), this);                        
+                        break;
+                    }
+                    catch (Exception ex)
+                    {
+                        xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with source information.");
+                        xmltv_logger.Verbose.Error.WriteLine(ex.ToString());
+                    }
+                }
+            }
+            if (!found_field)
+            {
+                xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with source information.");
+            }
         }
-       
+
         #region IXMLTVSource
         //private IXMLTV_PARSER XMLTV_PARSER { get; set; }
         public string SourceName { get; private set; }
@@ -39,13 +84,13 @@
 
         private void Create()
         {
-            var doc = instance.XmlDoc;
-            Debug.Assert(doc.Root.Name == XMLTVConstants.ROOT_ELEMENT, string.Format("Expected Root Element: '{0}' but read: '{1}'", XMLTVConstants.ROOT_ELEMENT, doc.Root.Name));
-            //xmltv_logger.Log.Verbose.Debug.WriteLine("\tRoot: {0}", doc.Root.Name);
+            var doc = XDocument.Parse(this.GetInstance().XmlDoc);
+            Debug.Assert(doc.Root.Name == XMLTVConstants.Root.RootElement, string.Format("Expected Root Element: '{0}' but read: '{1}'", XMLTVConstants.Root.RootElement, doc.Root.Name));
+            //xmltv_logger.Verbose.Debug.WriteLine("\tRoot: {0}", doc.Root.Name);
             var attributes = doc.Root.Attributes().ToList();
             foreach (var attribute in attributes)
             {
-                //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);
                 entries.Add(attribute.Name.ToString(), attribute.Value);
             }
 
@@ -64,9 +109,9 @@
             //throw new NotImplementedException();
         }
 
-        public object Clone()
-        {
-            return new XMLTVSource(this.SourceName, this.GeneratorName, this.GeneratorUrl);
-        }
+        //public object Clone()
+        //{
+        //    return new XMLTVSource(this.SourceName, this.GeneratorName, this.GeneratorUrl);
+        //}
     }
 }

 

  ViewVC Help
Powered by ViewVC 1.1.22