diff options
author | Frank Schmirler <vdr@schmirler.de> | 2011-11-22 01:15:09 +0100 |
---|---|---|
committer | Frank Schmirler <vdr@schmirler.de> | 2011-11-22 01:16:42 +0100 |
commit | c652e8fa8141d7e323cbdbbc0a662244a5a84955 (patch) | |
tree | ee2a0a3421788e0f6cc5f653c42ac4f14acf322b /server/menu.c | |
parent | ce1583a756fe7d80522ed3e82275705b9cbe00b7 (diff) | |
download | vdr-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.c | 67 |
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; +} |