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

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

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

revision 52 by william, Fri Mar 8 07:01:37 2013 UTC revision 118 by william, Sun Mar 10 17:41:52 2013 UTC
# Line 7  using System.ComponentModel; Line 7  using System.ComponentModel;
7  using System.IO;  using System.IO;
8  using System.Reflection;  using System.Reflection;
9  using System.Globalization;  using System.Globalization;
10    using System.Windows.Forms;
11    
12  namespace libxmltv.Core  namespace libxmltv.Core
13  {  {
# Line 15  namespace libxmltv.Core Line 16  namespace libxmltv.Core
16      /// </summary>      /// </summary>
17      public static class XMLTV      public static class XMLTV
18      {      {
19          static XMLTV() { xmltv_logger.Initialize(); }          static XMLTV()
20            {
21                xmltv_logger.Initialize();
22                if (instance == null)
23                {
24                    instance = new XMLTV<IXMLTVRuntimeInstance, XMLTVRuntimeInstance>();
25                }
26            }
27    
28            #region public members
29            #region save data
30            public static void Save(string file)
31            {
32                if (!Serialize(file))
33                {
34                    MessageBox.Show("Failed to save data - check log", "Failed to save data", MessageBoxButtons.OK, MessageBoxIcon.Error);
35                    return;
36                }
37                MessageBox.Show("Successfully saved data", "Successfully saved data", MessageBoxButtons.OK, MessageBoxIcon.Information);
38            }
39            public static void Save(Stream stream)
40            {
41                if (!Serialize(stream))
42                {
43                    MessageBox.Show("Failed to save data - check log", "Failed to save data", MessageBoxButtons.OK, MessageBoxIcon.Error);
44                    return;
45                }
46                MessageBox.Show("Successfully saved data", "Successfully saved data", MessageBoxButtons.OK, MessageBoxIcon.Information);
47            }
48            #endregion
49            #region load data
50            public static void Load(string file) { Load(file, null); }
51            public static void Load(string file, EventHandler<EventArgs> handler)
52            {
53                if (!DeSerialize(file, handler))
54                {
55                    MessageBox.Show("Failed to load data - check log", "Failed to load data", MessageBoxButtons.OK, MessageBoxIcon.Error);
56                    return;
57                }
58                MessageBox.Show("Successfully loaded data", "Successfully loaded data", MessageBoxButtons.OK, MessageBoxIcon.Information);
59                OnCreatedInstance();
60    
61            }
62            public static void Load(Stream stream) { Load(stream, null); }
63            public static void Load(Stream stream, EventHandler<EventArgs> handler)
64            {
65                if (!DeSerialize(stream, handler))
66                {
67                    MessageBox.Show("Failed to load data - check log", "Failed to load data", MessageBoxButtons.OK, MessageBoxIcon.Error);
68                    return;
69                }
70                MessageBox.Show("Successfully loaded data", "Successfully loaded data", MessageBoxButtons.OK, MessageBoxIcon.Information);
71                OnCreatedInstance();
72            }
73            #endregion
74            #region Create/Destroy
75            public static void Create(params object[] args) { CreateInstance(args); }
76            public static void Destroy() { DestroyInstance(); }
77            #endregion
78    
79            #region Get Data
80            public static IXMLTVSource GetSource()
81            {
82                var gInstance = GetInstance();
83                var list = gInstance.Source;
84                return list;
85            }
86            public static List<IXMLTVChannel> GetChannels()
87            {
88                var gInstance = GetInstance();
89               var list = gInstance.Channels;
90                return list;
91            }
92            public static List<IXMLTVProgram> GetPrograms()
93            {
94                var gInstance = GetInstance();
95                var list = gInstance.Programs;
96                return list;
97            }
98            #endregion
99            #endregion
100    
101    
102          static IXMLTV<IXMLTVRuntimeInstance, XMLTVRuntimeInstance> instance;          static IXMLTV<IXMLTVRuntimeInstance, XMLTVRuntimeInstance> instance;
103          public static IXMLTVRuntimeInstance GetInstance() { return instance.GetInstance(); }          internal static IXMLTVRuntimeInstance GetInstance() { return instance.GetInstance(); }
104          public static void CreateInstance(params object[] args) { instance = new XMLTV<IXMLTVRuntimeInstance, XMLTVRuntimeInstance>(args); }          internal static void CreateInstance(params object[] args) { instance = new XMLTV<IXMLTVRuntimeInstance, XMLTVRuntimeInstance>(args); }
         //public static void CreateInstance(string xml_file, EventHandler<CancelEventArgs> t) { instance = new XMLTV<IXMLTVRuntimeInstance, XMLTVRuntimeInstance>(xml_file, t); }  
         //public static IXMLTVSerializer<IXMLTVRuntimeInstance> GetSerializer() {return new XMLTVSerializer<IXMLTVRuntimeInstance>(InternalGetInstance()); }  
105    
106          //private static IXMLTVSerializer<T> CreateSerializer<T>() where T : class { return new XMLTVSerializer<T>(InternalGetInstance() as T); }          internal static void CreateFromInstance(object raw_instance, EventHandler<EventArgs> handler)
107            {
108                instance = new XMLTV<IXMLTVRuntimeInstance, XMLTVRuntimeInstance>(raw_instance, handler);
109                //OnCreatedInstance();
110            }
111    
112            internal static void OnCreatedInstance() { if (OnInstanceCreated != null) { OnInstanceCreated.Invoke(null, new EventArgs()); } }
113    
114          #region IXMLTVSerializer<IXMLTVRuntimeInstance> members          #region IXMLTVSerializer<IXMLTVRuntimeInstance> members
115          public static bool Serialize(string file) { return instance.Serialize(file); }          internal static bool Serialize(string file) { return instance.Serialize(file); }
116          public static bool Serialize(Stream stream) { return instance.Serialize(stream); }          internal static bool Serialize(Stream stream) { return instance.Serialize(stream); }
117          public static IXMLTVRuntimeInstance DeSerialize(string file, out bool status) { return instance.DeSerialize(file, out status); }          internal static bool DeSerialize(string file, EventHandler<EventArgs> handler)
118          public static IXMLTVRuntimeInstance DeSerialize(Stream stream, out bool status) { return instance.DeSerialize(stream, out status); }          {
119                bool status;
120                var gInstance = instance.DeSerialize(file, out status);            
121                CreateFromInstance(gInstance, handler);
122                return status;
123            }
124            internal static bool DeSerialize(Stream stream, EventHandler<EventArgs> handler)
125            {
126                bool status;
127                var gInstance = instance.DeSerialize(stream, out status);
128                CreateFromInstance(gInstance, handler);
129                return status;
130            }
131          #endregion          #endregion
132            internal static void DestroyInstance() { instance.DestroyInstance(); }
133    
134            internal static EventHandler<EventArgs> OnInstanceCreated
135            {
136                get { return instance.OnInstanceCreated; }
137                set { instance.OnInstanceCreated = value; }
138            }
139    
140          
141      }      }
142    
143      internal class XMLTV<INTERFACE, CLASS> : IXMLTV<INTERFACE, CLASS> where CLASS : class,INTERFACE      internal class XMLTV<INTERFACE, CLASS> : IDestroyInstance, IXMLTV<INTERFACE, CLASS> where CLASS : class,INTERFACE,new()
144      {      {
145            public XMLTV()
146            {
147                instance = new CLASS();
148            }
149            public XMLTV(object raw_instance, EventHandler<EventArgs> handler)
150            {
151                instance = (CLASS)Convert.ChangeType(raw_instance, typeof(CLASS));
152                if (instance != null)
153                {
154                    IRuntimeInstanceLoader<CLASS> loader = (instance as IRuntimeInstanceLoader<CLASS>);
155                    if (loader != null)
156                    {
157                        SetOnInstanceCreated(handler);
158                        instance = loader.LoadFromInstance(instance);
159                    }
160                }
161            }
162          public XMLTV(params object[] args)          public XMLTV(params object[] args)
163          {          {
164              ////instance = new CLASS(xml_file, t);              
165              //instance = null;              BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
   
             //Type type = typeof(CLASS);  
             //var ctors = type.GetConstructors();  
             //foreach (var ctor in ctors)  
             //{  
             //    var ctor_params = ctor.GetParameters();  
             //    if (ctor_params.Count() == 2)  
             //    {  
             //        if (ctor_params[0].ParameterType == typeof(string))  
             //        {  
             //            if (ctor_params[1].ParameterType == typeof(EventHandler<CancelEventArgs>))  
             //            {  
             //                object o = ctor.Invoke(new object[] { xml_file, t });  
             //                instance = (CLASS)Convert.ChangeType(o, typeof(CLASS));  
             //                break;  
             //            }  
             //        }  
             //    }  
             //    else { continue; }  
             //}  
             BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance;  
166              CultureInfo culture = CultureInfo.CurrentCulture;              CultureInfo culture = CultureInfo.CurrentCulture;
167              try              try
168              {              {
# Line 68  namespace libxmltv.Core Line 171  namespace libxmltv.Core
171              }              }
172              catch (Exception ex)              catch (Exception ex)
173              {              {
174                  xmltv_logger.Log.Error.WriteLine(ex.ToString());                  xmltv_logger.Error.WriteLine(ex.ToString());
175    
176                  StringBuilder parameter_builder = new StringBuilder();                  StringBuilder parameter_builder = new StringBuilder();
177                  foreach (object arg in args)                  foreach (object arg in args)
# Line 101  namespace libxmltv.Core Line 204  namespace libxmltv.Core
204          {          {
205              return (INTERFACE)instance;              return (INTERFACE)instance;
206          }          }
207            public void SetInstance(INTERFACE gInstance)
208            {
209                this.instance = gInstance as CLASS;
210            }
211          #endregion          #endregion
212    
213          #region IXMLTVSerializer<INTERFACE> members          #region IXMLTVSerializer<INTERFACE> members
# Line 109  namespace libxmltv.Core Line 216  namespace libxmltv.Core
216          public INTERFACE DeSerialize(string file, out bool status) { return CreateSerializer().DeSerialize(file, out status); }          public INTERFACE DeSerialize(string file, out bool status) { return CreateSerializer().DeSerialize(file, out status); }
217          public INTERFACE DeSerialize(Stream stream, out bool status) { return CreateSerializer().DeSerialize(stream, out status); }          public INTERFACE DeSerialize(Stream stream, out bool status) { return CreateSerializer().DeSerialize(stream, out status); }
218          #endregion          #endregion
219            public void DestroyInstance()
220            {
221                IDestroyInstance destoyer = (instance as IDestroyInstance);
222                if (destoyer != null)
223                {
224                    destoyer.DestroyInstance();
225                }
226                else
227                {
228                    xmltv_logger.Error.WriteLine("Unable to call DestroyInstance() on type: '{0}'", instance.GetType().Name);
229                }            
230            }
231            private void SetOnInstanceCreated(EventHandler<EventArgs> event_instance)
232            {
233                ISetCreatedInstanceEvent setter = (instance as ISetCreatedInstanceEvent);
234                if (setter != null) { setter.SetOnInstanceCreated(event_instance); }
235            }
236            private EventHandler<EventArgs> GetOnInstanceCreated()
237            {
238                IGetCreatedInstanceEvent getter = (instance as IGetCreatedInstanceEvent);
239                if (getter != null) { return getter.GetOnInstanceCreated(); }
240                return null;
241            }
242            public EventHandler<EventArgs> OnInstanceCreated
243            {
244                get { return GetOnInstanceCreated(); }
245                set { SetOnInstanceCreated(value); }
246            }
247      }      }
248    
249  }  }

Legend:
Removed from v.52  
changed lines
  Added in v.118

  ViewVC Help
Powered by ViewVC 1.1.22