diff options
author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2002-02-10 18:00:00 +0100 |
---|---|---|
committer | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2002-02-10 18:00:00 +0100 |
commit | a1da0e5c5de55009716e2c327dda16c61c1dae83 (patch) | |
tree | 73148d197061f65d2f6d29b56b55b77f9428c17d | |
parent | ef0a53af7282b14bd40f2087de28fc12a94e672b (diff) | |
download | vdr-patch-lnbsharing-a1da0e5c5de55009716e2c327dda16c61c1dae83.tar.gz vdr-patch-lnbsharing-a1da0e5c5de55009716e2c327dda16c61c1dae83.tar.bz2 |
Version 0.99vdr-0.99
- Fixed a bug in moving timers or channels to the last position in the list
(thanks to Matthias Schniedermeyer for helping to debug this one).
- Changed the estimated data rate for calculating the remaining disk capacity
to 25.75 MB/min.
- Only reporting the 'EPG bugfix statistics' if there really were any fixes.
- Added Finnish language texts (thanks to Hannu Savolainen).
- Reverted to the previous way of searching for the EPG record of the current
recording in case of a periodic timer (i.e. taking the one that is in the
middle between start and end time).
- Added a typedef for 'in_addr_t' to make it work with glibc < 2.2 (thanks to
Jürgen Schmidt).
- When the last entry in a "Recordings" menu page is deleted, that page is now
automatically closed (suggested by Uwe Freese).
- Changed the default name for instant recordings to "TITLE EPISODE" (avoiding
the '-').
- If Setup.ShowInfoOnChSwitch is set to "no", the box for the EPG display is no
longer shown (thanks to Andy Grobb).
- If compiled with VFAT=1, characters that can't be handled by a VFAT system are
now encoded to '#XX'.
- When the user presses the "Power" button and there is a timer about to start
recording within Setup.MinEventTimeout minutes, there is now a confirmation
prompt telling the user that there is an upcoming timer event.
- If a recording has no episode title, the trailing '~' is no longer shown in
the progress display.
-rw-r--r-- | CONTRIBUTORS | 16 | ||||
-rw-r--r-- | HISTORY | 27 | ||||
-rw-r--r-- | channels.conf | 1 | ||||
-rw-r--r-- | config.c | 4 | ||||
-rw-r--r-- | config.h | 6 | ||||
-rw-r--r-- | eit.c | 47 | ||||
-rw-r--r-- | gmon.out | bin | 101224 -> 0 bytes | |||
-rw-r--r-- | i18n.c | 182 | ||||
-rw-r--r-- | menu.c | 27 | ||||
-rw-r--r-- | recording.c | 83 | ||||
-rw-r--r-- | tools.c | 6 | ||||
-rw-r--r-- | vdr.c | 11 |
12 files changed, 359 insertions, 51 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index e0b9ee1..9ccf53d 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -47,6 +47,7 @@ Matthias Schniedermeyer <ms@citd.de> for implementing the 'MarkInstantRecord' setup option for his "schnitt" tools for his "master-timer" tool + for helping to debug the "move to last position in list" bug Miha Setina <mihasetina@softhome.net> for translating the OSD texts to the Slovenian language @@ -161,6 +162,7 @@ Simon Bauschulte <SemiSchwabe@Brutzel.de> Andy Grobb <Charly98@01019freenet.de> for completing storing the current audio volume in the setup.conf file + for fixing the EPG display in case Setup.ShowInfoOnChSwitch is set to "no" Thomas Heiligenmann <thomas@heiligenmann.de> for implementing the SVDRP commands LSTR and DELR @@ -189,3 +191,17 @@ Davide Achilli <davide@objsystem.it> Michael Paar <mpaar@uumail.de> for enabling recording of radio channels + +Hannu Savolainen <hannu@opensound.com> + for translating the OSD texts to the Finnish language + +Jürgen Schmidt <ju@ct.heise.de> + for fixing a problem with 'in_addr_t' on systems with glibc < 2.2. + +Uwe Freese <mail@uwe-freese.de> + for suggesting to automatically close an empty recordings page after deleting + an entry + +Rainer Zocholl <Usenet-372114@zocki.toppoint.de> + for suggesting a confirmation prompt when the user presses the "Power" button + and there is an upcoming timer event @@ -969,3 +969,30 @@ Video Disk Recorder Revision History radio recordings. Thanks to Michael Paar. - Fixed a problem with the ERR macro defined by ncurses.h (thanks to Artur Skawina). + +2002-02-10: Version 0.99 + +- Fixed a bug in moving timers or channels to the last position in the list + (thanks to Matthias Schniedermeyer for helping to debug this one). +- Changed the estimated data rate for calculating the remaining disk capacity + to 25.75 MB/min. +- Only reporting the 'EPG bugfix statistics' if there really were any fixes. +- Added Finnish language texts (thanks to Hannu Savolainen). +- Reverted to the previous way of searching for the EPG record of the current + recording in case of a periodic timer (i.e. taking the one that is in the + middle between start and end time). +- Added a typedef for 'in_addr_t' to make it work with glibc < 2.2 (thanks to + Jürgen Schmidt). +- When the last entry in a "Recordings" menu page is deleted, that page is now + automatically closed (suggested by Uwe Freese). +- Changed the default name for instant recordings to "TITLE EPISODE" (avoiding + the '-'). +- If Setup.ShowInfoOnChSwitch is set to "no", the box for the EPG display is no + longer shown (thanks to Andy Grobb). +- If compiled with VFAT=1, characters that can't be handled by a VFAT system are + now encoded to '#XX'. +- When the user presses the "Power" button and there is a timer about to start + recording within Setup.MinEventTimeout minutes, there is now a confirmation + prompt telling the user that there is an upcoming timer event. +- If a recording has no episode title, the trailing '~' is no longer shown in + the progress display. diff --git a/channels.conf b/channels.conf index 87796ae..8d58e61 100644 --- a/channels.conf +++ b/channels.conf @@ -200,3 +200,4 @@ VIVA2:12552:v:0:22000:171:172:0:0:12120 MTV German:12699:v:0:22000:3031:3032:0:0:28643 IFA-TV:10832:h:0:22000:132:133:32:0:7251 QVC Germany:12552:v:0:22000:165:166:0:0:12100 +TANGOTV:10832:h:1:22000:61:62:0:0:61920 @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.c 1.82 2002/02/03 15:25:44 kls Exp $ + * $Id: config.c 1.83 2002/02/10 11:39:00 kls Exp $ */ #include "config.h" @@ -847,7 +847,7 @@ cSetup::cSetup(void) ShowInfoOnChSwitch = 1; MenuScrollPage = 1; MarkInstantRecord = 1; - strcpy(NameInstantRecord, "TITLE-EPISODE"); + strcpy(NameInstantRecord, "TITLE EPISODE"); LnbSLOF = 11700; LnbFrequLo = 9750; LnbFrequHi = 10600; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.93 2002/02/03 15:16:21 kls Exp $ + * $Id: config.h 1.95 2002/02/10 15:44:40 kls Exp $ */ #ifndef __CONFIG_H @@ -19,7 +19,7 @@ #include "eit.h" #include "tools.h" -#define VDRVERSION "0.99pre5" +#define VDRVERSION "0.99" #define MAXPRIORITY 99 #define MAXLIFETIME 99 @@ -174,6 +174,8 @@ public: const char *Execute(void); }; +typedef uint32_t in_addr_t; //XXX from /usr/include/netinet/in.h (apparently this is not defined on systems with glibc < 2.2) + class cSVDRPhost : public cListObject { private: struct in_addr addr; @@ -16,7 +16,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: eit.c 1.33 2002/02/02 12:12:26 kls Exp $ + * $Id: eit.c 1.34 2002/02/09 14:48:43 kls Exp $ ***************************************************************************/ #include "eit.h" @@ -352,7 +352,7 @@ void cEventInfo::Dump(FILE *f, const char *Prefix) const } } -#define MAXEPGBUGFIXSTATS 6 +#define MAXEPGBUGFIXSTATS 5 #define MAXEPGBUGFIXCHANS 50 struct tEpgBugFixStats { int hits; @@ -381,32 +381,39 @@ static void EpgBugFixStat(int Number, unsigned int ServiceID) static void ReportEpgBugFixStats(bool Reset = false) { if (Setup.EPGBugfixLevel > 0) { - dsyslog(LOG_INFO, "====================="); - dsyslog(LOG_INFO, "EPG bugfix statistics"); - dsyslog(LOG_INFO, "====================="); - dsyslog(LOG_INFO, "IF SOMEBODY WHO IS IN CHARGE OF THE EPG DATA FOR ONE OF THE LISTED"); - dsyslog(LOG_INFO, "CHANNELS READS THIS: PLEASE TAKE A LOOK AT THE FUNCTION cEventInfo::FixEpgBugs()"); - dsyslog(LOG_INFO, "IN VDR/eit.c TO LEARN WHAT'S WRONG WITH YOUR DATA, AND FIX IT!"); - dsyslog(LOG_INFO, "====================="); - dsyslog(LOG_INFO, "Fix\tHits\tChannels"); + bool GotHits = false; char buffer[1024]; for (int i = 0; i < MAXEPGBUGFIXSTATS; i++) { const char *delim = "\t"; tEpgBugFixStats *p = &EpgBugFixStats[i]; - char *q = buffer; - q += snprintf(q, sizeof(buffer) - (q - buffer), "%d\t%d", i, p->hits); - for (int c = 0; c < p->n; c++) { - cChannel *channel = Channels.GetByServiceID(p->serviceIDs[c]); - if (channel) { - q += snprintf(q, sizeof(buffer) - (q - buffer), "%s%s", delim, channel->name); - delim = ", "; + if (p->hits) { + if (!GotHits) { + dsyslog(LOG_INFO, "====================="); + dsyslog(LOG_INFO, "EPG bugfix statistics"); + dsyslog(LOG_INFO, "====================="); + dsyslog(LOG_INFO, "IF SOMEBODY WHO IS IN CHARGE OF THE EPG DATA FOR ONE OF THE LISTED"); + dsyslog(LOG_INFO, "CHANNELS READS THIS: PLEASE TAKE A LOOK AT THE FUNCTION cEventInfo::FixEpgBugs()"); + dsyslog(LOG_INFO, "IN VDR/eit.c TO LEARN WHAT'S WRONG WITH YOUR DATA, AND FIX IT!"); + dsyslog(LOG_INFO, "====================="); + dsyslog(LOG_INFO, "Fix\tHits\tChannels"); + GotHits = true; + } + char *q = buffer; + q += snprintf(q, sizeof(buffer) - (q - buffer), "%d\t%d", i, p->hits); + for (int c = 0; c < p->n; c++) { + cChannel *channel = Channels.GetByServiceID(p->serviceIDs[c]); + if (channel) { + q += snprintf(q, sizeof(buffer) - (q - buffer), "%s%s", delim, channel->name); + delim = ", "; + } } - } - dsyslog(LOG_INFO, "%s", buffer); + dsyslog(LOG_INFO, "%s", buffer); + } if (Reset) p->hits = p->n = 0; } - dsyslog(LOG_INFO, "====================="); + if (GotHits) + dsyslog(LOG_INFO, "====================="); } } diff --git a/gmon.out b/gmon.out Binary files differdeleted file mode 100644 index ea79bc5..0000000 --- a/gmon.out +++ /dev/null @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.51 2002/02/03 14:34:33 kls Exp $ + * $Id: i18n.c 1.53 2002/02/10 15:07:46 kls Exp $ * * Slovenian translations provided by Miha Setina <mihasetina@softhome.net> * Italian translations provided by Alberto Carraro <bertocar@tin.it> @@ -12,6 +12,7 @@ * Portugese translations provided by Paulo Manuel Martins Lopes <pmml@netvita.pt> * French translations provided by Jean-Claude Repetto <jc@repetto.org> * Norwegian translations provided by Jørgen Tvedt <pjtvedt@online.no> + * Finnish translations provided by Hannu Savolainen <hannu@opensound.com> * */ @@ -52,7 +53,7 @@ #include "config.h" #include "tools.h" -const int NumLanguages = 8; +const int NumLanguages = 9; typedef const char *tPhrase[NumLanguages]; @@ -66,6 +67,7 @@ const tPhrase Phrases[] = { "Portugues", "Français", "Norsk", + "Suomi", }, // Menu titles: { "Main", @@ -76,6 +78,7 @@ const tPhrase Phrases[] = { "Principal", "Menu", "Hovedmeny", + "Valikko", }, { "Schedule", "Programm", @@ -85,6 +88,7 @@ const tPhrase Phrases[] = { "Programa", "Programmes", "Programmer", + "Ohjelmat", }, { "Channels", "Kanäle", @@ -94,6 +98,7 @@ const tPhrase Phrases[] = { "Canal", "Chaînes", "Kanaler", + "Kanavat", }, { "Timers", "Timer", @@ -103,6 +108,7 @@ const tPhrase Phrases[] = { "Alarmes", "Programmation", "Timer", + "Ajastin", }, { "Recordings", "Aufzeichnungen", @@ -112,6 +118,7 @@ const tPhrase Phrases[] = { "Gravacoes", "Enregistrements", "Opptak", + "Nauhoitteet", }, { "DVD", "DVD", @@ -121,6 +128,7 @@ const tPhrase Phrases[] = { "DVD", "DVD", "DVD", + "DVD", }, { "Setup", "Einstellungen", @@ -130,6 +138,7 @@ const tPhrase Phrases[] = { "Configurar", "Configuration", "Konfigurasjon", + "Asetukset", }, { "Commands", "Befehle", @@ -139,6 +148,7 @@ const tPhrase Phrases[] = { "Comandos", "Commandes", "Kommandoer", + "Komennot", }, { "Edit Channel", "Kanal Editieren", @@ -148,6 +158,7 @@ const tPhrase Phrases[] = { "Modificar Canal", "Modifier une chaîne", "Editer Kanal", + "Muokkaa kanavaa", }, { "Edit Timer", "Timer Editieren", @@ -157,6 +168,7 @@ const tPhrase Phrases[] = { "Modificar Alarme", "Changer la programmation", "Editer Timer", + "Muokkaa ajastusta", }, { "Event", "Sendung", @@ -165,7 +177,8 @@ const tPhrase Phrases[] = { "Uitzending", "Evento", "Evénement", - "Hendelse" + "Hendelse", + "Tapahtuma", }, { "Summary", "Inhalt", @@ -175,6 +188,7 @@ const tPhrase Phrases[] = { "Resumo", "Résumé", "Sammendrag", + "Yhteenveto", }, { "Schedule - %s", "Programm - %s", @@ -184,6 +198,7 @@ const tPhrase Phrases[] = { "Programa - %s", "Programmes - %s", "Program Guide - %s", + "Ohjelma - %s", }, { "What's on now?", "Was läuft jetzt?", @@ -193,6 +208,7 @@ const tPhrase Phrases[] = { "O que ver agora?", "Programmes en cours", "Hvilket program sendes nå?", + "Nykyinen ohjelma", }, { "What's on next?", "Was läuft als nächstes?", @@ -202,6 +218,7 @@ const tPhrase Phrases[] = { "O que ver depois?", "Prochains programmes", "Hvilket program er neste?", + "Seuraava ohjelma", }, // Button texts (should not be more than 10 characters!): { "Edit", @@ -212,6 +229,7 @@ const tPhrase Phrases[] = { "Modificar", "Modifier", "Editer", + "Muuta", }, { "New", "Neu", @@ -221,6 +239,7 @@ const tPhrase Phrases[] = { "Novo", "Nouveau", "Ny", + "Uusi", }, { "Delete", "Löschen", @@ -230,6 +249,7 @@ const tPhrase Phrases[] = { "Apagar", "Supprimer", "Slett", + "Poista", }, { "Mark", "Markieren", @@ -239,6 +259,7 @@ const tPhrase Phrases[] = { "Marcar", "Marquer", "Marker", + "Merkitse", }, { "Record", "Aufnehmen", @@ -248,6 +269,7 @@ const tPhrase Phrases[] = { "Gravar", "Enregistre", "Ta opp", + "Nauhoita", }, { "Play", "Wiedergabe", @@ -257,6 +279,7 @@ const tPhrase Phrases[] = { "Play", "Lire", "Spill av", + "Toista", }, { "Rewind", "Anfang", @@ -266,6 +289,7 @@ const tPhrase Phrases[] = { "Rebobinar", "Retour", "Spol tilbake", + "Takaisinkel.", }, { "Resume", "Weiter", @@ -275,6 +299,7 @@ const tPhrase Phrases[] = { "Continuar", "Reprendre", "Fortsett", + "Jatka", }, { "Summary", "Inhalt", @@ -284,6 +309,7 @@ const tPhrase Phrases[] = { "Resumo", "Résumé", "Sammendrag", + "Yhteenveto", }, { "Open", "Öffnen", @@ -293,6 +319,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Avaa", }, { "Switch", "Umschalten", @@ -302,6 +329,7 @@ const tPhrase Phrases[] = { "Seleccionar", "Regarder", "Skift til", + "Valitse", }, { "Now", "Jetzt", @@ -311,6 +339,7 @@ const tPhrase Phrases[] = { "Agora", "Maintenant", "Nå", + "Nyt", }, { "Next", "Nächste", @@ -320,6 +349,7 @@ const tPhrase Phrases[] = { "Proximo", "Après", "Neste", + "Seuraava", }, { "Schedule", "Programm", @@ -329,6 +359,7 @@ const tPhrase Phrases[] = { "Programa", "Programme", "Programmer", + "Ohjelmisto", }, { "Language", "Sprache", @@ -338,6 +369,7 @@ const tPhrase Phrases[] = { "", // TODO "Langue", "Språk", + "Kieli", }, { "Eject", "Auswerfen", @@ -347,6 +379,7 @@ const tPhrase Phrases[] = { "", // TODO "Ejection", "", // TODO + "Avaa", }, // Confirmations: { "Delete channel?", @@ -357,6 +390,7 @@ const tPhrase Phrases[] = { "Apagar o Canal?", "Supprimer la chaîne?", "Slette kanal?", + "Poistetaanko kanava?", }, { "Delete timer?", "Timer löschen?", @@ -366,6 +400,7 @@ const tPhrase Phrases[] = { "Apagar o Alarme?", "Supprimer la programmation?", "Slette timer?", + "Poistetaanko ajastus?", }, { "Delete recording?", "Aufzeichnung löschen?", @@ -375,6 +410,7 @@ const tPhrase Phrases[] = { "Apagar Gravacão?", "Supprimer l'enregistrement?", "Slette opptak?", + "Poistetaanko nauhoitus?", }, { "Stop recording?", "Aufzeichnung beenden?", @@ -384,6 +420,7 @@ const tPhrase Phrases[] = { "Parar Gravacão?", "Arrêter l'enregistrement?", "Stoppe opptak?", + "Pysäytetäänkö nauhoitus?", }, { "on primary interface", "auf dem primären Interface", @@ -393,6 +430,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "päävastaanottimella", }, { "Cancel editing?", "Schneiden abbrechen?", @@ -401,7 +439,8 @@ const tPhrase Phrases[] = { "Bewerken afbreken?", "Cancelar Modificar?", "Annuler les modifications?", - "Avbryte redigering", + "Avbryte redigering?", + "Peruutetaanko muokkaus?", }, { "Recording - shut down anyway?", "Aufnahme läuft - trotzdem ausschalten?", @@ -411,6 +450,17 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Nauhoitus kesken - lopetetaanko se?", + }, + { "Recording in %d minutes, shut down anyway?", + "Aufnahme in %d Minuten - trotzdem ausschalten?", + "", // TODO + "", // TODO + "", // TODO + "", // TODO + "", // TODO + "", // TODO + "", // TODO }, { "Press any key to cancel shutdown", "Taste drücken um Shutdown abzubrechen", @@ -420,6 +470,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Peruuta pysäytys painamalla jotakin näppäintä", }, // Channel parameters: { "Name", @@ -430,6 +481,7 @@ const tPhrase Phrases[] = { "Nome", "Nom", "Navn", + "Nimi", }, { "Frequency", "Frequenz", @@ -439,6 +491,7 @@ const tPhrase Phrases[] = { "Frequencia", "Fréquence", "Frekvens", + "Taajuus", }, { "Polarization", "Polarisation", @@ -448,6 +501,7 @@ const tPhrase Phrases[] = { "Polarizacao", "Polarisation", "Polaritet", + "Polarisaatio", }, { "DiSEqC", "DiSEqC", @@ -457,6 +511,7 @@ const tPhrase Phrases[] = { "DiSEqC", "DiSEqC", "DiSEqC", + "DiSEqC", }, { "Srate", "Srate", @@ -466,6 +521,7 @@ const tPhrase Phrases[] = { "Srate", "Fréq. Symbole", "Symbolrate", + "Srate", }, { "Vpid", "Vpid", @@ -475,6 +531,7 @@ const tPhrase Phrases[] = { "Vpid", "PID Vidéo", "Video pid", + "Kuva PID", }, { "Apid1", "Apid1", @@ -484,6 +541,7 @@ const tPhrase Phrases[] = { "Apid1", "PID Audio (1)", "Audio pid1", + "Ääni PID1", }, { "Apid2", "Apid2", @@ -493,6 +551,7 @@ const tPhrase Phrases[] = { "Apid2", "PID Audio (2)", "Audio pid2", + "Ääni PID2", }, { "Dpid1", "Dpid1", @@ -502,6 +561,7 @@ const tPhrase Phrases[] = { "Dpid1", "PID AC3 (1)", "AC3 pid1", + "AC3 PID1", }, { "Dpid2", "Dpid2", @@ -511,6 +571,7 @@ const tPhrase Phrases[] = { "Dpid2", "PID AC3 (2)", "AC3 pid2", + "AC3 PID2", }, { "Tpid", "Tpid", @@ -520,6 +581,7 @@ const tPhrase Phrases[] = { "Tpid", "PID Télétexte", "Teletext pid", + "TekstiTV PID", }, { "CA", "CA", @@ -529,6 +591,7 @@ const tPhrase Phrases[] = { "CA", "Cryptage", "Kortleser", + "Salauskortti", }, { "Pnr", "Pnr", @@ -538,6 +601,7 @@ const tPhrase Phrases[] = { "Pnr", "Num. Progr.", "Program Id", + "Ohjelmatunnus", }, // Timer parameters: { "Active", @@ -548,6 +612,7 @@ const tPhrase Phrases[] = { "Activo", "Actif", "Aktiv", + "Aktiivinen", }, { "Channel", "Kanal", @@ -557,6 +622,7 @@ const tPhrase Phrases[] = { "Canal", "Chaîne", "Kanal", + "Kanava", }, { "Day", "Tag", @@ -566,6 +632,7 @@ const tPhrase Phrases[] = { "Dia", "Jour", "Dag", + "Päivä", }, { "Start", "Anfang", @@ -575,6 +642,7 @@ const tPhrase Phrases[] = { "Inicio", "Début", "Start", + "Aloitus", }, { "Stop", "Ende", @@ -584,6 +652,7 @@ const tPhrase Phrases[] = { "Fim", "Fin", "Slutt", + "Lopetus", }, { "Priority", "Priorität", @@ -593,6 +662,7 @@ const tPhrase Phrases[] = { "Prioridade", "Priorité", "Prioritet", + "Prioriteetti", }, { "Lifetime", "Lebensdauer", @@ -602,6 +672,7 @@ const tPhrase Phrases[] = { "Duracao", "Durée de vie", "Levetid", + "Voimassaolo", }, { "File", "Datei", @@ -611,6 +682,7 @@ const tPhrase Phrases[] = { "Ficheiro", "Fichier", "Filnavn", + "Tiedosto", }, // Error messages: { "Channel is being used by a timer!", @@ -619,8 +691,9 @@ const tPhrase Phrases[] = { "Canale occupato da un timer!", "Kanaal wordt gebruikt door een timer!", "Canal a ser utilizador por um alarme!", - "Cette chaîne est en cours d'utilisation!" + "Cette chaîne est en cours d'utilisation!", "Kanalen er i bruk av en timer!", + "Kanava on ajastimen käytössä!", }, { "Can't switch channel!", "Kanal kann nicht umgeschaltet werden!", @@ -630,6 +703,7 @@ const tPhrase Phrases[] = { "Nao pode mudar de canal!", "Impossible de changer de chaîne!", "Ikke mulig å skifte kanal!", + "Kanavan vaihtaminen ei mahdollista!", }, { "Timer is recording!", "Timer zeichnet gerade auf!", @@ -639,6 +713,7 @@ const tPhrase Phrases[] = { "Alarme a gravar!", "Enregistrement en cours!", "Timer gjør opptak!", + "Ajastinnauhoitus käynnissä!", }, { "Error while accessing recording!", "Fehler beim ansprechen der Aufzeichnung!", @@ -648,6 +723,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Nauhoituksen toistaminen epäonnistui!", }, { "Error while deleting recording!", "Fehler beim Löschen der Aufzeichnung!", @@ -657,6 +733,7 @@ const tPhrase Phrases[] = { "Erro enquanto apagava uma gravacao!", "Erreur de suppression de l'enregistrement!", "Feil under sletting av opptak!", + "Nauhoituksen poistaminen epäonnistui!", }, { "*** Invalid Channel ***", "*** Ungültiger Kanal ***", @@ -666,6 +743,7 @@ const tPhrase Phrases[] = { "*** Canal Invalido! ***", "*** Chaîne invalide! ***", "*** Ugyldig Kanal! ***", + "*** Virheellinen kanavavalinta! ***", }, { "No free DVB device to record!", "Keine freie DVB-Karte zum Aufnehmen!", @@ -674,7 +752,8 @@ const tPhrase Phrases[] = { "Geen vrije DVB kaart om op te nemen!", "Nenhuma placa DVB disponivel para gravar!", "Pas de carte DVB disponible pour l'enregistrement!", - "Ingen ledige DVB enheter for opptak!" + "Ingen ledige DVB enheter for opptak!", + "Ei vapaata vastaanotinta nauhoitusta varten!", }, { "Channel locked (recording)!", "Kanal blockiert (zeichnet auf)!", @@ -684,6 +763,7 @@ const tPhrase Phrases[] = { "Canal bloqueado (a gravar)!", "Chaîne verrouillée (enregistrement en cours)!", "Kanalen er låst (opptak)!", + "Kanava lukittu (nauhoitusta varten)!", }, { "Can't start Transfer Mode!", "Transfer-Mode kann nicht gestartet werden!", @@ -693,6 +773,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Käsittämättömiä teknisiä ongelmia!", }, { "Can't start editing process!", "Schnitt kann nicht gestartet werden!", @@ -702,6 +783,7 @@ const tPhrase Phrases[] = { "Nao pode iniciar a modificacao!", "Impossible de commencer le montage!", "Kan ikke starte redigeringsprosessen!", + "Muokkauksen aloittaminen ei onnistu!", }, { "Editing process already active!", "Schnitt bereits aktiv!", @@ -711,6 +793,7 @@ const tPhrase Phrases[] = { "Processo de modificacao ja activo!", "Montage déjà en cours!", "Redigeringsprosessen er allerede aktiv!", + "Muokkaus on jo käynnissä!", }, { "Can't shutdown - option '-s' not given!", "Shutdown unmöglich - Option '-s' fehlt!", @@ -720,6 +803,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Ei voida sammuttaa '-s' parametria ei annettu!", }, { "Low disk space!", "Platte beinahe voll!", @@ -729,6 +813,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Kovalevy lähes täynnä!", }, // Setup parameters: { "OSD-Language", @@ -739,6 +824,7 @@ const tPhrase Phrases[] = { "Linguagem OSD", "Langue OSD", "OSD Språk", + "Näytön kieli", }, { "PrimaryDVB", "Primäres Interface", @@ -748,6 +834,7 @@ const tPhrase Phrases[] = { "DVB primario", "Première carte DVB", "Hoved DVB-enhet", + "Ensisij. vast.otin", }, { "ShowInfoOnChSwitch", "Info zeigen", @@ -757,6 +844,7 @@ const tPhrase Phrases[] = { "Mostrar info ao mudar de Canal", "Affichage progr. en cours", "Info ved kanalskifte", + "Näytä kanavainfo", }, { "MenuScrollPage", "Seitenweise scrollen", @@ -766,6 +854,7 @@ const tPhrase Phrases[] = { "Scroll da pagina no menu", "Affichage progr. suivant", "Rask rulling i menyer", + "Valikkojen rullaus", }, { "MarkInstantRecord", "Direktaufz. markieren", @@ -775,6 +864,7 @@ const tPhrase Phrases[] = { "Marca de gravacao", "Enregistrement immédiat", "Markere direkteopptak", + "Merkitse välitön nauh.", }, { "NameInstantRecord", "Direktaufz. benennen", @@ -784,6 +874,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Nimeä välitön nauh.", }, { "LnbSLOF", "LnbSLOF", @@ -793,6 +884,7 @@ const tPhrase Phrases[] = { "LnbSLOF", "Limite de bandes LNB", "LO-grensefrekvens", + "LnbSLOF", }, { "LnbFrequLo", "Untere LNB-Frequenz", @@ -802,6 +894,7 @@ const tPhrase Phrases[] = { "Freq LO LNB", "Fréquence basse LNB", "LO-frekvens i lavbåndet", + "LO LNB taajuus", }, { "LnbFrequHi", "Obere LNB-Frequenz", @@ -811,6 +904,7 @@ const tPhrase Phrases[] = { "Freq HI LNB", "Fréquence haute LNB", "LO-frekvens i høybåndet", + "HI LNB taajuus", }, { "DiSEqC", "DiSEqC", @@ -820,6 +914,7 @@ const tPhrase Phrases[] = { "DiSEqC", "DiSEqC", "DiSEqC", + "DiSEqC", }, { "SetSystemTime", "Systemzeit stellen", @@ -829,6 +924,7 @@ const tPhrase Phrases[] = { "Ajustar relogio do sistema", "Ajuster l'heure du système", "Juster system-klokken", + "Vastaanota kellonaika", }, { "MarginStart", "Zeitpuffer bei Anfang", @@ -838,6 +934,7 @@ const tPhrase Phrases[] = { "Margem de inicio", "Marge antérieure", "Opptaks margin (start)", + "Aloitusmarginaali", }, { "MarginStop", "Zeitpuffer bei Ende", @@ -847,6 +944,7 @@ const tPhrase Phrases[] = { "Margem de fim", "Marge postérieure", "Opptaks margin (slutt)", + "Lopetusmarginaali", }, { "EPGScanTimeout", "Zeit bis EPG Scan", @@ -856,6 +954,7 @@ const tPhrase Phrases[] = { "Timeout EPG", "Temps maxi EPG", "Ledig tid før EPG-søk", + "Ohjelmatied. odotusaika", }, { "EPGBugfixLevel", "EPG Fehlerbereinigung", @@ -865,6 +964,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "EPGBugfixLevel", }, { "SVDRPTimeout", "SVDRP Timeout", @@ -874,6 +974,7 @@ const tPhrase Phrases[] = { "Timeout SVDRP", "Temps maxi SVDRP", "Ubrukt SVDRP-levetid", + "SVDRP odotusaika", }, { "SortTimers", "Timer sortieren", @@ -883,6 +984,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Järjestä ajastimet", }, { "PrimaryLimit", "Primär-Limit", @@ -892,6 +994,7 @@ const tPhrase Phrases[] = { "Limite Primario", "Première limite", "Prioritets grense HovedDVB", + "PrimaryLimit", }, { "DefaultPriority", "Default Priorität", @@ -901,6 +1004,7 @@ const tPhrase Phrases[] = { "Prioridade por defeito", "Priorité par défaut", "Normal prioritet (Timer)", + "Oletusprioriteetti", }, { "DefaultLifetime", "Default Lebensdauer", @@ -910,6 +1014,7 @@ const tPhrase Phrases[] = { "Validade por defeito", "Durée de vie par défaut", "Normal levetid (Timer)", + "Oletus voimassaoloaika", }, { "UseSubtitle", "Subtitle verwenden", @@ -919,6 +1024,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Tekstitys käytössä", }, { "RecordingDirs", "Aufn. Verzeichnisse", @@ -928,6 +1034,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Nauhoitushakemistot", }, { "VideoFormat", "Video Format", @@ -937,6 +1044,7 @@ const tPhrase Phrases[] = { "", // TODO "Format vidéo", "TV Format", + "Kuvamuoto", }, { "ChannelInfoPos", "Kanal Info Position", @@ -946,6 +1054,7 @@ const tPhrase Phrases[] = { "", // TODO "Position infos chaînes", "", // TODO + "Kanavainfon sijainti", }, { "OSDwidth", "OSD Breite", @@ -955,6 +1064,7 @@ const tPhrase Phrases[] = { "", // TODO "Largeur affichage", "", // TODO + "Tekstinäytön leveys", }, { "OSDheight", "OSD Höhe", @@ -964,6 +1074,7 @@ const tPhrase Phrases[] = { "", // TODO "Hauteur affichage", "", // TODO + "Tekstinäytön korkeus", }, { "OSDMessageTime", "OSD Nachricht Dauer", @@ -973,6 +1084,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Ilmoitusten näkymisaika", }, { "MaxVideoFileSize", "Max. Video Dateigröße", @@ -982,6 +1094,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Maksimi tiedoston koko", }, { "SplitEditedFiles", "Editierte Dateien zerteilen", @@ -991,6 +1104,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Paloittele muokatut", }, { "MinEventTimeout", "Mindest Event Pause", @@ -1000,6 +1114,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Minimi tapahtuman odotus", }, { "MinUserInactivity", "Mindest User Inaktivität", @@ -1009,6 +1124,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Minimi käyttäjän odotus", }, { "MultiSpeedMode", "MultiSpeed Modus", @@ -1018,6 +1134,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Moninopeustila", }, { "ShowReplayMode", "Wiedergabe Status", @@ -1027,6 +1144,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Näytä toiston tila", }, // The days of the week: { "MTWTFSS", @@ -1037,6 +1155,7 @@ const tPhrase Phrases[] = { "STQQSSD", "LMMJVSD", "MTOTFLS", + "MTKTPLS", }, { "MonTueWedThuFriSatSun", // must all be 3 letters! "MonDieMitDonFreSamSon", @@ -1046,6 +1165,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "MaaTiiKesTorPerLauSun", }, // Learning keys: { "Learning Remote Control Keys", @@ -1056,6 +1176,7 @@ const tPhrase Phrases[] = { "Aprender as teclas do telecomando", "Apprentissage des codes de télécommande", "Lære fjernkontrolltaster", + "Kaukosäätimen näppäinten opettelu", }, { "Phase 1: Detecting RC code type", "Phase 1: FB Code feststellen", @@ -1065,6 +1186,7 @@ const tPhrase Phrases[] = { "Fase 1: detectar tipo de receptor", "Phase 1: Détection du type de code", "Fase 1: Finne fjernkontroll-kodetype", + "Vaihe 1: Lähetystavan selvittäminen", }, { "Press any key on the RC unit", "Eine Taste auf der FB drücken", @@ -1074,6 +1196,7 @@ const tPhrase Phrases[] = { "Pressione qualquer tecla do telecomando", "Appuyer sur une touche de la télécommande", "Trykk en av tastene på fjernkontrollen", + "Paina mitä tahansa kaukosäätimen näppäintä", }, { "RC code detected!", "FB Code erkannt!", @@ -1083,6 +1206,7 @@ const tPhrase Phrases[] = { "Codigo do telecomando detectado!", "Code de la télécommande détecté!", "Fjernkontroll-kodetype funnet!", + "Näppäinpainallus vastaanotettu!", }, { "Do not press any key...", "Keine Taste drücken...", @@ -1092,6 +1216,7 @@ const tPhrase Phrases[] = { "Nao pressione nada...", "Ne pas appuyer sur une touche ...", "Ikke trykk på noen av tastene...", + "Älä paina mitään näppäintä...", }, { "Phase 2: Learning specific key codes", "Phase 2: Einzelne Tastencodes lernen", @@ -1101,6 +1226,7 @@ const tPhrase Phrases[] = { "Fase 2: A aprender codigos especificos", "Phase 2: Apprentissage des codes des touches", "Fase 2: Lære spesifikke tastekoder", + "Vaihe 2: Näppäinkoodien opettelu", }, { "Press key for '%s'", "Taste für '%s' drücken", @@ -1110,6 +1236,7 @@ const tPhrase Phrases[] = { "Pressione tecla para '%s'", "Appuyer sur la touche '%s'", "Trykk tasten for '%s'", + "Paina näppäintä toiminnolle '%s'", }, { "Press 'Up' to confirm", "'Auf' drücken zum Bestätigen", @@ -1119,6 +1246,7 @@ const tPhrase Phrases[] = { "Pressione 'Cima' para confirmar", "Appuyer sur 'Haut' pour confirmer", "Trykk 'Opp' for å bekrefte", + "Paina 'Ylös' hyväksyäksesi", }, { "Press 'Down' to continue", "'Ab' drücken zum Weitermachen", @@ -1128,6 +1256,7 @@ const tPhrase Phrases[] = { "Pressione 'Baixo' para continuar", "Appuyer sur 'Bas' pour continuer", "Trykk Ned' for å fortsette", + "Paina 'Alas' jatkaaksesi", }, { "(press 'Up' to go back)", "('Auf' drücken um zurückzugehen)", @@ -1137,6 +1266,7 @@ const tPhrase Phrases[] = { "(Pressione 'Cima' para voltar)", "(Appuyer sur 'Haut' pour revenir en arrière)", "(trykk 'Opp' for å gå tilbake)", + "(paina 'Ylös' palataksesi takaisin)", }, { "(press 'Down' to end key definition)", "('Ab' drücken zum Beenden)", @@ -1146,6 +1276,7 @@ const tPhrase Phrases[] = { "(Pressione 'Baixo' para terminar a definicao)", "(Appuyer sur 'Bas' pour terminer)", "(trykk 'Ned' for å avslutte innlæring)", + "(paina 'Alas' lopettaaksesi näppäinten opettelun)", }, { "Phase 3: Saving key codes", "Phase 3: Codes abspeichern", @@ -1155,6 +1286,7 @@ const tPhrase Phrases[] = { "Fase 3: A Salvar os codigos das teclas", "Phase 3: Sauvegarde des codes des touches", "Fase 3: Lagre tastekoder", + "Vaihe 3: Näppäinkoodien tallettaminen", }, { "Press 'Up' to save, 'Down' to cancel", "'Auf' speichert, 'Ab' bricht ab", @@ -1164,6 +1296,7 @@ const tPhrase Phrases[] = { "'Cima' para Salvar, 'Baixo' para Cancelar", "Appuyer sur 'Haut' pour sauvegarder, 'Bas' pour annuler", "Trykk 'Opp' for å lagre, 'Ned' for å avbryte", + "Paina 'Ylös' tallettaaksesi ja 'Alas' peruuttaaksesi", }, // Key names: { "Up", @@ -1174,6 +1307,7 @@ const tPhrase Phrases[] = { "Cima", "Haut", "Opp", + "Ylös", }, { "Down", "Ab", @@ -1183,6 +1317,7 @@ const tPhrase Phrases[] = { "Baixo", "Bas", "Ned", + "Alas", }, { "Menu", "Menü", @@ -1192,6 +1327,7 @@ const tPhrase Phrases[] = { "Menu", "Menu", "Meny", + "Valikko", }, { "Ok", "Ok", @@ -1201,6 +1337,7 @@ const tPhrase Phrases[] = { "Ok", "Ok", "Ok", + "Ok", }, { "Back", "Zurück", @@ -1210,6 +1347,7 @@ const tPhrase Phrases[] = { "Voltar", "Retour", "Tilbake", + "Takaisin", }, { "Left", "Links", @@ -1219,6 +1357,7 @@ const tPhrase Phrases[] = { "Esquerda", "Gauche", "Venstre", + "Vasemmalle", }, { "Right", "Rechts", @@ -1228,6 +1367,7 @@ const tPhrase Phrases[] = { "Direita", "Droite", "Høyre", + "Oikealle", }, { "Red", "Rot", @@ -1237,6 +1377,7 @@ const tPhrase Phrases[] = { "Vermelho", "Rouge", "Rød", + "Punainen", }, { "Green", "Grün", @@ -1246,6 +1387,7 @@ const tPhrase Phrases[] = { "Verde", "Vert", "Grønn", + "Vihreä", }, { "Yellow", "Gelb", @@ -1255,6 +1397,7 @@ const tPhrase Phrases[] = { "Amarelo", "Jaune", "Gul", + "Keltainen", }, { "Blue", "Blau", @@ -1264,6 +1407,7 @@ const tPhrase Phrases[] = { "Azul", "Bleu", "Blå", + "Sininen", }, { "Power", "Ausschalten", @@ -1273,6 +1417,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Virtakytkin", }, { "Volume+", "Lautstärke+", @@ -1282,6 +1427,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Äänenvoimakkuus+", }, { "Volume-", "Lautstärke-", @@ -1291,6 +1437,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Äänenvoimakkuus-", }, { "Mute", "Stumm", @@ -1300,6 +1447,7 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "Äänen vaimennus", }, // Miscellaneous: { "yes", @@ -1310,6 +1458,7 @@ const tPhrase Phrases[] = { "sim", "oui", "ja", + "kyllä", }, { "no", "nein", @@ -1319,6 +1468,7 @@ const tPhrase Phrases[] = { "nao", "non", "nei", + "ei", }, { "top", "oben", @@ -1328,6 +1478,7 @@ const tPhrase Phrases[] = { "", // TODO "haut", "", // TODO + "ylä", }, { "bottom", "unten", @@ -1337,6 +1488,7 @@ const tPhrase Phrases[] = { "", // TODO "bas", "", // TODO + "ala", }, { "free", "frei", @@ -1345,6 +1497,8 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "", // TODO + "vapaa", }, { "Jump: ", // note the trailing blank "Springen: ", @@ -1353,6 +1507,8 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "", // TODO + "Hyppää", }, { " Stop replaying", // note the leading blank! " Wiedergabe beenden", @@ -1362,6 +1518,7 @@ const tPhrase Phrases[] = { " Parar reproducao", " Arrêter la lecture", " Stopp avspilling", + " Pysäytä toisto", }, { " Stop recording ", // note the leading and trailing blanks! " Aufzeichnung beenden ", @@ -1371,6 +1528,7 @@ const tPhrase Phrases[] = { " Parar gravacao ", " Arrêter l'enregistrement ", " Stopp opptak fra ", + " Pysäytä nauhoitus ", }, { " Cancel editing", // note the leading blank! " Schneiden abbrechen", @@ -1380,6 +1538,7 @@ const tPhrase Phrases[] = { " Anular modificacao", " Annuler le montage", " Avbryt editering", + " Peruuta muokkaus", }, { "Switching primary DVB...", "Primäres Interface wird umgeschaltet...", @@ -1388,7 +1547,8 @@ const tPhrase Phrases[] = { "Eerste DVB-kaart wordt omgeschakeld...", "A mudar placa DVB primaria...", "Changement de carte DVB principale...", - "Bytter hoved DVB-enhet... ", + "Bytter hoved DVB-enhet...", + "Vaihdetaan ensisijainen vastaanotin...", }, { "Up/Dn for new location - OK to move", "Auf/Ab für neue Position - dann OK", @@ -1398,6 +1558,7 @@ const tPhrase Phrases[] = { "Cima/Baixo para nova localizacao - Ok para mudar", "Haut/Bas -> nouvelle place - OK -> déplacer", "Opp/Ned for ny plass - OK for å flytte", + "Ylös/Alas = liiku, OK = siirrä", }, { "Editing process started", "Schnitt gestartet", @@ -1407,6 +1568,7 @@ const tPhrase Phrases[] = { "Processo de modificacao iniciado", "Opération de montage lancée", "Redigeringsprosess startet", + "Muokkaus aloitettu", }, { "Editing process finished", "Schnitt beendet", @@ -1415,6 +1577,8 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "", // TODO + "Muokkaus lopetettu", }, { "Editing process failed!", "Schnitt gescheitert!", @@ -1423,6 +1587,8 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "", // TODO + "Muokkaus epäonnistui", }, { "scanning recordings...", "Aufzeichnungen werden durchsucht...", @@ -1431,6 +1597,8 @@ const tPhrase Phrases[] = { "", // TODO "", // TODO "", // TODO + "", // TODO + "haetaan nauhoituksia...", }, { NULL } }; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.148 2002/02/03 15:42:38 kls Exp $ + * $Id: menu.c 1.152 2002/02/10 11:52:34 kls Exp $ */ #include "menu.h" @@ -1680,6 +1680,8 @@ eOSState cMenuRecordings::Del(void) cOsdMenu::Del(Current()); Recordings.Del(recording); Display(); + if (!Count()) + return osBack; } else Interface->Error(tr("Error while deleting recording!")); @@ -1707,6 +1709,7 @@ eOSState cMenuRecordings::Summary(void) eOSState cMenuRecordings::ProcessKey(eKeys Key) { + bool HadSubMenu = HasSubMenu(); eOSState state = cOsdMenu::ProcessKey(Key); if (state == osUnknown) { @@ -1720,6 +1723,13 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key) default: break; } } + if (Key == kYellow && HadSubMenu && !HasSubMenu()) { + // the last recording in a subdirectory was deleted, so let's go back up + cOsdMenu::Del(Current()); + if (!Count()) + return osBack; + Display(); + } if (!HasSubMenu() && Key != kNone) SetHelpKeys(); return state; @@ -1944,13 +1954,14 @@ cMenuMain::cMenuMain(bool Replaying, eOSState State) // Title with disk usage: -#define MB_PER_MINUTE 30 // this is just an estimate! +#define MB_PER_MINUTE 25.75 // this is just an estimate! char buffer[40]; int FreeMB; int Percent = VideoDiskSpace(&FreeMB); - int Hours = int(double(FreeMB) / MB_PER_MINUTE / 60); - int Minutes = (FreeMB / MB_PER_MINUTE) % 60; + int Minutes = int(double(FreeMB) / MB_PER_MINUTE); + int Hours = Minutes / 60; + Minutes %= 60; snprintf(buffer, sizeof(buffer), "%s - Disk %d%% - %2d:%02d %s", tr("Main"), Percent, Hours, Minutes, tr("free")); SetTitle(buffer); @@ -2113,10 +2124,11 @@ cDisplayChannel::cDisplayChannel(int Number, bool Switched) { group = -1; withInfo = !Switched || Setup.ShowInfoOnChSwitch; + int EpgLines = withInfo ? 5 : 1; lines = 0; oldNumber = number = 0; cChannel *channel = Channels.GetByNumber(Number); - Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? 5 : -5); + Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? EpgLines : -EpgLines); if (channel) { DisplayChannel(channel); DisplayInfo(); @@ -2131,7 +2143,8 @@ cDisplayChannel::cDisplayChannel(eKeys FirstKey) oldNumber = cDvbApi::CurrentChannel(); number = 0; lastTime = time_ms(); - Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? 5 : -5); + int EpgLines = Setup.ShowInfoOnChSwitch ? 5 : 1; + Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? EpgLines : -EpgLines); ProcessKey(FirstKey); } @@ -2340,7 +2353,7 @@ cRecordControl::~cRecordControl() bool cRecordControl::GetEventInfo(void) { cChannel *channel = Channels.GetByNumber(timer->channel); - time_t Time = timer->StartTime() + ((Setup.MarginStart * 2) + 1) * 60; + time_t Time = timer->IsSingleEvent() ? timer->StartTime() + ((Setup.MarginStart * 2) + 1) * 60 : timer->StartTime() + (timer->StopTime() - timer->StartTime()) / 2; for (int seconds = 0; seconds <= MAXWAIT4EPGINFO; seconds++) { { cThreadLock ThreadLock; diff --git a/recording.c b/recording.c index 7a55e1a..d822887 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 1.49 2002/02/03 15:46:42 kls Exp $ + * $Id: recording.c 1.51 2002/02/10 15:41:23 kls Exp $ */ #include "recording.h" @@ -196,22 +196,82 @@ tCharExchange CharExchange[] = { { ' ', '_' }, { '\'', '\x01' }, { '/', '\x02' }, -#ifdef VFAT - { ':', '\x03' }, -#endif { 0, 0 } }; -char *ExchangeChars(char *s, bool ToFileSystem) +static char *ExchangeChars(char *s, bool ToFileSystem) { char *p = s; while (*p) { +#define VFAT 1 +#ifdef VFAT + // The VFAT file system can't handle all characters, so we + // have to take extra efforts to encode/decode them: + if (ToFileSystem) { + switch (*p) { + // characters that can be used "as is": + case '!': + case '@': + case '$': + case '%': + case '&': + case '(': + case ')': + case '+': + case ',': + case '-': + case '.': + case ';': + case '=': + case '0' ... '9': + case 'a' ... 'z': + case 'A' ... 'Z': break; + // characters that can be mapped to other characters: + case ' ': *p = '_'; break; + case '~': *p = '/'; break; + // characters that have to be encoded: + default: { + int l = p - s; + s = (char *)realloc(s, strlen(s) + 10); + p = s + l; + char buf[4]; + sprintf(buf, "#%02X", (unsigned char)*p); + memmove(p + 2, p, strlen(p) + 1); + strncpy(p, buf, 3); + p += 2; + } + } + } + else { + switch (*p) { + // mapped characters: + case '_': *p = ' '; break; + case '/': *p = '~'; break; + // encodes characters: + case '#': { + if (strlen(p) > 2) { + char buf[3]; + sprintf(buf, "%c%c", *(p + 1), *(p + 2)); + unsigned char c = strtol(buf, NULL, 16); + *p = c; + memmove(p + 1, p + 3, strlen(p) - 2); + } + } + break; + // backwards compatibility: + case '\x01': *p = '\''; break; + case '\x02': *p = '/'; break; + case '\x03': *p = ':'; break; + } + } +#else for (struct tCharExchange *ce = CharExchange; ce->a && ce->b; ce++) { if (*p == (ToFileSystem ? ce->a : ce->b)) { *p = ToFileSystem ? ce->b : ce->a; break; } } +#endif p++; } return s; @@ -285,7 +345,7 @@ cRecording::cRecording(const char *FileName) name = new char[p - FileName + 1]; strncpy(name, FileName, p - FileName); name[p - FileName] = 0; - ExchangeChars(name, false); + name = ExchangeChars(name, false); } // read an optional summary file: char *SummaryFileName = NULL; @@ -384,9 +444,9 @@ const char *cRecording::FileName(void) if (!fileName) { struct tm tm_r; struct tm *t = localtime_r(&start, &tm_r); - ExchangeChars(name, true); + name = ExchangeChars(name, true); asprintf(&fileName, NAMEFORMAT, VideoDirectory, name, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, priority, lifetime); - ExchangeChars(name, false); + name = ExchangeChars(name, false); } return fileName; } @@ -399,7 +459,7 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) if (Level < 0 || Level == HierarchyLevels()) { struct tm tm_r; struct tm *t = localtime_r(&start, &tm_r); - const char *s; + char *s; if (Level > 0 && (s = strrchr(name, '~')) != NULL) s++; else @@ -413,6 +473,11 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) New, Delimiter, s); + // let's not display a trailing '~': + stripspace(titleBuffer); + s = &titleBuffer[strlen(titleBuffer) - 1]; + if (*s == '~') + *s = 0; } else if (Level < HierarchyLevels()) { const char *s = name; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 1.56 2002/02/03 16:44:08 kls Exp $ + * $Id: tools.c 1.57 2002/02/05 18:16:52 kls Exp $ */ #include "tools.h" @@ -804,8 +804,10 @@ void cListBase::Move(cListObject *From, cListObject *To) To->Prev()->Append(From); From->Append(To); } - else + else { lastObject->Append(From); + lastObject = From; + } if (!From->Prev()) objects = From; } @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/people/kls/vdr * - * $Id: vdr.c 1.94 2002/02/02 15:50:43 kls Exp $ + * $Id: vdr.c 1.95 2002/02/10 15:12:43 kls Exp $ */ #include <getopt.h> @@ -494,13 +494,20 @@ int main(int argc, char *argv[]) else LastActivity = 1; } + bool UserShutdown = key == kPower; + if (UserShutdown && Next && Delta <= Setup.MinEventTimeout * 60 && !ForceShutdown) { + char *buf; + asprintf(&buf, tr("Recording in %d minutes, shut down anyway?"), Delta / 60); + if (Interface->Confirm(buf)) + ForceShutdown = true; + delete buf; + } if (!Next || Delta > Setup.MinEventTimeout * 60 || ForceShutdown) { ForceShutdown = false; if (timer) dsyslog(LOG_INFO, "next timer event at %s", ctime(&Next)); if (WatchdogTimeout > 0) signal(SIGALRM, SIG_IGN); - bool UserShutdown = key == kPower; if (Interface->Confirm(tr("Press any key to cancel shutdown"), UserShutdown ? 5 : SHUTDOWNWAIT, true)) { int Channel = timer ? timer->channel : 0; const char *File = timer ? timer->file : ""; |