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

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

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

revision 74 by william, Sat Mar 9 11:06:39 2013 UTC revision 78 by william, Sat Mar 9 11:36:24 2013 UTC
# Line 5  using System.Text; Line 5  using System.Text;
5  using libxmltv.Interfaces;  using libxmltv.Interfaces;
6  using System.Xml.Linq;  using System.Xml.Linq;
7  using System.Reflection;  using System.Reflection;
8    using System.IO;
9    using System.Diagnostics;
10    
11  namespace libxmltv.Core  namespace libxmltv.Core
12  {  {
# Line 24  namespace libxmltv.Core Line 26  namespace libxmltv.Core
26          public XMLTVProgram(XMLTVRuntimeInstance instance, XElement node)          public XMLTVProgram(XMLTVRuntimeInstance instance, XElement node)
27              : base(instance, XMLTVConstants.PROGRAM_ELEMENT)              : base(instance, XMLTVConstants.PROGRAM_ELEMENT)
28          {          {
29                try {
30              xmltv_logger.Verbose.Debug.WriteLine("Creating Instance of XMLTVProgram");              xmltv_logger.Verbose.Debug.WriteLine("Creating Instance of XMLTVProgram");
31              // do the work here              Create(node);
32              xmltv_logger.Verbose.Debug.WriteLine("Created Instance of XMLTVProgram");              xmltv_logger.Verbose.Debug.WriteLine("Created Instance of XMLTVProgram");
33              //UpdateInstance();              UpdateInstance();
34                }
35                catch (IOException ex) { Debug.WriteLine(ex.ToString()); }
36          }          }
37          #region IXMLTVProgram members          #region IXMLTVProgram members
38          public int Id { get; set; }          public int Id { get; set; }
# Line 50  namespace libxmltv.Core Line 55  namespace libxmltv.Core
55              var fields = instance_type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);              var fields = instance_type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
56              foreach (var field in fields)              foreach (var field in fields)
57              {              {
58                  if (field.FieldType == typeof(List<IXMLTVChannel>))                  if (field.FieldType == typeof(List<IXMLTVProgram>))
59                  {                  {
60                      found_field = true;                      found_field = true;
61                      try                      try
62                      {                      {
63                          xmltv_logger.Verbose.Debug.WriteLine("Updating instance with program information: {0}", this.ToString());                          
                         //field.SetValue(this.GetInstance(), new List<IXMLTVChannel>() { this });  
   
64                          var list = (List<IXMLTVProgram>)field.GetValue(this.GetInstance());                          var list = (List<IXMLTVProgram>)field.GetValue(this.GetInstance());
65                            this.Id = list.Count + 1;
66                          list.Add(this);                          list.Add(this);
67                            xmltv_logger.Verbose.Debug.WriteLine("Updating instance with program information: {0}", this.ToString());
68                          field.SetValue(this.GetInstance(), list);                          field.SetValue(this.GetInstance(), list);
69                          break;                          break;
70                      }                      }
# Line 75  namespace libxmltv.Core Line 80  namespace libxmltv.Core
80                  xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with program information.");                  xmltv_logger.Verbose.Error.WriteLine("Unable to update instance with program information.");
81              }              }
82          }          }
83    
84            private void Create(XElement node)
85            {
86                if (node.HasAttributes)
87                {
88                    var start = node.Attribute(XMLTVConstants.Programs.ProgramStart);
89                    this.Start = start == null ? new DateTime() : ParseDate(start.Value);
90                    if (!this.Start.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_start: {0}", start); }
91    
92                    var stop = node.Attribute(XMLTVConstants.Programs.ProgramStop);
93                    this.Stop = stop == null ? new DateTime() : ParseDate(stop.Value);
94                    if (!this.Stop.Equals(new DateTime())) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_stop: {0}", stop); }
95    
96                    var channelid = node.Attribute(XMLTVConstants.Programs.ProgramChannelId);
97                    if (!string.IsNullOrEmpty(this.Description)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channelid: {0}", channelid); }
98                    IXMLTVChannel channel = new XMLTVChannel();
99                    string _channelid = channelid == null ? string.Empty : channelid.Value;
100                    this.Channel = this.GetInstance().Channels.Find(m => m.Id == _channelid);
101                    if (this.Channel == null) { this.Channel = new XMLTVChannel(); }
102                    if (!string.IsNullOrEmpty(_channelid)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_channel: {0}", this.Channel.ToString()); }
103                }
104                try
105                {
106                    var title = node.Descendants(XMLTVConstants.Programs.ProgramTitle).FirstOrDefault();
107                    this.Title = title == null ? string.Empty : title.Value;
108                }
109                catch (Exception) { this.Title = string.Empty; }
110                if (!string.IsNullOrEmpty(this.Title)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_title: {0}", this.Title == string.Empty ? "empty" : this.Title); }
111                try
112                {
113                    var subtitle = node.Descendants(XMLTVConstants.Programs.ProgramSubTitle).FirstOrDefault();
114                    this.SubTitle = subtitle == null ? string.Empty : subtitle.Value;
115                }
116                catch (Exception) { this.SubTitle = string.Empty; }
117                if (!string.IsNullOrEmpty(this.SubTitle)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_subtitle: {0}", this.SubTitle == string.Empty ? "empty" : this.SubTitle); }
118                try
119                {
120                    var description = node.Descendants(XMLTVConstants.Programs.ProgramDescription).FirstOrDefault();
121                    this.Description = description == null ? string.Empty : description.Value; ;
122                }
123                catch (Exception) { this.Description = string.Empty; }
124                if (!string.IsNullOrEmpty(this.Description)) { xmltv_logger.Verbose.Debug.WriteLine("\tprogram_description: {0}", this.Description == string.Empty ? "empty" : this.Description); }
125    
126                //entries.Add(program.Id, program);
127                //program_index++;
128                //progress = 100.0 * (program_index / program_count);
129                //xmltv_logger.ReportProgress(this, new Enterprise.Logging.ReportProgressEventArgs((int)progress));
130                //Application.DoEvents();
131            }
132            private DateTime ParseDate(string timeStamp)
133            {
134                DateTime dt = new DateTime();
135                try
136                {
137                    dt = DateTime.ParseExact(timeStamp, "yyyyMMddHHmmss zzzz", System.Globalization.CultureInfo.CurrentCulture);
138                }
139                catch (Exception ex) { throw ex; }
140                return dt;
141            }
142      }      }
143  }  }

Legend:
Removed from v.74  
changed lines
  Added in v.78

  ViewVC Help
Powered by ViewVC 1.1.22