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 |
{ |
{ |
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; |
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; } |
114 |
var col = args.First().ToString().ToLower(); |
var col = args.First().ToString().ToLower(); |
115 |
switch (col) |
switch (col) |
116 |
{ |
{ |
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; |
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; |
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; |
case "stop": ordered = descending ? list.OrderByDescending(s => s.Stop) : list.OrderBy(s => s.Stop); break; |
128 |
col = arg.ToLower(); |
col = arg.ToLower(); |
129 |
switch (col) |
switch (col) |
130 |
{ |
{ |
131 |
case "channelname": ordered = descending ? ordered.ThenByDescending(s => s.ChannelName) : ordered.ThenBy(s => s.ChannelName); break; |
case "channelnumber": ordered = descending ? ordered.ThenByDescending(s => s.ChannelNumber) : ordered.ThenBy(s => s.ChannelNumber); break; |
132 |
|
case "channelname": ordered = descending ? list.OrderByDescending(s => s.ChannelName) : list.OrderBy(s => s.ChannelName); break; |
133 |
case "start": ordered = descending ? ordered.ThenByDescending(s => s.Start) : ordered.ThenBy(s => s.Start); break; |
case "start": ordered = descending ? ordered.ThenByDescending(s => s.Start) : ordered.ThenBy(s => s.Start); break; |
134 |
case "stop": ordered = descending ? ordered.ThenByDescending(s => s.Stop) : ordered.ThenBy(s => s.Stop); break; |
case "stop": ordered = descending ? ordered.ThenByDescending(s => s.Stop) : ordered.ThenBy(s => s.Stop); break; |
135 |
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; |
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 |
} |
} |
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() { } |
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; } |