/[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 130 by william, Wed Mar 13 14:39:08 2013 UTC revision 141 by william, Thu Mar 14 13:08:20 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.Collections;  using System.Collections;
7    using Enterprise.Logging;
8    
9  namespace libxmltv.Core  namespace libxmltv.Core
10  {  {
# Line 14  namespace libxmltv.Core Line 15  namespace libxmltv.Core
15              public ChannelDefintionList() { }              public ChannelDefintionList() { }
16              public ChannelDefintionList(List<IChannelDefintion> collection) { collection.ForEach(s => this.Add(s)); }              public ChannelDefintionList(List<IChannelDefintion> collection) { collection.ForEach(s => this.Add(s)); }
17              #region IDataSourceSortable members              #region IDataSourceSortable members
18              public void Sort(ref object source, params string[] args)              public void Sort(ref object source, bool descending, params string[] args)
19              {              {
20              }              }
21              #endregion              #endregion
# Line 34  namespace libxmltv.Core Line 35  namespace libxmltv.Core
35              public string ChannelId { get; internal set; }              public string ChannelId { get; internal set; }
36              public string ChannelName { get; internal set; }              public string ChannelName { get; internal set; }
37    
38                public override string ToString()
39                {
40                    StringBuilder builder = new StringBuilder();
41                    Type t = typeof(ChannelDefintion);
42                    var props = t.GetProperties();
43                    foreach (var prop in props)
44                    {
45                        string name = prop.Name;
46                        object value = prop.GetValue(this, null);
47                        builder.AppendFormat("\t{0}: '{1}'", name, value == null ? "null" : value.ToString());
48                    }
49                    return builder.ToString();
50                }
51                            
52          }          }
53          //static private List<string> known_columns;          //static private List<string> known_columns;
# Line 71  namespace libxmltv.Core Line 85  namespace libxmltv.Core
85                  {                  {
86                      ChannelDefintion definition = new ChannelDefintion();                      ChannelDefintion definition = new ChannelDefintion();
87                      definition.ChannelId = t.Id;                      definition.ChannelId = t.Id;
88                      definition.ChannelName = t.MetaData[XMLTVConstants.Channels.ChannelDisplayName].FirstOrDefault().Value.ToString();                                          definition.ChannelName = t.MetaData[XMLTVConstants.Channels.ChannelDisplayName].FirstOrDefault().Value.ToString();
89                        xmltv_logger.Verbose.Debug.WriteLine(definition.ToString());
90                      list.Add(definition);                      list.Add(definition);
91                  }                  }
92                  catch (Exception ex) { throw ex; }                  catch (Exception ex) { throw ex; }
# Line 89  namespace libxmltv.Core Line 104  namespace libxmltv.Core
104              public ProgramDefinitionList() { }              public ProgramDefinitionList() { }
105              public ProgramDefinitionList(List<IProgramDefinition> collection) { collection.ForEach(s => this.Add(s)); }              public ProgramDefinitionList(List<IProgramDefinition> collection) { collection.ForEach(s => this.Add(s)); }
106              #region IDataSourceSortable members              #region IDataSourceSortable members
107              public void Sort(ref object source, params string[] args)              public void Sort(ref object source, bool descending, params string[] args)
108              {              {
109                  List<IProgramDefinition> list = null;                  IProgramDefinitionList list = null;
110                  IOrderedEnumerable<IProgramDefinition> ordered = null;                  IOrderedEnumerable<IProgramDefinition> ordered = null;
111                  try                  try
112                  {                  {
113                      list = (ProgramDefinitionList)source;                      list = (ProgramDefinitionList)source;
114                      ordered = list.OrderBy(s => s);                      var col = args.First().ToString().ToLower();
115                        switch (col)
116                      foreach (object arg in args)                      {
117                            case "channelnumber": ordered = descending ? list.OrderByDescending(s => s.ChannelNumber) : list.OrderBy(s => s.ChannelNumber); break;
118                            case "channelname": ordered = descending ? list.OrderByDescending(s => s.ChannelName) : list.OrderBy(s => s.ChannelName); break;
119                            case "start": ordered = descending ? list.OrderByDescending(s => s.Start) : list.OrderBy(s => s.Start); break;
120                            case "stop": ordered = descending ? list.OrderByDescending(s => s.Stop) : list.OrderBy(s => s.Stop); break;
121                            case "description": ordered = descending ? list.OrderByDescending(s => s.Description) : list.OrderBy(s => s.Description); break;
122                            case "title": ordered = descending ? list.OrderByDescending(s => s.Title) : list.OrderBy(s => s.Title); break;
123                            case "subtitle": ordered = descending ? list.OrderByDescending(s => s.SubTitle) : list.OrderBy(s => s.SubTitle); break;
124                        }
125                        //bool first = true;
126                        foreach (var arg in args.Skip(1))
127                      {                      {
128                          var col = arg.ToString().ToLower();                          col = arg.ToLower();
129                          switch (col)                          switch (col)
130                          {                          {
131                              case "channelname": ordered = ordered.ThenBy(s => s.ChannelName); break;                              case "channelnumber": ordered = descending ? ordered.ThenByDescending(s => s.ChannelNumber) : ordered.ThenBy(s => s.ChannelNumber); break;
132                              case "start": ordered = ordered.ThenBy(s => s.Start); break;                              case "channelname": ordered = descending ? list.OrderByDescending(s => s.ChannelName) : list.OrderBy(s => s.ChannelName); break;
133                              case "stop": ordered = ordered.ThenBy(s => s.Stop); break;                              case "start": ordered = descending ? ordered.ThenByDescending(s => s.Start) : ordered.ThenBy(s => s.Start); break;
134                              case "description": ordered = ordered.ThenBy(s => s.Description); break;                              case "stop": ordered = descending ? ordered.ThenByDescending(s => s.Stop) : ordered.ThenBy(s => s.Stop); break;
135                              case "title": ordered = ordered.ThenBy(s => s.Title); break;                              case "description": ordered = descending ? ordered.ThenByDescending(s => s.Description) : ordered.ThenBy(s => s.Description); break;
136                              case "subtitle": ordered = ordered.ThenBy(s => s.SubTitle); break;                              case "title": ordered = descending ? ordered.ThenByDescending(s => s.Title) : ordered.ThenBy(s => s.Title); break;
137                                case "subtitle": ordered = descending ? ordered.ThenByDescending(s => s.SubTitle) : ordered.ThenBy(s => s.SubTitle); break;
138                          }                          }
139                      }                      }
140                        list = new ProgramDefinitionList(ordered.ToList());
                     var k = ordered.ToList();  
                       
                     //list = new ProgramDefinitionList(ordered.ToList()).ToList();  
                     //var col = args[0].ToLower();  
                     //switch (col)  
                     //{  
                     //    case "channelname": list =new ProgramDefinitionList( list.OrderBy(s => s.ChannelName).ToList()); break;  
                     //    case "start": list = new ProgramDefinitionList( list.OrderBy(s => s.Start).ToList()); break;  
                     //    case "stop": list = new ProgramDefinitionList( list.OrderBy(s => s.Stop).ToList()); break;  
                     //    case "description": list = new ProgramDefinitionList( list.OrderBy(s => s.Description).ToList()); break;  
                     //    case "title": list = new ProgramDefinitionList( list.OrderBy(s => s.Title).ToList()); break;  
                     //    case "subtitle": list = new ProgramDefinitionList(list.OrderBy(s => s.SubTitle).ToList()); break;  
                     //}  
   
141                  }                  }
142                  catch (Exception ex) { throw ex; }                  catch (Exception ex) { throw ex; }
143                  if (list != null) { source = list; }                  if (list != null) { source = list; }
# Line 134  namespace libxmltv.Core Line 146  namespace libxmltv.Core
146              #region IDataSourceFilterable members              #region IDataSourceFilterable members
147              public void Filter(ref object source, params string[] args)              public void Filter(ref object source, params string[] args)
148              {              {
149                    IProgramDefinitionList list = null;
150                    List<IProgramDefinition> ordered = null;
151                    try
152                    {
153                        list = (ProgramDefinitionList)source;
154                        //var col = args.First().ToString().ToLower();
155                        //var data = args.().ToString().ToLower();
156    
157                        if (args.Count() != 2) { throw new ArgumentOutOfRangeException("args", "Excpected 2 aguments: columnname and filtertext"); }
158    
159                        string columnname = args[0].ToLower();
160                        string filtertext = args[1].ToLower();
161    
162                        switch (columnname)
163                        {
164                            case "channelnumber": ordered = list.ToList().FindAll(s => s.ChannelNumber == Convert.ToInt32(filtertext)); break;
165                            case "channelname": ordered = list.ToList().FindAll(s => s.ChannelName.ToLower().Contains(filtertext)); break;
166                            case "start":
167                            case "stop":
168                                throw new ArgumentException("columnname", string.Format("Filtering for column: '{0}' has not been implemented", columnname));
169                            case "description": ordered = list.ToList().FindAll(s => s.Description.ToLower().Contains(filtertext)); break;
170                            case "title": ordered = list.ToList().FindAll(s => s.Title.ToLower().Contains(filtertext)); break;
171                            case "subtitle": ordered = list.ToList().FindAll(s => s.SubTitle.ToLower().Contains(filtertext)); break;
172                        }                  
173                        list = new ProgramDefinitionList(ordered.ToList());
174                        if (list.Count == 0)
175                        {
176                            list = (ProgramDefinitionList)source;
177                            gLog.Warn.WriteLine("Filering by: column='{0}' with filer='{1}' returned no data",columnname, filtertext);
178                        }
179                    }
180                    catch (Exception ex) { throw ex; }
181                    if (list != null) { source = list; }
182              }              }
183              #endregion              #endregion
184          }          }
# Line 142  namespace libxmltv.Core Line 187  namespace libxmltv.Core
187              public ProgramDefintion()              public ProgramDefintion()
188              {              {
189                  //ChannelId = string.Empty;                  //ChannelId = string.Empty;
190                    ChannelNumber = 0;
191                  ChannelName = string.Empty;                  ChannelName = string.Empty;
192                  Start = new DateTime();                  Start = new DateTime().ToDateTimeString();
193                  Stop = new DateTime();                  Stop = new DateTime().ToDateTimeString();
194                  Description = string.Empty;                  Description = string.Empty;
195                  Title = string.Empty;                  Title = string.Empty;
196                  SubTitle = string.Empty;                  SubTitle = string.Empty;
197              }              }
198              //public string ChannelId { get; internal set; }              //public string ChannelId { get; internal set; }
199                public int ChannelNumber { get; internal set; }
200              public string ChannelName { get; internal set; }              public string ChannelName { get; internal set; }
201              public DateTime Start { get; internal set; }              public string Start { get; internal set; }
202              public DateTime Stop { get; internal set; }              public string Stop { get; internal set; }
203              public string Title { get; internal set; }              public string Title { get; internal set; }
204              public string SubTitle { get; internal set; }              public string SubTitle { get; internal set; }
205              public string Description { get; internal set; }              public string Description { get; internal set; }
206    
207                public override string ToString()
208                {
209                    StringBuilder builder = new StringBuilder();
210                    Type t = typeof(ProgramDefintion);
211                    var props = t.GetProperties();
212                    foreach (var prop in props)
213                    {
214                        string name = prop.Name;
215                        object value = prop.GetValue(this, null);
216                        builder.AppendFormat("\t{0}: '{1}'", name, value == null ? "null" : value.ToString());
217                    }
218                    return builder.ToString();
219                }
220                        
221          }          }
222          public ProgramList() { }          public ProgramList() { }
# Line 193  namespace libxmltv.Core Line 253  namespace libxmltv.Core
253                          var channel = channels.Find(p => p.Id == ChannelId);                          var channel = channels.Find(p => p.Id == ChannelId);
254                          if (channel != null)                          if (channel != null)
255                          {                          {
256                              definition.ChannelName = channel.MetaData[XMLTVConstants.Channels.ChannelDisplayName].FirstOrDefault().Value.ToString();                              var channelname = channel.MetaData[XMLTVConstants.Channels.ChannelDisplayName].FirstOrDefault().Value.ToString();
257                                var split = channelname.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
258                                definition.ChannelNumber = Convert.ToInt32(split.First());
259                                definition.ChannelName = string.IsNullOrEmpty(split.Last()) ? string.Empty : split.Last().ToString();
260    
261                          }                          }
262                          else                          else
263                          {                          {
264                              definition.ChannelName = string.Empty;                              definition.ChannelNumber = 0;
265                          }                          }
266                      }                      }
267                      else                      else
268                      {                      {
269                          definition.ChannelName = string.Empty;                          definition.ChannelNumber = 0;
270                      }                      }
271                      definition.Start = (DateTime)t.MetaData[XMLTVConstants.Programs.ProgramStart];                      definition.Start = ((DateTime)t.MetaData[XMLTVConstants.Programs.ProgramStart]).ToDateTimeString();
272                      definition.Stop = (DateTime)t.MetaData[XMLTVConstants.Programs.ProgramStop];                      definition.Stop = ((DateTime)t.MetaData[XMLTVConstants.Programs.ProgramStop]).ToDateTimeString();
273                      definition.Description = t.MetaData[XMLTVConstants.Programs.ProgramDescription].ToString();                      definition.Description = t.MetaData[XMLTVConstants.Programs.ProgramDescription].ToString();
274                      definition.Title = t.MetaData[XMLTVConstants.Programs.ProgramTitle].ToString();                      definition.Title = t.MetaData[XMLTVConstants.Programs.ProgramTitle].ToString();
275                      definition.SubTitle = t.MetaData[XMLTVConstants.Programs.ProgramSubTitle].ToString();                      definition.SubTitle = t.MetaData[XMLTVConstants.Programs.ProgramSubTitle].ToString();
276    
277                        xmltv_logger.Verbose.Debug.WriteLine(definition.ToString());
278                      list.Add(definition);                      list.Add(definition);
279                  }                  }
280                  catch (Exception ex) { throw ex; }                  catch (Exception ex) { throw ex; }

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

  ViewVC Help
Powered by ViewVC 1.1.22