mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
First step towards a 'unique channel ID'
This commit is contained in:
93
menu.c
93
menu.c
@@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.c 1.222 2002/11/01 12:15:45 kls Exp $
|
||||
* $Id: menu.c 1.223 2002/11/10 12:32:42 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@@ -546,16 +546,18 @@ private:
|
||||
cChannel data;
|
||||
void Setup(void);
|
||||
public:
|
||||
cMenuEditChannel(int Index);
|
||||
cMenuEditChannel(cChannel *Channel, bool New = false);
|
||||
virtual eOSState ProcessKey(eKeys Key);
|
||||
};
|
||||
|
||||
cMenuEditChannel::cMenuEditChannel(int Index)
|
||||
cMenuEditChannel::cMenuEditChannel(cChannel *Channel, bool New)
|
||||
:cOsdMenu(tr("Edit channel"), 14)
|
||||
{
|
||||
channel = Channels.Get(Index);
|
||||
channel = Channel;
|
||||
if (channel) {
|
||||
data = *channel;
|
||||
if (New)
|
||||
channel = NULL;
|
||||
Setup();
|
||||
}
|
||||
}
|
||||
@@ -603,10 +605,26 @@ eOSState cMenuEditChannel::ProcessKey(eKeys Key)
|
||||
|
||||
if (state == osUnknown) {
|
||||
if (Key == kOk) {
|
||||
if (channel)
|
||||
*channel = data;
|
||||
Channels.Save();
|
||||
state = osBack;
|
||||
if (Channels.HasUniqueChannelID(&data, channel)) {
|
||||
if (channel) {
|
||||
*channel = data;
|
||||
isyslog("edited channel %d %s", channel->Number(), data.ToText());
|
||||
state = osBack;
|
||||
}
|
||||
else {
|
||||
channel = new cChannel;
|
||||
*channel = data;
|
||||
Channels.Add(channel);
|
||||
Channels.ReNumber();
|
||||
isyslog("added channel %d %s", channel->Number(), data.ToText());
|
||||
state = osUser1;
|
||||
}
|
||||
Channels.Save();
|
||||
}
|
||||
else {
|
||||
Interface->Error(tr("Channel settings are not unique!"));
|
||||
state = osContinue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Key != kNone && (data.source & cSource::st_Mask) != (oldSource & cSource::st_Mask))
|
||||
@@ -696,10 +714,8 @@ eOSState cMenuChannels::Edit(void)
|
||||
if (HasSubMenu() || Count() == 0)
|
||||
return osContinue;
|
||||
cChannel *ch = Channels.Get(Current());
|
||||
if (ch) {
|
||||
isyslog("editing channel %d", ch->Number());
|
||||
return AddSubMenu(new cMenuEditChannel(Current()));
|
||||
}
|
||||
if (ch)
|
||||
return AddSubMenu(new cMenuEditChannel(ch));
|
||||
return osContinue;
|
||||
}
|
||||
|
||||
@@ -707,13 +723,7 @@ eOSState cMenuChannels::New(void)
|
||||
{
|
||||
if (HasSubMenu())
|
||||
return osContinue;
|
||||
cChannel *channel = new cChannel(Channels.Get(Current()));
|
||||
Channels.Add(channel);
|
||||
Channels.ReNumber();
|
||||
Add(new cMenuChannelItem(channel), true);
|
||||
Channels.Save();
|
||||
isyslog("channel %d added", channel->Number());
|
||||
return AddSubMenu(new cMenuEditChannel(Current()));
|
||||
return AddSubMenu(new cMenuEditChannel(Channels.Get(Current()), true));
|
||||
}
|
||||
|
||||
eOSState cMenuChannels::Del(void)
|
||||
@@ -753,16 +763,27 @@ eOSState cMenuChannels::ProcessKey(eKeys Key)
|
||||
{
|
||||
eOSState state = cOsdMenu::ProcessKey(Key);
|
||||
|
||||
if (state == osUnknown) {
|
||||
switch (Key) {
|
||||
case kOk: return Switch();
|
||||
case kRed: return Edit();
|
||||
case kGreen: return New();
|
||||
case kYellow: return Del();
|
||||
case kBlue: Mark(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
switch (state) {
|
||||
case osUser1: {
|
||||
cChannel *channel = Channels.Last();
|
||||
if (channel) {
|
||||
Add(new cMenuChannelItem(channel), true);
|
||||
return CloseSubMenu();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (state == osUnknown) {
|
||||
switch (Key) {
|
||||
case kOk: return Switch();
|
||||
case kRed: return Edit();
|
||||
case kGreen: return New();
|
||||
case kYellow: return Del();
|
||||
case kBlue: Mark(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -1068,7 +1089,7 @@ cMenuEvent::cMenuEvent(const cEventInfo *EventInfo, bool CanSwitch)
|
||||
{
|
||||
eventInfo = EventInfo;
|
||||
if (eventInfo) {
|
||||
cChannel *channel = Channels.GetByServiceID(eventInfo->GetServiceID());
|
||||
cChannel *channel = Channels.GetByChannelID(eventInfo->GetChannelID());
|
||||
if (channel) {
|
||||
char *buffer;
|
||||
asprintf(&buffer, "%-17.*s\t%.*s %s - %s", 17, channel->Name(), 5, eventInfo->GetDate(), eventInfo->GetTimeString(), eventInfo->GetEndTimeString());
|
||||
@@ -1162,7 +1183,7 @@ cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now, int CurrentCha
|
||||
|
||||
pArray[num] = Now ? Schedule->GetPresentEvent() : Schedule->GetFollowingEvent();
|
||||
if (pArray[num]) {
|
||||
cChannel *channel = Channels.GetByServiceID(pArray[num]->GetServiceID());
|
||||
cChannel *channel = Channels.GetByChannelID(pArray[num]->GetChannelID());
|
||||
if (channel) {
|
||||
pArray[num]->SetChannelNumber(channel->Number());
|
||||
num++;
|
||||
@@ -1192,7 +1213,7 @@ eOSState cMenuWhatsOn::Switch(void)
|
||||
{
|
||||
cMenuWhatsOnItem *item = (cMenuWhatsOnItem *)Get(Current());
|
||||
if (item) {
|
||||
cChannel *channel = Channels.GetByServiceID(item->eventInfo->GetServiceID());
|
||||
cChannel *channel = Channels.GetByChannelID(item->eventInfo->GetChannelID());
|
||||
if (channel && cDevice::PrimaryDevice()->SwitchChannel(channel, true))
|
||||
return osEnd;
|
||||
}
|
||||
@@ -1313,7 +1334,7 @@ void cMenuSchedule::PrepareSchedule(cChannel *Channel)
|
||||
SetTitle(buffer);
|
||||
free(buffer);
|
||||
if (schedules) {
|
||||
const cSchedule *Schedule = Channel->Sid() ? schedules->GetSchedule(Channel->Sid()) : schedules->GetSchedule();
|
||||
const cSchedule *Schedule = schedules->GetSchedule(Channel->GetChannelID());
|
||||
int num = Schedule->NumEvents();
|
||||
const cEventInfo **pArray = MALLOC(const cEventInfo *, num);
|
||||
if (pArray) {
|
||||
@@ -1376,7 +1397,7 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
|
||||
if (!now && !next) {
|
||||
int ChannelNr = 0;
|
||||
if (Count()) {
|
||||
cChannel *channel = Channels.GetByServiceID(((cMenuScheduleItem *)Get(Current()))->eventInfo->GetServiceID());
|
||||
cChannel *channel = Channels.GetByChannelID(((cMenuScheduleItem *)Get(Current()))->eventInfo->GetChannelID());
|
||||
if (channel)
|
||||
ChannelNr = channel->Number();
|
||||
}
|
||||
@@ -1403,7 +1424,7 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
|
||||
now = next = false;
|
||||
const cEventInfo *ei = cMenuWhatsOn::ScheduleEventInfo();
|
||||
if (ei) {
|
||||
cChannel *channel = Channels.GetByServiceID(ei->GetServiceID());
|
||||
cChannel *channel = Channels.GetByChannelID(ei->GetChannelID());
|
||||
if (channel) {
|
||||
PrepareSchedule(channel);
|
||||
if (channel->Number() != cDevice::CurrentChannel()) {
|
||||
@@ -2713,7 +2734,7 @@ bool cRecordControl::GetEventInfo(void)
|
||||
cMutexLock MutexLock;
|
||||
const cSchedules *Schedules = cSIProcessor::Schedules(MutexLock);
|
||||
if (Schedules) {
|
||||
const cSchedule *Schedule = Schedules->GetSchedule(channel->Sid());
|
||||
const cSchedule *Schedule = Schedules->GetSchedule(channel->GetChannelID());
|
||||
if (Schedule) {
|
||||
eventInfo = Schedule->GetEventAround(Time);
|
||||
if (eventInfo) {
|
||||
|
Reference in New Issue
Block a user