summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS16
-rw-r--r--HISTORY27
-rw-r--r--channels.conf1
-rw-r--r--config.c4
-rw-r--r--config.h6
-rw-r--r--eit.c47
-rw-r--r--gmon.outbin101224 -> 0 bytes
-rw-r--r--i18n.c182
-rw-r--r--menu.c27
-rw-r--r--recording.c83
-rw-r--r--tools.c6
-rw-r--r--vdr.c11
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
diff --git a/HISTORY b/HISTORY
index bf8ce2c..b2b3a9e 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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
diff --git a/config.c b/config.c
index 974aed0..8b5c454 100644
--- a/config.c
+++ b/config.c
@@ -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;
diff --git a/config.h b/config.h
index 325f4ef..e2e2897 100644
--- a/config.h
+++ b/config.h
@@ -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;
diff --git a/eit.c b/eit.c
index 2860fc4..99bcdff 100644
--- a/eit.c
+++ b/eit.c
@@ -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
deleted file mode 100644
index ea79bc5..0000000
--- a/gmon.out
+++ /dev/null
Binary files differ
diff --git a/i18n.c b/i18n.c
index 3d9089a..f2c414f 100644
--- a/i18n.c
+++ b/i18n.c
@@ -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 }
};
diff --git a/menu.c b/menu.c
index 40ac185..a7a98ec 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.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;
diff --git a/tools.c b/tools.c
index 441c5ce..e95bdf8 100644
--- a/tools.c
+++ b/tools.c
@@ -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;
}
diff --git a/vdr.c b/vdr.c
index 670246a..9d5167b 100644
--- a/vdr.c
+++ b/vdr.c
@@ -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 : "";