summaryrefslogtreecommitdiff
path: root/server/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/menu.c')
-rw-r--r--server/menu.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/server/menu.c b/server/menu.c
new file mode 100644
index 0000000..28b25f8
--- /dev/null
+++ b/server/menu.c
@@ -0,0 +1,68 @@
+/*
+ * $Id: menu.c,v 1.10 2010/07/19 13:49:31 schmirl Exp $
+ */
+
+#include <vdr/menuitems.h>
+#include <vdr/thread.h>
+#include <vdr/player.h>
+
+#include "server/menu.h"
+#include "server/setup.h"
+#include "server/server.h"
+#include "server/suspend.h"
+
+cStreamdevServerMenu::cStreamdevServerMenu(): cOsdMenu(tr("Streamdev Connections"), 4, 20) {
+ cThreadLock lock;
+ const cList<cServerConnection>& clients = cStreamdevServer::Clients(lock);
+ for (cServerConnection *s = clients.First(); s; s = clients.Next(s))
+ Add(new cOsdItem(s->ToText()));
+ SetHelpKeys();
+ Display();
+}
+
+cStreamdevServerMenu::~cStreamdevServerMenu() {
+}
+
+void cStreamdevServerMenu::SetHelpKeys() {
+ SetHelp(Count() ? tr("Disconnect") : NULL, NULL, NULL, StreamdevServerSetup.SuspendMode == smOffer ? tr("Suspend") : NULL);
+}
+
+eOSState cStreamdevServerMenu::Disconnect() {
+ cOsdItem *item = Get(Current());
+ if (item) {
+ cThreadLock lock;
+ const cList<cServerConnection>& clients = cStreamdevServer::Clients(lock);
+ const char *text = item->Text();
+ for (cServerConnection *s = clients.First(); s; s = clients.Next(s)) {
+ if (!strcmp(text, s->ToText())) {
+ s->Close();
+ Del(Current());
+ SetHelpKeys();
+ Display();
+ break;
+ }
+ }
+ }
+ return osContinue;
+}
+
+eOSState cStreamdevServerMenu::Suspend() {
+ if (StreamdevServerSetup.SuspendMode == smOffer && !cSuspendCtl::IsActive()) {
+ cControl::Launch(new cSuspendCtl);
+ return osBack;
+ }
+ return osContinue;
+}
+
+eOSState cStreamdevServerMenu::ProcessKey(eKeys Key) {
+ eOSState state = cOsdMenu::ProcessKey(Key);
+ if (state == osUnknown) {
+ switch (Key) {
+ case kRed: return Disconnect();
+ case kBlue: return Suspend();
+ case kOk: return osBack;
+ default: break;
+ }
+ }
+ return state;
+}