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

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

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

revision 141 by william, Thu Mar 14 13:08:20 2013 UTC revision 254 by william, Wed Apr 17 21:55:30 2013 UTC
# Line 24  namespace libxmltv.Core Line 24  namespace libxmltv.Core
24              {              {
25              }              }
26              #endregion              #endregion
27    
28                
29          }          }
30          private class ChannelDefintion : IChannelDefintion          private class ChannelDefintion : IChannelDefintion
31          {          {
# Line 48  namespace libxmltv.Core Line 50  namespace libxmltv.Core
50                  }                  }
51                  return builder.ToString();                  return builder.ToString();
52              }              }
53    
54                private IXMLTVChannel _RawDataSource; public IXMLTVChannel RawDataSource { get { return _RawDataSource; } set { _RawDataSource = value; } }
55    
56    
57                public bool Equals(IChannelDefintion other)
58                {
59                    return this.ToString() == other.ToString();
60                }
61                public override bool Equals(object obj)
62                {
63                    if (obj == null) { throw new ArgumentNullException("obj", "Object to compare cannot be null"); }
64                    if (obj.GetType().IsAssignableFrom(typeof(IChannelDefintion)))
65                    {
66                        return this.Equals((IChannelDefintion)obj);
67                    }
68                    return base.Equals(obj);
69                }
70                public override int GetHashCode()
71                {
72                    return this.ToString().GetHashCode();
73                }
74    
75                            
76          }          }
77          //static private List<string> known_columns;          //static private List<string> known_columns;
# Line 84  namespace libxmltv.Core Line 108  namespace libxmltv.Core
108                  try                  try
109                  {                  {
110                      ChannelDefintion definition = new ChannelDefintion();                      ChannelDefintion definition = new ChannelDefintion();
111                        definition.RawDataSource = t;
112                      definition.ChannelId = t.Id;                      definition.ChannelId = t.Id;
113                      definition.ChannelName = t.MetaData[XMLTVConstants.Channels.ChannelDisplayName].FirstOrDefault().Value.ToString();                      definition.ChannelName = t.MetaData[XMLTVConstants.Channels.ChannelDisplayName].FirstOrDefault().Value.ToString();
114                      xmltv_logger.Verbose.Debug.WriteLine(definition.ToString());                      xmltv_logger.Verbose.Debug.WriteLine(definition.ToString());
# Line 116  namespace libxmltv.Core Line 141  namespace libxmltv.Core
141                      {                      {
142                          case "channelnumber": ordered = descending ? list.OrderByDescending(s => s.ChannelNumber) : list.OrderBy(s => s.ChannelNumber); break;                          case "channelnumber": ordered = descending ? list.OrderByDescending(s => s.ChannelNumber) : list.OrderBy(s => s.ChannelNumber); break;
143                          case "channelname": ordered = descending ? list.OrderByDescending(s => s.ChannelName) : list.OrderBy(s => s.ChannelName); break;                          case "channelname": ordered = descending ? list.OrderByDescending(s => s.ChannelName) : list.OrderBy(s => s.ChannelName); break;
144                          case "start": ordered = descending ? list.OrderByDescending(s => s.Start) : list.OrderBy(s => s.Start); break;                          case "start": ordered = descending ? list.OrderByDescending(s => DateTime.Parse(s.Start)) : list.OrderBy(s => DateTime.Parse(s.Start)); break;
145                          case "stop": ordered = descending ? list.OrderByDescending(s => s.Stop) : list.OrderBy(s => s.Stop); break;                          case "stop": ordered = descending ? list.OrderByDescending(s => DateTime.Parse(s.Stop)) : list.OrderBy(s => DateTime.Parse(s.Stop)); break;
146                          case "description": ordered = descending ? list.OrderByDescending(s => s.Description) : list.OrderBy(s => s.Description); break;                          case "description": ordered = descending ? list.OrderByDescending(s => s.Description) : list.OrderBy(s => s.Description); break;
147                          case "title": ordered = descending ? list.OrderByDescending(s => s.Title) : list.OrderBy(s => s.Title); break;                          case "title": ordered = descending ? list.OrderByDescending(s => s.Title) : list.OrderBy(s => s.Title); break;
148                          case "subtitle": ordered = descending ? list.OrderByDescending(s => s.SubTitle) : list.OrderBy(s => s.SubTitle); break;                          case "subtitle": ordered = descending ? list.OrderByDescending(s => s.SubTitle) : list.OrderBy(s => s.SubTitle); break;
149                            case "rating": ordered = descending ? list.OrderByDescending(s => s.Rating) : list.OrderBy(s => s.Rating); break;
150                      }                      }
151                      //bool first = true;                      //bool first = true;
152                      foreach (var arg in args.Skip(1))                      foreach (var arg in args.Skip(1))
# Line 130  namespace libxmltv.Core Line 156  namespace libxmltv.Core
156                          {                          {
157                              case "channelnumber": ordered = descending ? ordered.ThenByDescending(s => s.ChannelNumber) : ordered.ThenBy(s => s.ChannelNumber); break;                              case "channelnumber": ordered = descending ? ordered.ThenByDescending(s => s.ChannelNumber) : ordered.ThenBy(s => s.ChannelNumber); break;
158                              case "channelname": ordered = descending ? list.OrderByDescending(s => s.ChannelName) : list.OrderBy(s => s.ChannelName); break;                              case "channelname": ordered = descending ? list.OrderByDescending(s => s.ChannelName) : list.OrderBy(s => s.ChannelName); break;
159                              case "start": ordered = descending ? ordered.ThenByDescending(s => s.Start) : ordered.ThenBy(s => s.Start); break;                              case "start": ordered = descending ? ordered.ThenByDescending(s => DateTime.Parse(s.Start)) : ordered.ThenBy(s => DateTime.Parse(s.Start)); break;
160                              case "stop": ordered = descending ? ordered.ThenByDescending(s => s.Stop) : ordered.ThenBy(s => s.Stop); break;                              case "stop": ordered = descending ? ordered.ThenByDescending(s => DateTime.Parse(s.Stop)) : ordered.ThenBy(s => DateTime.Parse(s.Stop)); break;
161                              case "description": ordered = descending ? ordered.ThenByDescending(s => s.Description) : ordered.ThenBy(s => s.Description); break;                              case "description": ordered = descending ? ordered.ThenByDescending(s => s.Description) : ordered.ThenBy(s => s.Description); break;
162                              case "title": ordered = descending ? ordered.ThenByDescending(s => s.Title) : ordered.ThenBy(s => s.Title); break;                              case "title": ordered = descending ? ordered.ThenByDescending(s => s.Title) : ordered.ThenBy(s => s.Title); break;
163                              case "subtitle": ordered = descending ? ordered.ThenByDescending(s => s.SubTitle) : ordered.ThenBy(s => s.SubTitle); break;                              case "subtitle": ordered = descending ? ordered.ThenByDescending(s => s.SubTitle) : ordered.ThenBy(s => s.SubTitle); break;
164                                case "rating": ordered = descending ? ordered.ThenByDescending(s => s.Rating) : ordered.ThenBy(s => s.Rating); break;
165                          }                          }
166                      }                      }
167                      list = new ProgramDefinitionList(ordered.ToList());                      list = new ProgramDefinitionList(ordered.ToList());
# Line 163  namespace libxmltv.Core Line 190  namespace libxmltv.Core
190                      {                      {
191                          case "channelnumber": ordered = list.ToList().FindAll(s => s.ChannelNumber == Convert.ToInt32(filtertext)); break;                          case "channelnumber": ordered = list.ToList().FindAll(s => s.ChannelNumber == Convert.ToInt32(filtertext)); break;
192                          case "channelname": ordered = list.ToList().FindAll(s => s.ChannelName.ToLower().Contains(filtertext)); break;                          case "channelname": ordered = list.ToList().FindAll(s => s.ChannelName.ToLower().Contains(filtertext)); break;
193                          case "start":                          case "start": ordered = list.ToList().FindAll(s => s.Start.ToLower().Contains(filtertext)); break;
194                          case "stop":                          case "stop": ordered = list.ToList().FindAll(s => s.Stop.ToLower().Contains(filtertext)); break;
                             throw new ArgumentException("columnname", string.Format("Filtering for column: '{0}' has not been implemented", columnname));  
195                          case "description": ordered = list.ToList().FindAll(s => s.Description.ToLower().Contains(filtertext)); break;                          case "description": ordered = list.ToList().FindAll(s => s.Description.ToLower().Contains(filtertext)); break;
196                          case "title": ordered = list.ToList().FindAll(s => s.Title.ToLower().Contains(filtertext)); break;                          case "title": ordered = list.ToList().FindAll(s => s.Title.ToLower().Contains(filtertext)); break;
197                          case "subtitle": ordered = list.ToList().FindAll(s => s.SubTitle.ToLower().Contains(filtertext)); break;                          case "subtitle": ordered = list.ToList().FindAll(s => s.SubTitle.ToLower().Contains(filtertext)); break;
198                            case "rating": ordered = list.ToList().FindAll(s => s.Rating.ToLower().Contains(filtertext)); break;
199                      }                                        }                  
200                      list = new ProgramDefinitionList(ordered.ToList());                      list = new ProgramDefinitionList(ordered.ToList());
201                      if (list.Count == 0)                      if (list.Count == 0)
# Line 181  namespace libxmltv.Core Line 208  namespace libxmltv.Core
208                  if (list != null) { source = list; }                  if (list != null) { source = list; }
209              }              }
210              #endregion              #endregion
211                
212          }          }
213          private class ProgramDefintion : IProgramDefinition          public class ProgramDefintion : IProgramDefinition, IEquatable<IProgramDefinition>
214          {          {
215              public ProgramDefintion()              public ProgramDefintion()
216              {              {
# Line 194  namespace libxmltv.Core Line 222  namespace libxmltv.Core
222                  Description = string.Empty;                  Description = string.Empty;
223                  Title = string.Empty;                  Title = string.Empty;
224                  SubTitle = string.Empty;                  SubTitle = string.Empty;
225                    Rating = string.Empty;
226              }              }
227              //public string ChannelId { get; internal set; }              //public string ChannelId { get; internal set; }
228              public int ChannelNumber { get; internal set; }              public int ChannelNumber { get; set; }
229              public string ChannelName { get; internal set; }              public string ChannelName { get; set; }
230              public string Start { get; internal set; }              public string Start { get; set; }
231              public string Stop { get; internal set; }              public string Stop { get; set; }
232              public string Title { get; internal set; }              public string Title { get; set; }
233              public string SubTitle { get; internal set; }              public string SubTitle { get; set; }
234              public string Description { get; internal set; }              public string Description { get; set; }
235                public string Rating { get; set; }
236              public override string ToString()              public override string ToString()
237              {              {
238                  StringBuilder builder = new StringBuilder();                  StringBuilder builder = new StringBuilder();
# Line 217  namespace libxmltv.Core Line 246  namespace libxmltv.Core
246                  }                  }
247                  return builder.ToString();                  return builder.ToString();
248              }              }
249              
250                private IXMLTVProgram _RawDataSource; public IXMLTVProgram RawDataSource { get { return _RawDataSource; } set { _RawDataSource = value; } }
251    
252                public bool Equals(IProgramDefinition other)
253                {
254                    return this.ToString() == other.ToString();
255                }
256                public override bool Equals(object obj)
257                {
258                    if (obj == null) { throw new ArgumentNullException("obj", "Object to compare cannot be null"); }
259                    if (obj.GetType().IsAssignableFrom(typeof(IProgramDefinition)))
260                    {
261                        return this.Equals((IProgramDefinition)obj);
262                    }
263                    return base.Equals(obj);
264                }
265                public override int GetHashCode()
266                {
267                    return this.ToString().GetHashCode();
268                }
269          }          }
270          public ProgramList() { }          public ProgramList() { }
271          //public object ConvertObjectData(object source) { return this.ConvertData(source); }          //public object ConvertObjectData(object source) { return this.ConvertData(source); }
# Line 244  namespace libxmltv.Core Line 292  namespace libxmltv.Core
292                  try                  try
293                  {                  {
294                      ProgramDefintion definition = new ProgramDefintion();                      ProgramDefintion definition = new ProgramDefintion();
295                        definition.RawDataSource = t;
296                      string ChannelId = t.MetaData[XMLTVConstants.Programs.ProgramChannelId].ToString();                      string ChannelId = t.MetaData[XMLTVConstants.Programs.ProgramChannelId].ToString();
297                      //definition.ChannelId = ChannelId;                      //definition.ChannelId = ChannelId;
298    
# Line 274  namespace libxmltv.Core Line 323  namespace libxmltv.Core
323                      definition.Title = t.MetaData[XMLTVConstants.Programs.ProgramTitle].ToString();                      definition.Title = t.MetaData[XMLTVConstants.Programs.ProgramTitle].ToString();
324                      definition.SubTitle = t.MetaData[XMLTVConstants.Programs.ProgramSubTitle].ToString();                      definition.SubTitle = t.MetaData[XMLTVConstants.Programs.ProgramSubTitle].ToString();
325    
326                        
327                        var extras = t.GetExtraMetaData();
328                        foreach (var extra in extras)
329                        {
330                            if (extra.Name.ToLower() == "rating")
331                            {
332                                var root = extra.AsXElement();
333                                var child = root.Descendants("value").FirstOrDefault();
334                                if (child == null) { throw new NullReferenceException("Expected rating element to have a child elemented named: value"); }
335                                string value = child.Value;
336                                definition.Rating = value;
337                            }
338                        }
339                      xmltv_logger.Verbose.Debug.WriteLine(definition.ToString());                      xmltv_logger.Verbose.Debug.WriteLine(definition.ToString());
340                      list.Add(definition);                      list.Add(definition);
341                  }                  }
342                  catch (Exception ex) { throw ex; }                  catch (Exception ex) { throw ex; }
343              }              }
344    
345              list = new ProgramDefinitionList(list.OrderBy(s => s.Start).ToList());              list = new ProgramDefinitionList(list.OrderBy(s => DateTime.Parse(s.Start)).ToList());
346    
347              bindable = list;              bindable = list;
348              return bindable;              return bindable;

Legend:
Removed from v.141  
changed lines
  Added in v.254

  ViewVC Help
Powered by ViewVC 1.1.22