summaryrefslogtreecommitdiff
path: root/server/menu.c
blob: d5f0c7efe92b249d0f3768d1dcce9578ecd87df2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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('\t')));
	SetHelpKeys();
	Display();
}

cStreamdevServerMenu::~cStreamdevServerMenu() {
}

void cStreamdevServerMenu::SetHelpKeys() {
	SetHelp(Count() ? tr("Disconnect") : NULL, NULL, NULL, tr("Suspend"));
}

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('\t'))) {
				s->Close();
				Del(Current());
				SetHelpKeys();
				Display();
				break;
			}
		}
	}
	return osContinue;
}

eOSState cStreamdevServerMenu::Suspend() {
	if (!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;
}