--- trunk/libxmltv/Core/XMLTVSource.cs 2013/03/09 09:29:40 72 +++ trunk/libxmltv/Core/XMLTVSource.cs 2013/03/09 14:52:10 88 @@ -5,6 +5,8 @@ using libxmltv.Interfaces; using System.Diagnostics; using System.Xml.Linq; +using System.Reflection; +using System.IO; namespace libxmltv.Core { @@ -25,19 +27,54 @@ // this.GeneratorName = generatorname; // this.GeneratorUrl = generatorurl; //} - public XMLTVSource() : base(null) + public XMLTVSource() + : base(null, XMLTVConstants.Root.RootElement) { this.SourceName = string.Empty; this.GeneratorName = string.Empty; this.GeneratorUrl = string.Empty; } - public XMLTVSource(XMLTVRuntimeInstance instance) : base(instance) + public XMLTVSource(XMLTVRuntimeInstance instance) + : base(instance, XMLTVConstants.Root.RootElement) { - xmltv_logger.Debug.WriteLine("Creating Instance of XMLTVSource"); + try { + xmltv_logger.Verbose.Debug.WriteLine("Creating Instance of XMLTVSource"); Create(); - xmltv_logger.Debug.WriteLine("Created Instance of XMLTVSource '{0}'", SourceName); + xmltv_logger.Verbose.Debug.WriteLine("Created Instance of XMLTVSource '{0}'", SourceName); + UpdateInstance(); + } + catch (IOException ex) { Debug.WriteLine(ex.ToString()); } } - + + private void UpdateInstance() + { + 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; } @@ -48,7 +85,7 @@ private void Create() { var doc = XDocument.Parse(this.GetInstance().XmlDoc); - 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.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)