From 782b517c51eaa6d2641fe9b6801afdad50be8586 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 20 Mar 2005 18:00:00 +0100 Subject: =?UTF-8?q?Version=201.3.23=20-=20The=20setup=20option=20"DVB/Vide?= =?UTF-8?q?o=20display=20format"=20is=20now=20only=20available=20if=20"Vid?= =?UTF-8?q?eo=20format"=20=20=20is=20set=20to=20"4:3"=20(suggested=20by=20?= =?UTF-8?q?Mikko=20Salo).=20-=20Updated=20the=20Russian=20OSD=20texts=20(t?= =?UTF-8?q?hanks=20to=20Vyacheslav=20Dikonov).=20-=20Dropped=20CA=20suppor?= =?UTF-8?q?t=20for=20the=20old=20'-icam'=20firmware.=20-=20Updated=20the?= =?UTF-8?q?=20Finnish=20OSD=20texts=20(thanks=20to=20Rolf=20Ahrenberg).=20?= =?UTF-8?q?-=20Updated=20the=20Swedish=20OSD=20texts=20(thanks=20to=20Toma?= =?UTF-8?q?s=20Prybil).=20-=20Fixed=20a=20few=20French=20OSD=20texts=20tha?= =?UTF-8?q?t=20were=20in=20the=20wrong=20place.=20-=20Improved=20matching?= =?UTF-8?q?=20timers=20to=20EPG=20events,=20especially=20in=20case=20there?= =?UTF-8?q?=20are=20several=20events=20=20=20with=20the=20same=20VPS=20tim?= =?UTF-8?q?e.=20-=20Fixed=20cDolbyRepacker=20to=20allow=20recording=20ProS?= =?UTF-8?q?ieben=20HD=20broadcasts=20(thanks=20to=20Reinhard=20=20=20Nissl?= =?UTF-8?q?).=20-=20Fixed=20cDvbDevice::SetVideoDisplayFormat()=20in=20cas?= =?UTF-8?q?e=20of=2016:9=20(thanks=20to=20Marco=20Schl=C3=BC=C3=9Fler).=20?= =?UTF-8?q?-=20The=20running=20status=20of=20a=20VPS=20event=20is=20now=20?= =?UTF-8?q?only=20taken=20seriously=20if=20that=20event=20has=20been=20=20?= =?UTF-8?q?=20seen=20within=20the=20last=2030=20seconds=20-=20otherwise=20?= =?UTF-8?q?recording=20is=20done=20as=20if=20no=20VPS=20was=20=20=20availa?= =?UTF-8?q?ble.=20-=20The=20day=20of=20a=20timer=20is=20now=20stored=20as?= =?UTF-8?q?=20a=20full=20date=20in=20ISO=20notation=20("YYYY-MM-DD")=20in?= =?UTF-8?q?=20=20=20'timers.conf'=20and=20for=20the=20result=20of=20the=20?= =?UTF-8?q?SVDRP=20command=20LSTT=20(based=20in=20parts=20on=20a=20=20=20p?= =?UTF-8?q?atch=20by=20Roman=20Krenick=C3=BD).=20-=20Some=20fixes=20to=20a?= =?UTF-8?q?void=20compiler=20warnings=20in=20gcc=204.0=20(thanks=20to=20Vi?= =?UTF-8?q?lle=20Skytt=C3=A4=20for=20reporting=20=20=20these).=20-=20Singl?= =?UTF-8?q?e=20shot=20timers=20are=20now=20reliably=20deleted=20when=20the?= =?UTF-8?q?y=20have=20expired.=20-=20Fixed=20setting=20the=20colored=20but?= =?UTF-8?q?ton=20help=20after=20deleting=20a=20recording=20in=20case=20the?= =?UTF-8?q?=20next=20=20=20menu=20entry=20is=20a=20directory=20(thanks=20t?= =?UTF-8?q?o=20Steffen=20Beyer).=20-=20Improved=20falling=20back=20to=20no?= =?UTF-8?q?rmal=20recording=20if=20the=20VPS=20data=20hasn't=20been=20seen?= =?UTF-8?q?=20for=20more=20=20=20than=2030=20seconds.=20-=20Added=20a=20mi?= =?UTF-8?q?ssing=20cMutexLock=20to=20cRemote::HasKeys()=20(thanks=20to=20W?= =?UTF-8?q?olfgang=20Rohdewald).=20-=20All=20log=20entries=20regarding=20t?= =?UTF-8?q?imers=20now=20contain=20a=20short=20description=20of=20the=20ti?= =?UTF-8?q?mer.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- menu.c | 75 ++++++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 27 deletions(-) (limited to 'menu.c') diff --git a/menu.c b/menu.c index e316863..30183df 100644 --- a/menu.c +++ b/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.342 2005/02/27 14:09:00 kls Exp $ + * $Id: menu.c 1.348 2005/03/20 15:14:51 kls Exp $ */ #include "menu.h" @@ -632,7 +632,7 @@ cMenuEditTimer::cMenuEditTimer(cTimer *Timer, bool New) channel = data.Channel()->Number(); Add(new cMenuEditBitItem( tr("Active"), &data.flags, tfActive)); Add(new cMenuEditChanItem(tr("Channel"), &channel)); - Add(new cMenuEditDayItem( tr("Day"), &data.day)); + Add(new cMenuEditDateItem(tr("Day"), &data.day, &data.weekdays)); Add(new cMenuEditTimeItem(tr("Start"), &data.start)); Add(new cMenuEditTimeItem(tr("Stop"), &data.stop)); Add(new cMenuEditBitItem( tr("VPS"), &data.flags, tfVps)); @@ -654,13 +654,12 @@ cMenuEditTimer::~cMenuEditTimer() void cMenuEditTimer::SetFirstDayItem(void) { if (!firstday && !data.IsSingleEvent()) { - Add(firstday = new cMenuEditDateItem(tr("First day"), &data.firstday)); + Add(firstday = new cMenuEditDateItem(tr("First day"), &data.day)); Display(); } else if (firstday && data.IsSingleEvent()) { Del(firstday->Index()); firstday = NULL; - data.firstday = 0; Display(); } } @@ -691,7 +690,7 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key) Timers.Add(timer); timer->Matches(); Timers.SetModified(); - isyslog("timer %d %s (%s)", timer->Index() + 1, addIfConfirmed ? "added" : "modified", timer->HasFlags(tfActive) ? "active" : "inactive"); + isyslog("timer %s %s (%s)", *timer->ToDescr(), addIfConfirmed ? "added" : "modified", timer->HasFlags(tfActive) ? "active" : "inactive"); addIfConfirmed = false; } } @@ -733,13 +732,28 @@ int cMenuTimerItem::Compare(const cListObject &ListObject) const void cMenuTimerItem::Set(void) { + cString day, name(""); + if (timer->WeekDays()) + day = timer->PrintDay(0, timer->WeekDays()); + else if (timer->Day() - time(NULL) < 28 * SECSINDAY) { + day = itoa(timer->GetMDay(timer->Day())); + name = WeekDayName(timer->Day()); + } + else { + struct tm tm_r; + time_t Day = timer->Day(); + localtime_r(&Day, &tm_r); + char buffer[16]; + strftime(buffer, sizeof(buffer), "%Y%m%d", &tm_r); + day = buffer; + } char *buffer = NULL; asprintf(&buffer, "%c\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s", !(timer->HasFlags(tfActive)) ? ' ' : timer->FirstDay() ? '!' : timer->Recording() ? '#' : '>', timer->Channel()->Number(), - timer->IsSingleEvent() ? *WeekDayName(timer->StartTime()) : "", - timer->IsSingleEvent() ? " " : "", - *timer->PrintDay(timer->Day()), + *name, + *name && **name ? " " : "", + *day, timer->Start() / 100, timer->Start() % 100, timer->Stop() / 100, @@ -795,9 +809,9 @@ eOSState cMenuTimers::OnOff(void) RefreshCurrent(); DisplayCurrent(true); if (timer->FirstDay()) - isyslog("timer %d first day set to %s", timer->Index() + 1, *timer->PrintFirstDay()); + isyslog("timer %s first day set to %s", *timer->ToDescr(), *timer->PrintFirstDay()); else - isyslog("timer %d %sactivated", timer->Index() + 1, timer->HasFlags(tfActive) ? "" : "de"); + isyslog("timer %s %sactivated", *timer->ToDescr(), timer->HasFlags(tfActive) ? "" : "de"); Timers.SetModified(); } return osContinue; @@ -807,7 +821,7 @@ eOSState cMenuTimers::Edit(void) { if (HasSubMenu() || Count() == 0) return osContinue; - isyslog("editing timer %d", CurrentTimer()->Index() + 1); + isyslog("editing timer %s", *CurrentTimer()->ToDescr()); return AddSubMenu(new cMenuEditTimer(CurrentTimer())); } @@ -832,12 +846,11 @@ eOSState cMenuTimers::Delete(void) else return osContinue; } - int Index = ti->Index(); + isyslog("deleting timer %s", *ti->ToDescr()); Timers.Del(ti); cOsdMenu::Del(Current()); Timers.SetModified(); Display(); - isyslog("timer %d deleted", Index + 1); } } return osContinue; @@ -1603,9 +1616,8 @@ eOSState cMenuRecordings::Delete(void) timer->Skip(); cRecordControls::Process(time(NULL)); if (timer->IsSingleEvent()) { - int Index = timer->Index(); + isyslog("deleting timer %s", *timer->ToDescr()); Timers.Del(timer); - isyslog("timer %d deleted", Index + 1); } Timers.SetModified(); } @@ -1619,6 +1631,7 @@ eOSState cMenuRecordings::Delete(void) cReplayControl::ClearLastReplayed(ri->FileName()); cOsdMenu::Del(Current()); Recordings.Del(recording); + SetHelpKeys(); Display(); if (!Count()) return osBack; @@ -1947,8 +1960,9 @@ void cMenuSetupDVB::Setup(void) Clear(); Add(new cMenuEditIntItem( tr("Setup.DVB$Primary DVB interface"), &data.PrimaryDVB, 1, cDevice::NumDevices())); - Add(new cMenuEditStraItem(tr("Setup.DVB$Video display format"), &data.VideoDisplayFormat, 3, videoDisplayFormatTexts)); Add(new cMenuEditBoolItem(tr("Setup.DVB$Video format"), &data.VideoFormat, "4:3", "16:9")); + if (data.VideoFormat == 0) + Add(new cMenuEditStraItem(tr("Setup.DVB$Video display format"), &data.VideoDisplayFormat, 3, videoDisplayFormatTexts)); Add(new cMenuEditBoolItem(tr("Setup.DVB$Use Dolby Digital"), &data.UseDolbyDigital)); Add(new cMenuEditStraItem(tr("Setup.DVB$Update channels"), &data.UpdateChannels, 5, updateChannelsTexts)); Add(new cMenuEditIntItem( tr("Setup.DVB$Audio languages"), &numAudioLanguages, 0, I18nNumLanguages)); @@ -1964,10 +1978,12 @@ eOSState cMenuSetupDVB::ProcessKey(eKeys Key) int oldPrimaryDVB = ::Setup.PrimaryDVB; int oldVideoDisplayFormat = ::Setup.VideoDisplayFormat; bool oldVideoFormat = ::Setup.VideoFormat; + bool newVideoFormat = data.VideoFormat; int oldnumAudioLanguages = numAudioLanguages; eOSState state = cMenuSetupBase::ProcessKey(Key); if (Key != kNone) { + bool DoSetup = data.VideoFormat != newVideoFormat; if (numAudioLanguages != oldnumAudioLanguages) { for (int i = oldnumAudioLanguages; i < numAudioLanguages; i++) { data.AudioLanguages[i] = 0; @@ -1984,8 +2000,10 @@ eOSState cMenuSetupDVB::ProcessKey(eKeys Key) } } data.AudioLanguages[numAudioLanguages] = -1; - Setup(); + DoSetup = true; } + if (DoSetup) + Setup(); } if (state == osBack && Key == kOk) { if (::Setup.PrimaryDVB != oldPrimaryDVB) @@ -3048,7 +3066,7 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause) cRecordControl::~cRecordControl() { - Stop(true); + Stop(); free(instantId); free(fileName); } @@ -3083,16 +3101,11 @@ bool cRecordControl::GetEvent(void) return false; } -void cRecordControl::Stop(bool KeepInstant) +void cRecordControl::Stop(void) { if (timer) { DELETENULL(recorder); timer->SetRecording(false); - if ((IsInstant() && !KeepInstant) || (timer->IsSingleEvent() && timer->StopTime() <= time(NULL))) { - isyslog("deleting timer %d", timer->Index() + 1); - Timers.Del(timer); - Timers.SetModified(); - } timer = NULL; cStatus::MsgRecording(device, NULL); cRecordingUserCommand::InvokeCommand(RUC_AFTERRECORDING, fileName); @@ -3153,8 +3166,16 @@ void cRecordControls::Stop(const char *InstantId) for (int i = 0; i < MAXRECORDCONTROLS; i++) { if (RecordControls[i]) { const char *id = RecordControls[i]->InstantId(); - if (id && strcmp(id, InstantId) == 0) + if (id && strcmp(id, InstantId) == 0) { + cTimer *timer = RecordControls[i]->Timer(); RecordControls[i]->Stop(); + if (timer) { + isyslog("deleting timer %s", *timer->ToDescr()); + Timers.Del(timer); + Timers.SetModified(); + } + break; + } } } } @@ -3165,7 +3186,7 @@ void cRecordControls::Stop(cDevice *Device) if (RecordControls[i]) { if (RecordControls[i]->Device() == Device) { isyslog("stopping recording on DVB device %d due to higher priority", Device->CardIndex() + 1); - RecordControls[i]->Stop(true); + RecordControls[i]->Stop(); } } } @@ -3242,7 +3263,7 @@ void cRecordControls::ChannelDataModified(cChannel *Channel) if (RecordControls[i]->Timer() && RecordControls[i]->Timer()->Channel() == Channel) { if (RecordControls[i]->Device()->ProvidesTransponder(Channel)) { // avoids retune on devices that don't really access the transponder isyslog("stopping recording due to modification of channel %d", Channel->Number()); - RecordControls[i]->Stop(true); + RecordControls[i]->Stop(); // This will restart the recording, maybe even from a different // device in case conditional access has changed. } -- cgit v1.2.3