Adding basic display client connection.
2 using System.Collections.Generic;
5 using System.Threading.Tasks;
6 using System.Reflection;
16 using SharpLib.Display;
17 using TvEngine.Events;
18 using TvLibrary.Interfaces;
20 namespace TvServerPlugin
24 public class RecordSatus : ITvServerPlugin
30 /// Reference to the tvservice's TVcontroller
32 private IController _controller;
36 /// Creates a new PowerScheduler plugin
38 public RecordSatus() { }
43 public void OnCloseOrder()
51 public void CloseClient()
59 iClient = new Client();
60 //iClient.CloseOrderEvent += OnCloseOrder;
63 //Connect using unique name
64 //string name = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff tt");
65 string name = "Client-" + (iClient.ClientCount() - 1);
66 iClient.SetName(name);
70 //iClient.Open(/*"net.tcp://localhost:8111/DisplayService"*/);
72 //Connect using unique name
73 //string name = "Client-" + (iClient.ClientCount() - 1);
74 //iClient.SetName(name);
75 //Console.WriteLine("Name: " + name);
81 public void SetLayout()
83 TableLayout layout = new TableLayout(1, 1);
84 iClient.SetLayout(layout);
85 //We need to create our fields
86 DataField field = new TextField();
87 iClient.CreateFields(new DataField[]
96 public void SetTextField()
98 TextField field = new TextField();
99 field.Text = "Notification TV Server Plugin";
100 iClient.SetField(field);
104 private void UpdateRecordingStatus()
106 RecordingField field = new RecordingField();
107 field.IsActive = _controller.IsAnyCardRecording();
108 iClient.SetField(field);
111 private void OnTvServerEvent(object sender, EventArgs eventArgs)
115 //TODO: Try reconnect
119 TvServerEventArgs tvArgs = eventArgs as TvServerEventArgs;
120 switch (tvArgs.EventType)
122 case TvServerEventType.RecordingStarted:
123 UpdateRecordingStatus();
126 case TvServerEventType.RecordingEnded:
133 if (_state == EpgState.Idle)
135 TvServerEventArgs tvArgs = eventArgs as TvServerEventArgs;
136 if (eventArgs == null)
139 switch (tvArgs.EventType)
141 case TvServerEventType.StartTimeShifting:
142 Log.Epg("epg cancelled due to start timeshifting");
146 case TvServerEventType.StartRecording:
147 Log.Epg("epg cancelled due to start recording");
155 /// Called by the tvservice PluginLoader to start this plugin
157 /// <param name="controller">Reference to the tvservice's TVController</param>
158 public void Start(IController controller)
160 Log.Debug(Name + " start - begins");
162 _controller = controller;
165 //Open Display Client Connection
169 UpdateRecordingStatus();
172 ITvServerEvent events = GlobalServiceProvider.Instance.Get<ITvServerEvent>();
173 events.OnTvServerEvent += new TvServerEventHandler(OnTvServerEvent);
175 Log.Debug(Name + " start - ends");
179 /// Called by the tvservice PluginLoader to stop this plugin
183 Log.Debug(Name + " stop");
186 //PowerScheduler.Instance.Stop();
190 /// Author of this plugin
194 get { return "Stéphane Lenclud"; }
198 /// Should this plugin run only on a master tvserver?
200 public bool MasterOnly
202 get { return false; }
206 /// Name of this plugin
212 return "NotificationTvServerPlugin";
217 /// Returns the SectionSettings setup part of this plugin
219 public SectionSettings Setup
221 get { return new RecordStatusSetup(); }
227 public string Version
229 get { return Assembly.GetExecutingAssembly().GetName().Version.ToString(); }
234 /// Access icons from embedded resources.
236 /// <param name="name"></param>
237 /// <returns></returns>
238 public static Icon GetIcon(string name)
240 string[] names = Assembly.GetExecutingAssembly().GetManifestResourceNames();
241 for (int i = 0; i < names.Length; i++)
243 if (names[i].EndsWith(name))
245 using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(names[i]))
247 return new Icon(stream);