/[xmltv_parser]/trunk/xmltv_parser/main.cs
ViewVC logotype

Contents of /trunk/xmltv_parser/main.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (show annotations) (download)
Sat Mar 9 11:40:15 2013 UTC (6 years, 9 months ago) by william
File size: 11824 byte(s)

1 //#define DISABLE_RELEASE_MODE_KLOGLEVEL_DEBUG // when defined will turn off kLogLevel_Debug messages, in release mode
2 //#define DISABLE_DEBUG_MODE_KLOGLEVEL_VERBOSE_DEBUG // when defined will turn off kLogLevel_VerboseDebug message, in debug mode
3 using System;
4 using System.Collections.Generic;
5 using System.ComponentModel;
6 using System.Data;
7 using System.Linq;
8 using System.Drawing;
9 using System.Text;
10 using System.Windows.Forms;
11 using libxmltv.Core;
12 using Enterprise.Logging;
13 using libxmltv.Interfaces;
14 using System.IO;
15 using System.Runtime.Serialization.Formatters.Binary;
16 using System.Threading;
17 using System.Diagnostics;
18
19 namespace xmltv_parser
20 {
21
22 public partial class main : Form
23 {
24 public main()
25 {
26 InitializeComponent();
27 ListViewSorter Sorter = new ListViewSorter();
28 lstPrograms.ListViewItemSorter = Sorter;
29 string log_path = Application.StartupPath;
30 string log_filename = string.Format("{0}.log", typeof(main).Assembly.GetName().Name);
31 gLog.CreateLog(string.Format(@"{0}\{1}", log_path, log_filename), false, LogLevel.kLogLevel_All_NoProgress, new EventHandler<LoggerOnFlushEventArgs>(Log_OnFlush));
32 #if DEBUG
33 LogLevel gLevel = gLog.LogLevel;
34 #if DISABLE_DEBUG_MODE_KLOGLEVEL_VERBOSE_DEBUG
35 gLevel &= ~LogLevel.kLogLevel_VerboseDebug;
36 #else
37 gLevel |= LogLevel.kLogLevel_VerboseDebug;
38 #endif
39 gLevel |= LogLevel.kLogLevel_Debug;
40 gLog.SetLogLevel(gLevel);
41 #else
42 LogLevel gLevel = LogLevel.kLogLevel_Default; // set the default log level: Info, Warn, Error, Debug
43 // it is OK for kLogLevel_Debug to be set in Release mode ... must of the chatty messages are from kLogLevel_VerboseDebug
44 #if DISABLE_RELEASE_MODE_KLOGLEVEL_DEBUG
45 gLevel &= ~LogLevel.kLogLevel_Debug;
46 #else
47 gLevel |= LogLevel.kLogLevel_Debug;
48 #endif
49 gLevel &= ~LogLevel.kLogLevel_VerboseDebug; // ensure this is not set, ever in release mode
50 gLog.SetLogLevel(gLevel);
51 #endif
52
53
54 gLog.ReportProgressEvent += new EventHandler<ReportProgressEventArgs>(gLog_ReportProgress);
55 }
56
57 private void ReportProgress(int progress)
58 {
59 try
60 {
61 if (this.InvokeRequired)
62 {
63 try
64 {
65 this.Invoke((Action)(delegate { ReportProgress(progress); }));
66 }
67 catch { }
68 return;
69 }
70 progress_status.Value = progress;
71 }
72 catch (Exception ex) { Debug.WriteLine(ex.ToString()); }
73 }
74 private void gLog_ReportProgress(object sender, ReportProgressEventArgs e) { ReportProgress(e.Progress); }
75
76 StringBuilder log_flusher = new StringBuilder();
77
78 void Log_OnFlush(object sender, LoggerOnFlushEventArgs e)
79 {
80 OnLogFlush(e.Buffer);
81 }
82 //bool txtLog_EnterMouse = false;
83
84 private void txtLog_MouseLeave(object sender, EventArgs e)
85 {
86 //txtLog_EnterMouse = false;
87 }
88 private void txtLog_MouseEnter(object sender, EventArgs e)
89 {
90 //txtLog_EnterMouse = true;
91 }
92 void OnLogFlush(string logmessage)
93 {
94 if (this.IsDisposed) { return; }
95 UpdateStatus(logmessage);
96 UpdateLogOutput(logmessage);
97 Application.DoEvents();
98 }
99
100 void UpdateStatus(string logmessage)
101 {
102 if (this.InvokeRequired)
103 {
104 try
105 {
106 this.Invoke((Action)(delegate { UpdateStatus(logmessage); }));
107 }
108 catch { }
109 return;
110 }
111 txtStatus.Text = logmessage.Replace(System.Environment.NewLine, "");
112 }
113 void UpdateLogOutput(string logmessage)
114 {
115 if (this.InvokeRequired)
116 {
117 try
118 {
119 this.Invoke((Action)(delegate { UpdateLogOutput(logmessage); }));
120 }
121 catch { }
122 return;
123 }
124 txtLog.AppendText(logmessage);
125 txtLog.SelectionStart = txtLog.Text.Length; //Set the current caret position to the end
126 txtLog.ScrollToCaret(); //Now scroll it automatically
127 }
128
129 //List<IXMLTVChannel> Channels;
130 List<IXMLTVProgram> Programs;
131
132 private void main_Load(object sender, EventArgs e)
133 {
134
135 }
136 private void main_Shown(object sender, EventArgs e)
137 {
138
139 }
140
141
142 void LoadXMLTVShcedule(string schedule_xml)
143 {
144 //XMLTV.CreateInstance(schedule_xml, new EventHandler<CancelEventArgs>(xmltv_cancelevent));
145 XMLTV.CreateInstance(schedule_xml, new EventHandler<EventArgs>(XMLTV_OnInstanceCreated));
146 //XMLTV.OnInstanceCreated += new EventHandler<EventArgs>(XMLTV_OnInstanceCreated);
147 }
148
149 void XMLTV_OnInstanceCreated(object sender, EventArgs e)
150 {
151 ReportProgress(0);
152 var instance = XMLTV.GetInstance();
153 if (instance != null)
154 {
155 var program_count = instance.Programs.Count;
156 var program_list = instance.Programs.ToList().OrderBy(s => s.Start);
157 //Programs = program_list(0, program_count).ToList();
158 Programs = new List<IXMLTVProgram>(program_list.ToArray());
159 }
160 CreateControls();
161 }
162
163
164 //void xmltv_cancelevent(object sender, CancelEventArgs e)
165 //{
166 // if (form_closing)
167 // {
168 // e.Cancel = true;
169 // }
170 //}
171
172 void CreateControls()
173 {
174 if (this.InvokeRequired)
175 {
176 this.Invoke((Action)(delegate { CreateControls(); }));
177 return;
178 }
179 List<ListViewItem> items = new List<ListViewItem>();
180 foreach (var program in Programs)
181 {
182 ListViewItem li = new ListViewItem(string.Format("{0} {1}", program.Channel.Number, program.Channel.CallSign));
183 li.Tag = program;
184 li.SubItems.Add(new ListViewItem.ListViewSubItem(li, program.Title));
185 li.SubItems.Add(new ListViewItem.ListViewSubItem(li, program.SubTitle));
186 li.SubItems.Add(new ListViewItem.ListViewSubItem(li, program.Description));
187 li.SubItems.Add(new ListViewItem.ListViewSubItem(li, program.Start.ToString("yyyy/MM/dd hh:mm tt")));
188 li.SubItems.Add(new ListViewItem.ListViewSubItem(li, program.Stop.ToString("yyyy/MM/dd hh:mm tt")));
189 //lstPrograms.Items.Add(li);
190 items.Add(li);
191 }
192
193 lstPrograms.Items.AddRange(items.ToArray());
194 }
195
196 private void mnuItemOpenXMLTVFile_Click(object sender, EventArgs e)
197 {
198 try
199 {
200 lstPrograms.Items.Clear();
201 //LoadXMLTVShcedule("20130307_continuum_schedule.xml");
202 var result = xmltv_file_chooser.ShowDialog();
203 if (result != DialogResult.OK) return;
204 ClearLocalLog();
205 LoadXMLTVShcedule(xmltv_file_chooser.FileName);
206 //CreateControls();
207 }
208 catch (Exception ex)
209 {
210 gLog.Error.WriteLine(ex.ToString());
211 }
212 }
213
214 private void mnuItemOpenSavedData_Click(object sender, EventArgs e)
215 {
216 try
217 {
218 var result = xmltv_program_data_loader.ShowDialog();
219 if (result != DialogResult.OK) return;
220 string filename = xmltv_program_data_loader.FileName;
221 IXMLTVRuntimeInstance xmltv = null;
222 bool status = false;
223 xmltv = XMLTV.DeSerialize(filename, out status);
224 XMLTV.CreateFromInstance(xmltv, new EventHandler<EventArgs>(XMLTV_OnInstanceCreated));
225 if (!status)
226 {
227 MessageBox.Show("Failed to load data - check log", "Failed to load data", MessageBoxButtons.OK, MessageBoxIcon.Error);
228 return;
229 }
230 MessageBox.Show("Successfully loaded data", "Successfully loaded data", MessageBoxButtons.OK, MessageBoxIcon.Information);
231 }
232 catch (Exception ex)
233 {
234 gLog.Error.WriteLine(ex.ToString());
235 }
236 }
237
238 private void mnuItemSaveData_Click(object sender, EventArgs e)
239 {
240 try
241 {
242 var result = xmltv_program_data_saver.ShowDialog();
243 if (result != DialogResult.OK) return;
244 string filename = xmltv_program_data_saver.FileName;
245 if (!XMLTV.Serialize(filename))
246 {
247 MessageBox.Show("Failed to save data - check log", "Failed to save data", MessageBoxButtons.OK, MessageBoxIcon.Error);
248 return;
249 }
250 MessageBox.Show("Successfully saved data", "Successfully saved data", MessageBoxButtons.OK, MessageBoxIcon.Information);
251 }
252 catch (Exception ex)
253 {
254 gLog.Error.WriteLine(ex.ToString());
255 }
256 }
257
258 private void main_FormClosing(object sender, FormClosingEventArgs e)
259 {
260 try
261 {
262 XMLTV.DestroyInstance();
263 }
264 catch { }
265 }
266
267 private void mnuItemClearLocalLog_Click(object sender, EventArgs e)
268 {
269 ClearLocalLog();
270 }
271 private void ClearLocalLog()
272 {
273 var log_top_entry = txtLog.Lines.FirstOrDefault();
274 txtLog.Clear();
275 if (!string.IsNullOrEmpty(log_top_entry))
276 {
277 txtLog.AppendText(log_top_entry);
278 }
279 }
280
281 private void mnuItemExit_Click(object sender, EventArgs e)
282 {
283 this.Close();
284 }
285
286 private void lstPrograms_SelectedIndexChanged(object sender, EventArgs e)
287 {
288 IXMLTVProgram program = null;
289 var item = lstPrograms.SelectedItems[0];
290 int selected_index = lstPrograms.Items.IndexOf(item);
291 program = (item.Tag as IXMLTVProgram);
292 gLog.Debug.WriteLine("Selected ListViewItem at index: {0}", selected_index);
293 if (program == null) { return; }
294 txtStatus.Text = program.ToString();
295 //gLog.Debug.WriteLine(program.ToString());
296
297 }
298
299 private void lstPrograms_ColumnClick(object sender, ColumnClickEventArgs e)
300 {
301 if (!(lstPrograms.ListViewItemSorter is ListViewSorter)) return;
302 ListViewSorter Sorter = (ListViewSorter)lstPrograms.ListViewItemSorter;
303 Sorter.LastColumn = Sorter.CurrentColumn;
304 Sorter.CurrentColumn = e.Column;
305 if (Sorter.LastColumn == e.Column)
306 {
307 if (lstPrograms.Sorting == SortOrder.Ascending) { lstPrograms.Sorting = SortOrder.Descending; }
308 else { lstPrograms.Sorting = SortOrder.Ascending; }
309 }
310 else { lstPrograms.Sorting = SortOrder.Descending; }
311 lstPrograms.Sort();
312 }
313 }
314 }
315

  ViewVC Help
Powered by ViewVC 1.1.22