Version 1.2.1

- Fixed OSD access in case none of the devices provides one (thanks to Axel
  Gruber for reporting this one).
- Fixed editing channels ('timers.conf' was not written after a channel has
  been modified, which could result in errors upon the next start of VDR).
- Fixed a crash when canceling a newly created timer (thanks to Thomas Schmidt
  for reporting this one).
- Completed Hungarian language texts (thanks to Istvan Koenigsberger and Guido
  Josten).
- Fixed device handling in the CICAM menu in case a VDR instance was started
  with a specific device using the -D option (thanks to Gerald Raaf for reporting
  ths one).
- Initializing the current channel to '1' to avoid a crash in creating a new
  timer in case there is no device in the system that can actually receive any
  channel (thanks to Malcolm Caldwell for reporting this one).
- Some corrections to the Finnish OSD texts (thanks to Niko Tarnanen and Rolf
  Ahrenberg).
This commit is contained in:
Klaus Schmidinger 2003-06-09 18:00:00 +02:00
parent 40334f3e09
commit 64ddfca3b0
8 changed files with 110 additions and 90 deletions

View File

@ -90,6 +90,7 @@ Peter Hofmann <software@pxh.de>
Axel Gruber <axel@agm.de>
for his support in keeping the Premiere World channels up to date in 'channels.conf'
for helping to debug support for Viaccess CAMs
for reporting a problem in case none of the devices provides an OSD
Arnold Niessen <niessen@iae.nl> <arnold.niessen@philips.com>
for translating OSD texts to the Dutch language
@ -370,6 +371,8 @@ Gerald Raaf <graaf@attglobal.net>
for helping to fix the still picture workaround in case the progress display
is active
for his support in keeping the Premiere World channels up to date in 'channels.conf'
for reporting a problem in device handling in the CICAM menu in case a VDR
instance was started with a specific device using the -D option
Andreas Roedl <flood@flood-net.de>
for adding some DVB-T channels for Berlin (Germany) to channels.conf.terr
@ -617,6 +620,8 @@ Sascha Volkenandt <sascha@akv-soft.de>
Malcolm Caldwell <malcolm.caldwell@ntu.edu.au>
for modifying LOF handling to allow for C-band reception
for reporting a crash in creating a new timer in case there is no device in the
system that can actually receive any channel
Ludwig Nussel <ludwig.nussel@web.de>
for making the LIRC thread avoid high CPU load in case the connection to LIRC gets lost
@ -711,3 +716,6 @@ Karim Afifi <karim.afifi@free.fr>
Jon Burgess <mplayer@jburgess.uklinux.net>
for pointing out a problem with NPTL ("Native Posix Thread Library")
Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
for reporting a crash when cancelling a newly created timer

19
HISTORY
View File

@ -2234,3 +2234,22 @@ Video Disk Recorder Revision History
(thanks to Jon Burgess for pointing this out).
- Some corrections to the Finnish OSD texts (thanks to Jaakko Hyvätti).
- Officially released as version 1.2.0.
2003-06-09: Version 1.2.1
- Fixed OSD access in case none of the devices provides one (thanks to Axel
Gruber for reporting this one).
- Fixed editing channels ('timers.conf' was not written after a channel has
been modified, which could result in errors upon the next start of VDR).
- Fixed a crash when cancelling a newly created timer (thanks to Thomas Schmidt
for reporting this one).
- Completed Hungarian language texts (thanks to Istvan Koenigsberger and Guido
Josten).
- Fixed device handling in the CICAM menu in case a VDR instance was started
with a specific device using the -D option (thanks to Gerald Raaf for reporting
ths one).
- Initializing the current channel to '1' to avoid a crash in creating a new
timer in case there is no device in the system that can actually receive any
channel (thanks to Malcolm Caldwell for reporting this one).
- Some corrections to the Finnish OSD texts (thanks to Niko Tarnanen and Rolf
Ahrenberg).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.163 2003/05/31 09:10:58 kls Exp $
* $Id: config.h 1.164 2003/06/06 12:28:20 kls Exp $
*/
#ifndef __CONFIG_H
@ -19,8 +19,8 @@
#include "device.h"
#include "tools.h"
#define VDRVERSION "1.2.0"
#define VDRVERSNUM 10200 // Version * 10000 + Major * 100 + Minor
#define VDRVERSION "1.2.1"
#define VDRVERSNUM 10201 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99
#define MAXLIFETIME 99

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.c 1.44 2003/05/25 10:57:59 kls Exp $
* $Id: device.c 1.45 2003/06/08 09:19:59 kls Exp $
*/
#include "device.h"
@ -28,7 +28,7 @@
int cDevice::numDevices = 0;
int cDevice::useDevice = 0;
int cDevice::nextCardIndex = 0;
int cDevice::currentChannel = 0;
int cDevice::currentChannel = 1;
cDevice *cDevice::device[MAXDEVICES] = { NULL };
cDevice *cDevice::primaryDevice = NULL;

60
i18n.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: i18n.c 1.125 2003/06/01 08:49:47 kls Exp $
* $Id: i18n.c 1.128 2003/06/09 09:49:29 kls Exp $
*
* Translations provided by:
*
@ -222,7 +222,7 @@ const tI18nPhrase Phrases[] = {
"Entoles gia egrafes",
"Inspelningskommandon",
"",// TODO
"",// TODO
"Parancsok a felvett filmekhez",
"Ordres de gravació",
},
{ "Edit channel",
@ -733,7 +733,7 @@ const tI18nPhrase Phrases[] = {
"Epanafora",
"Återställ",
"",//TODO
"",//TODO
"Reset",
"Reiniciar",
},
// Confirmations:
@ -932,7 +932,7 @@ const tI18nPhrase Phrases[] = {
"Pressione qualquer tecla para cancelar",
"Appuyez sur une touche pour annuler l'arrêt",
"Trykk en tast for ikke å slå av",
"Peru sammutus painamalla jotain näppäintä",
"Peru sammutus painamalla mitä tahansa näppäintä",
"Dowolny przycisk zatrzyma wylaczanie",
"Pulse una tecla para interrumpir apagar",
"Piese ena pliktro na akirothei o termatismos",
@ -1007,7 +1007,7 @@ const tI18nPhrase Phrases[] = {
"Pigi",
"Källa",
"",//TODO
"",//TODO
"Forrás",
"Origen",
},
{ "Srate",
@ -1587,7 +1587,7 @@ const tI18nPhrase Phrases[] = {
"To kanali den ine diathesimo",
"Kanalen ej tillgänglig!",
"",//TODO
"",//TODO
"A csatorna nem elérhetö",
"Canal no disponible!",
},
{ "Channel settings are not unique!",
@ -1604,7 +1604,7 @@ const tI18nPhrase Phrases[] = {
"Oi rithmiseis tou kanaliou simpiptoun me allo!",
"Kanalinställningarna är ej unika!",
"",//TODO
"",//TODO
"A csatornabeállítások nem egyértelmüek",
"Propietats del canal duplicades!",
},
{ "Channel locked (recording)!",
@ -1655,7 +1655,7 @@ const tI18nPhrase Phrases[] = {
"Den exoun oristei simeia gia epexsergasia",
"Det finns inga redigeringsmärken",//TODO
"",//TODO
"",//TODO
"A vágópont nincs kijelölve",//TODO
"No hi ha marques d'edició definides",
},
{ "Can't start editing process!",
@ -1740,7 +1740,7 @@ const tI18nPhrase Phrases[] = {
"Den mpori na aniksi to CAM menou!",
"Det går inte att öppna CAM menyn!",
"",//TODO
"",//TODO
"A CAM-Menü nem nyitható",
"No puc obrir el menú de la CAM!",
},
{ "Can't reset CAM!",
@ -1757,7 +1757,7 @@ const tI18nPhrase Phrases[] = {
"Adinato na gini epanafora sto CAM",
"Kan inte återställa CAM!",
"",//TODO
"",//TODO
"A CAM-Reset nem sikerült",
"No puc reiniciar la CAM!",
},
{ "CAM has been reset",
@ -1774,7 +1774,7 @@ const tI18nPhrase Phrases[] = {
"Sto CAM egine apanafora",
"CA modulen har återställts",
"",//TODO
"",//TODO
"A CAM vissza lett állítva",
"CAM reiniciada",
},
// Setup pages:
@ -2405,7 +2405,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Prioritet för direktinspelning",
"",// TODO
"",// TODO
"Szünet prioritás",
"Prioritat de la pausa",
},
{ "Setup.Recording$Pause lifetime (d)",
@ -2422,7 +2422,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Livstid för direktinspelning (dagar)",
"",// TODO
"",// TODO
"Szünet élettartama",
"Durada de la pausa (d)",
},
{ "Setup.Recording$Use episode name",
@ -2592,7 +2592,7 @@ const tI18nPhrase Phrases[] = {
"Resume ID",// TODO
"Återuppta ID",
"Resume ID",// TODO
"Resume ID",// TODO
"Lejátszás ID",
"ID de Continuar",
},
{ "Setup.Miscellaneous$Min. event timeout (min)",
@ -2696,7 +2696,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
" abcdefghijklmnopqrstuvxyzåäö0123456789-.#~",
" abcdefghijklmnopqrstuvwxyz0123456789-.#~",
" aábcdeéfghijklmnoóöpqrstuúüvwxyz0123456789-.,#~",
" aábcdeéfghiíjklmnoóöpqrstuúüvwxyz0123456789-.,#~",
" aàbcçdeéèfghiíjklmnoòpqrstuúvwxyz0123456789-.,#~_·",
},
// Learning keys:
@ -2742,7 +2742,7 @@ const tI18nPhrase Phrases[] = {
"Pressione qualquer tecla do telecomando",
"Appuyer sur une touche de la télécommande",
"Trykk en av tastene på fjernkontrollen",
"Paina jotain kaukosäätimen näppäintä",
"Paina mitä tahansa kaukosäätimen näppäintä",
"Nacisnac klawisz pilota",
"Pulse una tecla en el telemando",
"Piese ena pliktro sto tilexiristirio",
@ -2901,7 +2901,7 @@ const tI18nPhrase Phrases[] = {
"Pata 'Menou' gia prosperasi aftou tou pliktrou",
"Tryck 'Meny' för att hoppa över denna knapp.",
"",// TODO
"",// TODO
"A Menü gombot nyomni ennek a gombnak a kihagyásához",
"Premeu 'Menú' per obviar aquesta tecla",
},
{ "Phase 3: Saving key codes",
@ -3140,7 +3140,7 @@ const tI18nPhrase Phrases[] = {
"Anametadosi",
"Spela upp",
"",// TODO
"",// TODO
"Lejátszás",
"Reproduir",
},
{ "Pause",
@ -3157,7 +3157,7 @@ const tI18nPhrase Phrases[] = {
"Dialima",
"Pausa",
"",// TODO
"",// TODO
"Szünet",
"Pausa",
},
{ "Stop",
@ -3174,7 +3174,7 @@ const tI18nPhrase Phrases[] = {
"Terma",
"Stoppa",
"",// TODO
"",// TODO
"Stop",
"Aturar",
},
{ "Record",
@ -3191,7 +3191,7 @@ const tI18nPhrase Phrases[] = {
"Egrafi",
"Spela in",
"",// TODO
"",// TODO
"Felvenni",
"Gravar",
},
{ "FastFwd",
@ -3208,7 +3208,7 @@ const tI18nPhrase Phrases[] = {
"Girisma mprosta",
"Snabbspolning framåt",
"",// TODO
"",// TODO
"Elöre pörgetni",
"Endavant ràpidament",
},
{ "FastRew",
@ -3225,7 +3225,7 @@ const tI18nPhrase Phrases[] = {
"Girisma piso",
"Snabbspolning bakåt",
"",// TODO
"",// TODO
"Vissza pörgetni",
"Enrera ràpidament",
},
{ "Power",
@ -3259,7 +3259,7 @@ const tI18nPhrase Phrases[] = {
"Kanali+",
"Kanal+",
"",// TODO
"",// TODO
"Csatorna+",
"Canal +",
},
{ "Channel-",
@ -3276,7 +3276,7 @@ const tI18nPhrase Phrases[] = {
"Kanali-",
"Kanal-",
"",// TODO
"",// TODO
"Csatorna-",
"Canal -",
},
{ "Volume+",
@ -3379,7 +3379,7 @@ const tI18nPhrase Phrases[] = {
"klisto",
"av",
"",// TODO
"",// TODO
"ki",
"off",
},
{ "none",
@ -3396,7 +3396,7 @@ const tI18nPhrase Phrases[] = {
"kanena",
"ingen",
"",// TODO
"",// TODO
"semmi",
"cap",
},
{ "auto",
@ -3413,7 +3413,7 @@ const tI18nPhrase Phrases[] = {
"aftomato",
"automatisk",
"",// TODO
"",// TODO
"auto",
"auto",
},
{ "top",
@ -3685,7 +3685,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"Pausar direktinspelningen",
"",// TODO
"",// TODO
"Az élö adás megállítva...",
"Pausa d'emissió en directe...",
},
{ "This plugin has no setup parameters!",
@ -3702,7 +3702,7 @@ const tI18nPhrase Phrases[] = {
"Afto to plugin den exi parametrous",
"Den här modulen har inga parametrar",
"",// TODO
"",// TODO
"Ennek a plugin-nak nincs setup-parametere!",
"Aquest plugin no admet configuració!",
},
{ NULL }

78
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 1.253 2003/05/30 09:53:57 kls Exp $
* $Id: menu.c 1.256 2003/06/07 12:31:57 kls Exp $
*/
#include "menu.h"
@ -615,6 +615,7 @@ eOSState cMenuEditChannel::ProcessKey(eKeys Key)
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), data.ToText());
Timers.Save();
state = osBack;
}
else {
@ -834,21 +835,21 @@ private:
cTimer *timer;
cTimer data;
int channel;
bool deleteIfCancelled;
bool addIfConfirmed;
cMenuEditDateItem *firstday;
void SetFirstDayItem(void);
public:
cMenuEditTimer(int Index, bool New = false);
cMenuEditTimer(cTimer *Timer, bool New = false);
virtual ~cMenuEditTimer();
virtual eOSState ProcessKey(eKeys Key);
};
cMenuEditTimer::cMenuEditTimer(int Index, bool New)
cMenuEditTimer::cMenuEditTimer(cTimer *Timer, bool New)
:cOsdMenu(tr("Edit timer"), 12)
{
firstday = NULL;
timer = Timers.Get(Index);
deleteIfCancelled = New;
timer = Timer;
addIfConfirmed = New;
if (timer) {
data = *timer;
if (New)
@ -869,12 +870,8 @@ cMenuEditTimer::cMenuEditTimer(int Index, bool New)
cMenuEditTimer::~cMenuEditTimer()
{
if (timer && deleteIfCancelled) {
int Index = timer->Index();
Timers.Del(timer);
Timers.Save();
isyslog("timer %d deleted", Index + 1);
}
if (timer && addIfConfirmed)
delete timer; // apparently it wasn't confirmed
Timers.DecBeingEdited();
}
@ -908,14 +905,18 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key)
}
if (!*data.file)
strcpy(data.file, data.Channel()->Name());
if (timer && memcmp(timer, &data, sizeof(data)) != 0) {
*timer = data;
if (timer->active)
timer->active = 1; // allows external programs to mark active timers with values > 1 and recognize if the user has modified them
if (timer) {
if (memcmp(timer, &data, sizeof(data)) != 0) {
*timer = data;
if (timer->active)
timer->active = 1; // allows external programs to mark active timers with values > 1 and recognize if the user has modified them
}
if (addIfConfirmed)
Timers.Add(timer);
Timers.Save();
isyslog("timer %d modified (%s)", timer->Index() + 1, timer->active ? "active" : "inactive");
isyslog("timer %d %s (%s)", timer->Index() + 1, addIfConfirmed ? "added" : "modified", timer->active ? "active" : "inactive");
addIfConfirmed = false;
}
deleteIfCancelled = false;
}
return osBack;
case kRed:
@ -1033,19 +1034,14 @@ eOSState cMenuTimers::Edit(void)
if (HasSubMenu() || Count() == 0)
return osContinue;
isyslog("editing timer %d", CurrentTimer()->Index() + 1);
return AddSubMenu(new cMenuEditTimer(CurrentTimer()->Index()));
return AddSubMenu(new cMenuEditTimer(CurrentTimer()));
}
eOSState cMenuTimers::New(void)
{
if (HasSubMenu())
return osContinue;
cTimer *timer = new cTimer;
Timers.Add(timer);
Add(new cMenuTimerItem(timer), true);
Timers.Save();
isyslog("timer %d added", timer->Index() + 1);
return AddSubMenu(new cMenuEditTimer(timer->Index(), true));
return AddSubMenu(new cMenuEditTimer(new cTimer, true));
}
eOSState cMenuTimers::Delete(void)
@ -1094,8 +1090,7 @@ eOSState cMenuTimers::Summary(void)
eOSState cMenuTimers::ProcessKey(eKeys Key)
{
cTimer *ti = HasSubMenu() ? CurrentTimer() : NULL;
int TimerNumber = ti ? ti->Index() : -1;
int TimerNumber = HasSubMenu() ? Count() : -1;
eOSState state = cOsdMenu::ProcessKey(Key);
if (state == osUnknown) {
@ -1112,9 +1107,9 @@ eOSState cMenuTimers::ProcessKey(eKeys Key)
default: break;
}
}
if (TimerNumber >= 0 && !HasSubMenu() && !Timers.Get(TimerNumber)) {
// a newly created timer wasn't confirmed with Ok
cOsdMenu::Del(Current());
if (TimerNumber >= 0 && !HasSubMenu() && Timers.Get(TimerNumber)) {
// a newly created timer was confirmed with Ok
Add(new cMenuTimerItem(Timers.Get(TimerNumber)), true);
Display();
}
return state;
@ -1274,16 +1269,11 @@ eOSState cMenuWhatsOn::Record(void)
if (item) {
cTimer *timer = new cTimer(item->eventInfo);
cTimer *t = Timers.GetTimer(timer);
if (!t) {
Timers.Add(timer);
Timers.Save();
isyslog("timer %d added", timer->Index() + 1);
}
else {
if (t) {
delete timer;
timer = t;
}
return AddSubMenu(new cMenuEditTimer(timer->Index(), !t));
return AddSubMenu(new cMenuEditTimer(timer, !t));
}
return osContinue;
}
@ -1408,16 +1398,11 @@ eOSState cMenuSchedule::Record(void)
if (item) {
cTimer *timer = new cTimer(item->eventInfo);
cTimer *t = Timers.GetTimer(timer);
if (!t) {
Timers.Add(timer);
Timers.Save();
isyslog("timer %d added", timer->Index() + 1);
}
else {
if (t) {
delete timer;
timer = t;
}
return AddSubMenu(new cMenuEditTimer(timer->Index(), !t));
return AddSubMenu(new cMenuEditTimer(timer, !t));
}
return osContinue;
}
@ -2124,8 +2109,9 @@ cMenuSetupCICAM::cMenuSetupCICAM(void)
for (int d = 0; d < cDevice::NumDevices(); d++) {
for (int i = 0; i < 2; i++) {
char buffer[32];
snprintf(buffer, sizeof(buffer), "%s%d %d", tr("Setup.CICAM$CICAM DVB"), d + 1, i + 1);
Add(new cMenuEditCaItem(buffer, &data.CaCaps[d][i]));
int CardIndex = cDevice::GetDevice(d)->CardIndex();
snprintf(buffer, sizeof(buffer), "%s%d %d", tr("Setup.CICAM$CICAM DVB"), CardIndex + 1, i + 1);
Add(new cMenuEditCaItem(buffer, &data.CaCaps[CardIndex][i]));
}
}
SetHelpKeys();

22
osd.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: osd.c 1.42 2003/05/03 14:46:38 kls Exp $
* $Id: osd.c 1.43 2003/06/04 16:13:00 kls Exp $
*/
#include "osd.h"
@ -99,6 +99,8 @@ void cOsd::Open(int w, int h)
//XXX
osd = OpenRaw(x, y);
//XXX TODO this should be transferred to the places where the individual windows are requested (there's too much detailed knowledge here!)
if (!osd)
return;
if (h / lineHeight == 5) { //XXX channel display
osd->Create(0, 0, w, h, 4);
}
@ -145,7 +147,8 @@ void cOsd::Clear(void)
Fill(0, 0, cols, rows, clrBackground);
refresh();
#else
osd->Clear();
if (osd)
osd->Clear();
#endif
}
@ -161,14 +164,16 @@ void cOsd::Fill(int x, int y, int w, int h, eDvbColor color)
}
wsyncup(window); // shouldn't be necessary because of 'syncok()', but w/o it doesn't work
#else
osd->Fill(x * charWidth, y * lineHeight, (x + w) * charWidth - 1, (y + h) * lineHeight - 1, color);
if (osd)
osd->Fill(x * charWidth, y * lineHeight, (x + w) * charWidth - 1, (y + h) * lineHeight - 1, color);
#endif
}
void cOsd::SetBitmap(int x, int y, const cBitmap &Bitmap)
{
#ifndef DEBUG_OSD
osd->SetBitmap(x, y, Bitmap);
if (osd)
osd->SetBitmap(x, y, Bitmap);
#endif
}
@ -200,7 +205,7 @@ int cOsd::Width(unsigned char c)
#ifdef DEBUG_OSD
return 1;
#else
return osd->Width(c);
return osd ? osd->Width(c) : 1;
#endif
}
@ -209,7 +214,7 @@ int cOsd::WidthInCells(const char *s)
#ifdef DEBUG_OSD
return strlen(s);
#else
return (osd->Width(s) + charWidth - 1) / charWidth;
return osd ? (osd->Width(s) + charWidth - 1) / charWidth : strlen(s);
#endif
}
@ -218,7 +223,7 @@ eDvbFont cOsd::SetFont(eDvbFont Font)
#ifdef DEBUG_OSD
return Font;
#else
return osd->SetFont(Font);
return osd ? osd->SetFont(Font) : Font;
#endif
}
@ -231,7 +236,8 @@ void cOsd::Text(int x, int y, const char *s, eDvbColor colorFg, eDvbColor colorB
wmove(window, y, x); // ncurses wants 'y' before 'x'!
waddnstr(window, s, cols - x);
#else
osd->Text(x * charWidth, y * lineHeight, s, colorFg, colorBg);
if (osd)
osd->Text(x * charWidth, y * lineHeight, s, colorFg, colorBg);
#endif
}

View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
* $Id: svdrp.c 1.51 2003/04/27 14:21:07 kls Exp $
* $Id: svdrp.c 1.52 2003/06/06 13:30:52 kls Exp $
*/
#include "svdrp.h"
@ -790,6 +790,7 @@ void cSVDRP::CmdMODC(const char *Option)
Channels.ReNumber();
Channels.Save();
isyslog("modifed channel %d %s", channel->Number(), channel->ToText());
Timers.Save();
Reply(250, "%d %s", channel->Number(), channel->ToText());
}
else