summaryrefslogtreecommitdiff
path: root/server/menu.c
diff options
context:
space:
mode:
authorFrank Schmirler <vdr@schmirler.de>2011-11-22 01:15:09 +0100
committerFrank Schmirler <vdr@schmirler.de>2011-11-22 01:16:42 +0100
commitc652e8fa8141d7e323cbdbbc0a662244a5a84955 (patch)
treeee2a0a3421788e0f6cc5f653c42ac4f14acf322b /server/menu.c
parentce1583a756fe7d80522ed3e82275705b9cbe00b7 (diff)
downloadvdr-plugin-streamdev-c652e8fa8141d7e323cbdbbc0a662244a5a84955.tar.gz
vdr-plugin-streamdev-c652e8fa8141d7e323cbdbbc0a662244a5a84955.tar.bz2
Added server menu with list of clients. Connections can be terminated
with the "red" key. The former main menu action of suspending live TV moved to the "blue" key.
Diffstat (limited to 'server/menu.c')
-rw-r--r--server/menu.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/server/menu.c b/server/menu.c
new file mode 100644
index 0000000..dac09fe
--- /dev/null
+++ b/server/menu.c
@@ -0,0 +1,67 @@
+/*
+ * $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();
+ 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;
+}