summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS30
-rw-r--r--HISTORY36
-rw-r--r--PLUGINS.html30
-rw-r--r--ci.c4
-rw-r--r--ci.h3
-rw-r--r--config.h6
-rw-r--r--cutter.c10
-rw-r--r--device.c4
-rw-r--r--dvbdevice.c8
-rw-r--r--dvbplayer.c17
-rw-r--r--eitscan.c7
-rw-r--r--eitscan.h4
-rw-r--r--i18n.c530
-rw-r--r--menu.c72
-rw-r--r--menu.h7
-rw-r--r--recording.c7
-rw-r--r--vdr.c18
17 files changed, 452 insertions, 341 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index d31a118..b1f3a3d 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -172,6 +172,7 @@ Stefan Huelswitt <huels@iname.com>
for implementing setting the "broken link" flag for GOPs at the beginning of a new
video sequence, which avoids artefacts when cutting
for suggesting to add VDRVERSNUM to config.h
+ for fixing a memory leak in cNonBlockingFileReader
Ulrich Röder <roeder@efr-net.de>
for pointing out that there are channels that have a symbol rate higher than
@@ -236,6 +237,8 @@ Werner Fink <werner@suse.de>
for improving keyboard detection
for adding some missing cAudio handling calls
for replacing the 'for' loops in StripAudioPackets() with memset() calls
+ for modifying handling of audio packets in cDvbPlayer for better sync with external
+ AC3 replay
Rolf Hakenes <hakenes@hippomi.de>
for providing 'libdtv' and adapting the EIT mechanisms to it
@@ -409,6 +412,7 @@ Rudi Hofer (Rudi.Hofer@cadsoft.de)
Gregoire Favre <greg@ulima.unil.ch>
for fixing some function headers to make them compile with gcc 3.x
for reporting a bug in taking an active SVDRP connection into account when doing shutdown
+ for translating OSD texts to the French language
Sven Grothklags <sven@uni-paderborn.de>
for fixing the cutting mechanism to make it re-sync in case a frame is larger
@@ -471,15 +475,20 @@ Oliver Endriss <o.endriss@gmx.de>
for reporting a problem with cPlugin::Start() being called after trying to learn
the remote control keys
for reporting a bug in reading 'epg.data' for channels with non-zero RID
+ for fixing I/O handling in case an explicit controlling terminal is given
Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
for his help in testing tuning with "Motor-DiSEqC"
for his help in debugging CAM support
+ for reporting a problem with recording FTA channels on the CAM device in case
+ the CAM is not connected to the primary device
Lauri Tischler <lauri.tischler@efore.fi>
for helping to test and debug the new channel source and DiSEqC handling
for reporting a faulty parameter initialization in menu.c
+ for reporting a problem in case the original current channel becomes
+ unavailable due to a recording on a different transponder
Andy Carter <fruit@ukgateway.net>
for helping to test new DVB-T handling
@@ -501,6 +510,9 @@ Gerhard Steiner <steiner@mail.austria.com>
records as a newline character
for reporting a bug in displaying messages in the status line in case they exceed
the OSD width
+ for fixing resume file handling in case the resume.vdr file can't be written
+ for reporting a problem with newly created timers in case they are not confirmed
+ with "Ok"
Jaakko Hyvätti <jaakko@hyvatti.iki.fi>
for translating OSD texts to the Finnish language
@@ -573,12 +585,14 @@ Teemu Rantanen <tvr@iki.fi>
Jan Ekholm <chakie@infa.abo.fi>
for adding/improving some Swedish language OSD texts
+ for reporting a compiler warning in g++ 3.2.3 regarding cReplayControl::Show()
Marcel Wiesweg <marcel.wiesweg@gmx.de>
for pointing out a problem with high CPU load during replay
for reporting broken support for raw OSDs of plugins
for reporting a problem with cReceivers that want to receive from PIDs that are
currently not transmitting
+ for fixing volume display in case a plugin has its own OSD open
Torsten Herz <torsten.herz@web.de>
for fixing a possible deadlock when using the "Blue" button in the "Schedules" menu
@@ -669,3 +683,19 @@ Marc Rovira Vall <tm05462@salleURL.edu> and Ramon Roca <ramon.roca@xcombo.com>
Lars Bläser <LBlaeser@hofheim.de>
for reporting a bug in EPG bugfix statistics which made log entires for undefined
channels
+
+Niko Tarnanen <niko.tarnanen@hut.fi> and Rolf Ahrenberg <rahrenbe@cc.hut.fi>
+ for translating OSD texts to the Finnish language
+
+Ralf Klueber <ralf.klueber@vodafone.com>
+ for reporting a bug in cutting a recording if there is only a single editing mark
+
+Hermann Gausterer <mrq1@gmx.net>
+ for suggesting to switch to the recording channel in case the current channel
+ becomes unavailable
+
+Peter Bieringer <pb@bieringer.de>
+ for reporting a problem with duplicate recordings with the same file name
+
+Alexander Damhuis <ad@phonedation.de>
+ for reporting problems when deleting a timer that is currently recording
diff --git a/HISTORY b/HISTORY
index 0f46d7e..65ca0fe 100644
--- a/HISTORY
+++ b/HISTORY
@@ -2172,3 +2172,39 @@ Video Disk Recorder Revision History
to Lars Bläser for reporting this one).
- No longer waiting inside cIndexFile::CatchUp() to avoid shortly blocking replay
at the end of a recording.
+
+2003-05-25: Version 1.1.33
+
+- Modified handling of audio packets in cDvbPlayer for better sync with external
+ AC3 replay (thanks to Werner Fink).
+- Fixed a memory leak in cNonBlockingFileReader (thanks to Stefan Huelswitt).
+- Completed the French OSD texts (thanks to Gregoire Favre).
+- Completed the Finnish OSD texts (thanks to Niko Tarnanen and Rolf Ahrenberg).
+- Fixed I/O handling in case an explicit controlling terminal is given (thanks
+ to Oliver Endriss).
+- Fixed resume file handling in case the resume.vdr file can't be written
+ (thanks to Gerhard Steiner).
+- Fixed cutting a recording if there is only a single editing mark (thanks to
+ Ralf Klueber for reporting this one).
+- Fixed volume display in case a plugin has its own OSD open (thanks to Marcel
+ Wiesweg).
+- Fixed channel switching in the EPG scanner on single device systems.
+- Completed the Swedish OSD texts (thanks to Tomas Prybil).
+- Now switching to the channel used by the most recently started timer in case
+ the original current channel becomes unavailable due to a recording on a
+ different transponder. If this fails, a channel up/down switch is attempted as
+ a fallback solution (thanks to Lauri Tischler for reporting this one, and to
+ Hermann Gausterer for suggesting to switch to the recording channel).
+- Fixed cReplayControl::Show() to avoid a compiler warning in g++ 3.2.3 (thanks
+ to Jan Ekholm for reporting this one).
+- Completed the Slovenian OSD texts (thanks to Matjaz Thaler).
+- Changed the DEFAULTPRIORITY in device.c to -1, so that the primary device
+ will be used for FTA recordings in case the CAM is connected to a non-primary
+ device (thanks to Reinhard Walter Buchner for reporting this one).
+- The cCiHandler now closes its file handle when it gets destroyed.
+- Checking for duplicate recordings with the same file name and disabling the
+ second timer (thanks to Peter Bieringer for reporting this one).
+- Fixed handling newly created timers in case they are not confirmed with "Ok"
+ (thanks to Gerhard Steiner for reporting this one).
+- It is now possible to directly delete a timer that is currently recording
+ (thanks to Alexander Damhuis for reporting this one).
diff --git a/PLUGINS.html b/PLUGINS.html
index b632b61..9a97b00 100644
--- a/PLUGINS.html
+++ b/PLUGINS.html
@@ -20,19 +20,6 @@ The <i>external</i> interface handles everything necessary for a plugin to get h
VDR program and present itself to the user.
The <i>internal</i> interface provides the plugin code access to VDR's internal data
structures and allows it to hook itself into specific areas to perform special actions.
-<p>
-<!--X1.1.17--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
-Important modifications introduced in version 1.1.17 are marked like this.
-<!--X1.1.17--></td></tr></table>
-<!--X1.1.27--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
-Important modifications introduced in version 1.1.27 are marked like this.
-<!--X1.1.27--></td></tr></table>
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
-Important modifications introduced in version 1.1.31 are marked like this.
-<!--X1.1.31--></td></tr></table>
-<!--X1.1.32--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
-Important modifications introduced in version 1.1.32 are marked like this.
-<!--X1.1.32--></td></tr></table>
<hr>
<h1>Table Of Contents</h1>
@@ -284,10 +271,8 @@ The <b>constructor</b> shall initialize any member variables the plugin defines,
<b>must not access any global structures of VDR</b>.
It also must not create any threads or other large data structures. These things
are done in the
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<a href="#Getting started"><tt>Initialize()</tt></a> or
<a href="#Getting started"><tt>Start()</tt></a>
-<!--X1.1.31--></td></tr></table>
function later.
Constructing a plugin object shall not have any side effects or produce any output,
since VDR, for instance, has to create the plugin objects in order to get their
@@ -460,26 +445,20 @@ thread of its own), or wants to make use of <a href="#Internationalization">inte
it needs to implement one of the functions
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%><pre>
virtual bool Initialize(void);
-<!--X1.1.31--></pre></td></tr></table>
virtual bool Start(void);
</pre></td></tr></table><p>
which are called once for each plugin at program startup.
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
-<!--X1.1.32--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
The difference between these two functions is that <tt>Initialize()</tt> is
called early at program startup, while <tt>Start()</tt> is called after the primary
device and user interface has been set up, but before the main program loop is entered.
-<!--X1.1.32--></td></tr></table>
Inside the <tt>Start()</tt> function of any plugin it is guaranteed that the <tt>Initialize()</tt>
functions of all plugins have already been called. For many plugins it probably
doesn't matter which of these functions they implement, but it may be of importance
for, e.g., plugins that implement devices. Such plugins should create their cDevice
derived objects in <tt>Initialize()</tt>, so that other plugins can use them in their
<tt>Start()</tt> functions.
-<!--X1.1.31--></td></tr></table>
<p>
Inside this function the plugin must set up everything necessary to perform
its task. This may, for instance, be a thread that collects data from the DVB
@@ -529,7 +508,6 @@ in the call to VDR.
If the user selects the main menu entry of a plugin, VDR calls the function
-<!--X1.1.17--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
virtual cOsdObject *MainMenuAction(void);
</pre></td></tr></table><p>
@@ -550,7 +528,6 @@ which can do one of three things:
<li>Perform a specific action and return <tt>NULL</tt>. In that case the main menu
will be closed after calling <tt>MainMenuAction()</tt>.
</ul>
-<!--X1.1.17--></td></tr></table>
<b>
It is very important that a call to <tt>MainMenuAction()</tt> returns as soon
as possible! As long as the program stays inside this function, no other user
@@ -802,6 +779,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
+ "",// TODO
},
{ NULL }
};
@@ -1200,9 +1178,7 @@ a <tt>cDevice</tt>:
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
cMyReceiver *Receiver = new cMyReceiver(123);
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
cDevice::ActualDevice()-&gt;AttachReceiver(Receiver);
-<!--X1.1.31--></td></tr></table>
</pre></td></tr></table><p>
Noteh the use of <tt>cDevice::ActualDevice()</tt> here, which makes sure that
@@ -1372,7 +1348,6 @@ needed.
<p>
<b>Initializing new devices</b>
<p>
-<!--X1.1.31--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
A derived cDevice class shall implement a static function
in which it determines whether the necessary hardware to run this sort of
device is actually present in this machine (or whatever other prerequisites
@@ -1384,7 +1359,6 @@ A plugin that adds devices to a VDR instance shall call this
function from its <a href="#Getting started"><tt>Initialize()</tt></a> function
to make sure other plugins that may need to have access to all available devices
will see them in their <a href="#Getting started"><tt>Start()</tt></a> function.
-<!--X1.1.31--></td></tr></table>
<p>
Nothing needs to be done to shut down the devices. VDR will automatically
shut down (delete) all devices when the program terminates. It is therefore
@@ -1500,7 +1474,6 @@ the incoming data (by calling your <tt>Action()</tt> function).
In case you need to do any other setup steps, like opening a file or initializing
member variables, you should do so before calling <tt>Start()</tt>.
<p>
-<!--X1.1.27--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
If your remote control for some reason can't work (maybe because it was unable to
open some file handle it requires) it can implement the virtual function
@@ -1510,7 +1483,6 @@ virtual bool Ready(void);
and have it return <i>false</i>. In that case VDR will not try to learn keys from
that remote control.
-<!--X1.1.27--></td></tr></table>
VDR will handle everything necessary to learn the key mappings of your remote
control. In order to do so, it will first call the virtual function <tt>Initialize()</tt>,
in which you should take all necessary steps to make sure your remote control
diff --git a/ci.c b/ci.c
index 91d9ede..3575d14 100644
--- a/ci.c
+++ b/ci.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ci.c 1.14 2003/04/20 09:52:45 kls Exp $
+ * $Id: ci.c 1.15 2003/05/25 11:45:11 kls Exp $
*/
/* XXX TODO
@@ -1287,6 +1287,7 @@ void cCiCaPmt::AddCaDescriptor(int Length, uint8_t *Data)
cCiHandler::cCiHandler(int Fd, int NumSlots)
{
+ fd = Fd;
numSlots = NumSlots;
newCaSupport = false;
hasUserIO = false;
@@ -1301,6 +1302,7 @@ cCiHandler::~cCiHandler()
for (int i = 0; i < MAX_CI_SESSION; i++)
delete sessions[i];
delete tpl;
+ close(fd);
}
cCiHandler *cCiHandler::CreateCiHandler(const char *FileName)
diff --git a/ci.h b/ci.h
index 79ed62f..62046e5 100644
--- a/ci.h
+++ b/ci.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ci.h 1.7 2003/04/20 09:21:23 kls Exp $
+ * $Id: ci.h 1.8 2003/05/25 11:44:47 kls Exp $
*/
#ifndef __CI_H
@@ -79,6 +79,7 @@ class cCiTransportConnection;
class cCiHandler {
private:
cMutex mutex;
+ int fd;
int numSlots;
bool newCaSupport;
bool hasUserIO;
diff --git a/config.h b/config.h
index 4d265ff..c7c3013 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.159 2003/05/16 12:27:58 kls Exp $
+ * $Id: config.h 1.160 2003/05/19 15:27:37 kls Exp $
*/
#ifndef __CONFIG_H
@@ -19,8 +19,8 @@
#include "device.h"
#include "tools.h"
-#define VDRVERSION "1.1.32"
-#define VDRVERSNUM 10132 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.1.33"
+#define VDRVERSNUM 10133 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99
#define MAXLIFETIME 99
diff --git a/cutter.c b/cutter.c
index 5ce0a2c..01e460d 100644
--- a/cutter.c
+++ b/cutter.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: cutter.c 1.3 2003/04/26 15:11:17 kls Exp $
+ * $Id: cutter.c 1.4 2003/05/24 11:59:33 kls Exp $
*/
#include "cutter.h"
@@ -77,6 +77,7 @@ void cCuttingThread::Action(void)
toMarks.Add(0);
toMarks.Save();
uchar buffer[MAXFRAMESIZE];
+ bool LastMark = false;
bool cutIn = true;
while (active) {
uchar FileNumber;
@@ -116,7 +117,7 @@ void cCuttingThread::Action(void)
// Write one frame:
if (PictureType == I_FRAME) { // every file shall start with an I_FRAME
- if (!Mark) // edited version shall end before next I-frame
+ if (LastMark) // edited version shall end before next I-frame
break;
if (FileSize > MEGABYTE(Setup.MaxVideoFileSize)) {
toFile = toFileName->NextFile();
@@ -167,9 +168,8 @@ void cCuttingThread::Action(void)
FileSize = 0;
}
}
- // the 'else' case (i.e. 'final end mark reached') is handled above
- // in 'Write one frame', so that the edited version will end right
- // before the next I-frame.
+ else
+ LastMark = true;
}
}
}
diff --git a/device.c b/device.c
index 7562a32..58f9bf0 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 1.43 2003/05/16 13:26:43 kls Exp $
+ * $Id: device.c 1.44 2003/05/25 10:57:59 kls Exp $
*/
#include "device.h"
@@ -23,7 +23,7 @@
// --- cDevice ---------------------------------------------------------------
// The default priority for non-primary devices:
-#define DEFAULTPRIORITY -2
+#define DEFAULTPRIORITY -1
int cDevice::numDevices = 0;
int cDevice::useDevice = 0;
diff --git a/dvbdevice.c b/dvbdevice.c
index 8314ab6..7fc50a7 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 1.59 2003/05/03 14:03:20 kls Exp $
+ * $Id: dvbdevice.c 1.60 2003/05/24 13:23:51 kls Exp $
*/
#include "dvbdevice.h"
@@ -27,6 +27,7 @@ extern "C" {
#include "channels.h"
#include "diseqc.h"
#include "dvbosd.h"
+#include "eitscan.h"
#include "player.h"
#include "receiver.h"
#include "status.h"
@@ -658,6 +659,11 @@ bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
StartTransferMode = false;
#endif
+ if (EITScanner.Active()) {
+ StartTransferMode = false;
+ TurnOnLivePIDs = false;
+ }
+
// Stop SI filtering:
if (siProcessor) {
diff --git a/dvbplayer.c b/dvbplayer.c
index afd4278..6b7fe07 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbplayer.c 1.20 2003/04/27 09:55:53 kls Exp $
+ * $Id: dvbplayer.c 1.22 2003/05/24 09:04:26 kls Exp $
*/
#include "dvbplayer.h"
@@ -114,6 +114,7 @@ void cNonBlockingFileReader::Clear(void)
{
cMutexLock MutexLock(&mutex);
f = -1;
+ free(buffer);
buffer = NULL;
wanted = length = 0;
hasData = false;
@@ -477,8 +478,8 @@ void cDvbPlayer::Action(void)
}
int r = nonBlockingFileReader->Read(replayFile, b, Length);
if (r > 0) {
- if (AudioTrack >= 0)
- StripAudioPackets(b, r, AudioTrack);
+ if (AudioTrack == 0)
+ StripAudioPackets(b, r);
readFrame = new cFrame(b, -r, ftUnknown, readIndex); // hands over b to the ringBuffer
b = NULL;
}
@@ -514,9 +515,13 @@ void cDvbPlayer::Action(void)
if (!p) {
p = playFrame->Data();
pc = playFrame->Count();
- if (firstPacket) {
- cRemux::SetBrokenLink(p, pc);
- firstPacket = false;
+ if (p) {
+ if (firstPacket) {
+ cRemux::SetBrokenLink(p, pc);
+ firstPacket = false;
+ }
+ if (AudioTrack > 0)
+ StripAudioPackets(p, pc, AudioTrack);
}
}
if (p) {
diff --git a/eitscan.c b/eitscan.c
index a5c1a7b..f9058cf 100644
--- a/eitscan.c
+++ b/eitscan.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: eitscan.c 1.12 2003/03/16 13:29:55 kls Exp $
+ * $Id: eitscan.c 1.13 2003/05/24 13:34:59 kls Exp $
*/
#include "eitscan.h"
@@ -12,6 +12,8 @@
#include "channels.h"
#include "dvbdevice.h"
+cEITScanner EITScanner;
+
cEITScanner::cEITScanner(void)
{
lastScan = lastActivity = time(NULL);
@@ -61,8 +63,9 @@ void cEITScanner::Process(void)
if (Channel) {
lastChannel[Device->DeviceNumber()] = Channel->Number();
if (Channel->Sid() && Device->ProvidesChannel(Channel) && !TransponderScanned(Channel)) {
- if (Device == cDevice::PrimaryDevice() && !currentChannel)
+ if (Device == cDevice::PrimaryDevice() && !currentChannel) {
currentChannel = Device->CurrentChannel();
+ }
Device->SwitchChannel(Channel, false);
break;
}
diff --git a/eitscan.h b/eitscan.h
index 5b40ddd..609bf78 100644
--- a/eitscan.h
+++ b/eitscan.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: eitscan.h 1.2 2003/03/16 13:20:40 kls Exp $
+ * $Id: eitscan.h 1.3 2003/05/24 13:21:36 kls Exp $
*/
#ifndef __EITSCAN_H
@@ -31,4 +31,6 @@ public:
void Process(void);
};
+extern cEITScanner EITScanner;
+
#endif //__EITSCAN_H
diff --git a/i18n.c b/i18n.c
index 64194fc..2e4c86f 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.110 2003/05/16 13:02:08 kls Exp $
+ * $Id: i18n.c 1.117 2003/05/25 14:20:27 kls Exp $
*
* Translations provided by:
*
@@ -12,9 +12,9 @@
* Italian Alberto Carraro <bertocar@tin.it>
* Dutch Arnold Niessen <niessen@iae.nl> <arnold.niessen@philips.com>
* Portuguese Paulo Lopes <pmml@netvita.pt>
- * French Jean-Claude Repetto <jc@repetto.org> and Olivier Jacques <jacquesolivier@hotmail.com>
+ * French Jean-Claude Repetto <jc@repetto.org>, Olivier Jacques <jacquesolivier@hotmail.com> and Gregoire Favre <greg@magma.unil.ch>
* Norwegian Jørgen Tvedt <pjtvedt@online.no> and Truls Slevigen <truls@slevigen.no>
- * Finnish Hannu Savolainen <hannu@opensound.com> and Jaakko Hyvätti <jaakko@hyvatti.iki.fi>
+ * Finnish Hannu Savolainen <hannu@opensound.com>, Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, Niko Tarnanen <niko.tarnanen@hut.fi> and Rolf Ahrenberg <rahrenbe@cc.hut.fi>
* Polish Michael Rakowski <mrak@gmx.de>
* Spanish Ruben Nunez Francisco <ruben.nunez@tang-it.com>
* Greek Dimitrios Dimitrakos <mail@dimitrios.de>
@@ -79,7 +79,7 @@ const tI18nPhrase Phrases[] = {
"Português",
"Français",
"Norsk",
- "Suomi",
+ "suomi",
"Polski",
"Español",
"Ellinika",
@@ -108,13 +108,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Schedule",
"Programm",
- "Urnik",
+ "Program",
"Programmi",
"Gids",
"Programação",
"Programmes",
"Programmer",
- "Ohjelmat",
+ "Ohjelmisto",
"Program",
"Guía de Programación",
"Programma",
@@ -165,7 +165,7 @@ const tI18nPhrase Phrases[] = {
"Gravações",
"Enregistrements",
"Opptak",
- "Nauhoitteet",
+ "Tallenteet",
"Nagrania",
"Grabaciones",
"Egrafes",
@@ -210,13 +210,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Recording commands",
"Befehle für Aufzeichnungen",
+ "Ukazi za snemanje",
"",// TODO
"",// TODO
"",// TODO
+ "Commandes d'enregistrement",
"",// TODO
- "",// TODO
- "",// TODO
- "Nauhoituskomennot",
+ "Tallennuskomennot",
"",// TODO
"Órdenes de grabación",
"Entoles gia egrafes",// TODO
@@ -250,7 +250,7 @@ const tI18nPhrase Phrases[] = {
"Modificar timer",
"Changer la programmation",
"Editer timer",
- "Muokkaa ajastusta",
+ "Muokkaa ajastinta",
"Ustawienie timerow",
"Modificar timer",
"Prosarmogi Programmatismou",
@@ -288,20 +288,20 @@ const tI18nPhrase Phrases[] = {
"Zawartosc",
"Resúmen",
"Periexomeno",
- "Sammandrag",
+ "Sammanfattning",
"Cuprins",
"Tartalom",
"Sinopsi",
},
{ "Schedule - %s",
"Programm - %s",
- "Urnik - %s",
+ "Program - %s",
"Programma - %s",
"Programma - %s",
"Programa - %s",
"Programmes - %s",
"Program Guide - %s",
- "Ohjelma - %s",
+ "Ohjelmisto - %s",
"Program - %s",
"Programa - %s",
"Programma - %s",
@@ -318,7 +318,7 @@ const tI18nPhrase Phrases[] = {
"Programa actual?",
"Programmes en cours",
"Hvilket program sendes nå?",
- "Nykyinen ohjelma",
+ "Menossa nyt",
"Program biezacy",
"¿Qué hay ahora?",
"Trexon Programma",
@@ -335,7 +335,7 @@ const tI18nPhrase Phrases[] = {
"Próximo Programa?",
"Prochains programmes",
"Hvilket program er neste?",
- "Seuraava ohjelma",
+ "Tulossa seuraavaksi",
"Program nastepny",
"¿Qué hay proximo?",
"Epomeno Programma",
@@ -353,7 +353,7 @@ const tI18nPhrase Phrases[] = {
"Modificar",
"Modifier",
"Editer",
- "Muuta",
+ "Muokkaa",
"Edycja",
"Modificar",
"Prosarmogi",
@@ -381,7 +381,7 @@ const tI18nPhrase Phrases[] = {
},
{ "Delete",
"Löschen",
- "Odstrani",
+ "Izbrisi",
"Cancella",
"Verwijder",
"Apagar",
@@ -438,7 +438,7 @@ const tI18nPhrase Phrases[] = {
"Gravar",
"Enregistre",
"Ta opp",
- "Nauhoita",
+ "Tallenna",
"Nagrywac",
"Grabar",
"Egrafi",
@@ -449,7 +449,7 @@ const tI18nPhrase Phrases[] = {
},
{ "Play",
"Wiedergabe",
- "Predavajaj",
+ "Predvajaj",
"Riproduci",
"Afspelen",
"Play",
@@ -466,13 +466,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Rewind",
"Anfang",
- "Zacetek",
+ "Na zacetek",
"Da inizio",
"Naar begin",
"Rebobinar",
"Retour",
"Spol tilbake",
- "Takaisinkel.",
+ "Alkuun",
"Poczatek",
"Rebobinar",
"Arxi",
@@ -527,7 +527,7 @@ const tI18nPhrase Phrases[] = {
"Zawartosc",
"Resumen",
"Periexomeno",
- "Sammandrag",
+ "Sammanfattning",
"Cuprins",
"Tartalom",
"Resum",
@@ -585,7 +585,7 @@ const tI18nPhrase Phrases[] = {
},
{ "Next",
"Nächste",
- "Naslednji",
+ "Sledi",
"Prossimo",
"Hierna",
"Proximo",
@@ -602,7 +602,7 @@ const tI18nPhrase Phrases[] = {
},
{ "Button$Schedule",
"Programm",
- "Urnik",
+ "Program",
"Programma",
"Programma",
"Programação",
@@ -670,11 +670,11 @@ const tI18nPhrase Phrases[] = {
},
{ "Insert",
"Einfügen",
+ "Vstavi",
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
- "",// TODO
+ "Insért",
"",// TODO
"Lisää",
"",// TODO
@@ -687,11 +687,11 @@ const tI18nPhrase Phrases[] = {
},
{ "Overwrite",
"Überschreiben",
+ "Prepisi",
"",// TODO
"",// TODO
"",// TODO
- "",// TODO
- "",// TODO
+ "Écraser",
"",// TODO
"Korvaa",
"",// TODO
@@ -721,17 +721,17 @@ const tI18nPhrase Phrases[] = {
},
{ "Reset",
"Reset",
+ "Reset",
"",//TODO
"",//TODO
"",//TODO
+ "Réinitialisation",
"",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
+ "Nollaa",
"",//TODO
"Reiniciar",
"Epanafora",
- "",//TODO
+ "Återställ",
"",//TODO
"",//TODO
"Reiniciar",
@@ -739,13 +739,13 @@ const tI18nPhrase Phrases[] = {
// Confirmations:
{ "Delete channel?",
"Kanal löschen?",
- "Odstrani kanal?",
+ "Izbrisi kanal?",
"Cancello il canale?",
"Kanaal verwijderen?",
"Apagar o canal?",
"Supprimer la chaîne?",
"Slette kanal?",
- "Poistetaanko kanava?",
+ "Poista kanava?",
"Usunac kanal?",
"¿Eliminar canal?",
"Diagrafi Kanaliou?",
@@ -756,13 +756,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Delete timer?",
"Timer löschen?",
- "Odstani termin?",
+ "Izbrisi termin?",
"Cancello il timer?",
"Timer verwijderen?",
"Apagar o timer?",
"Supprimer la programmation?",
"Slette timer?",
- "Poistetaanko ajastus?",
+ "Poista ajastin?",
"Usunac timer?",
"¿Eliminar timer?",
"Diagrafi programmitismou?",
@@ -773,13 +773,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Delete recording?",
"Aufzeichnung löschen?",
- "Odstrani posnetek?",
+ "Izbrisi posnetek?",
"Cancello la registrazione?",
"Opname verwijderen?",
"Apagar a gravação?",
"Supprimer l'enregistrement?",
"Slette opptak?",
- "Poistetaanko nauhoitus?",
+ "Poista tallenne?",
"Usunac nagranie?",
"¿Eliminar grabacion?",
"Svisimo egrafis?",
@@ -790,13 +790,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Timer still recording - really delete?",
"Timer zeichnet auf - trotzdem löschen?",
- "Snemanje po terminu - zares odstrani?",
+ "Snemanje po terminu - zares izbrisi?",
"Timer in regestazione - cancello?",
"Timer neemt nog op - toch verwijderen?",
"Timer activo - têm a certeza que quer apagar?",
"Enregistrement en cours - confirmez la suppression",
"Timer gjør opptak - vil du slette likevel?",
- "Ajastin nauhoittaa - poistetaanko silti?",
+ "Ajastin aktiivinen - poistetaanko?",
"Nagrywanie w trakcie - napewno usunac?",
"¿Timer activo - de verdad eliminarlo?",
"Programmatismos se exselixsi - Diagrafi sigoura?",
@@ -813,7 +813,7 @@ const tI18nPhrase Phrases[] = {
"Parar Gravação?",
"Arrêter l'enregistrement?",
"Stoppe opptak?",
- "Pysäytetäänkö nauhoitus?",
+ "Keskeytä tallennus?",
"Zakonczyc nagranie?",
"¿Parar grabación?",
"Akirosi egrafis?",
@@ -834,7 +834,7 @@ const tI18nPhrase Phrases[] = {
"na pierwszym interfejsie",
"en interface primario",
"stin protevon karta",
- "från det första enheten?",
+ "från den första enheten?",
"pe prima interfata",
"az elsö kártyán",
"a la interfície primària",
@@ -847,24 +847,24 @@ const tI18nPhrase Phrases[] = {
"Cancelar Modificações?",
"Annuler les modifications?",
"Avbryte redigering?",
- "Peruutetaanko muokkaus?",
+ "Peru muokkaus?",
"Zakonczyc montaz?",
"¿Cancelar modificación?",
"Akirosi kopsimatos?",
- "Avbryta editeringen?",
+ "Avbryta redigeringen?",
"Opresc editarea?",
"Vágást befejezni?",
"Cancel.lar l'edició?",
},
{ "Really restart?",
"Wirklich neu starten?",
- "Zares ponoven zagon",
+ "Zares ponoven zagon?",
"Eseguo un restart?",
"Werkelijk opnieuw starten?",
"Tem a certeza que quer reiniciar?",
"Redémarrer?",
"Vil du virkelig starte på nytt?",
- "Aloitetaanko varmasti alusta?",
+ "Käynnistä uudelleen?",
"Rzeczywiscie nowy start?",
"¿De verdad reiniciar?",
"Na gini sigoura epanekinisi?",
@@ -875,17 +875,17 @@ const tI18nPhrase Phrases[] = {
},
{ "Recording - restart anyway?",
"Aufnahme läuft - trotzdem neu starten?",
- "Snemanje - zares ponoven zagon",
+ "Snemanje - zares ponoven zagon?",
"In registrazione - restart comunque?",
"Opname loopt - toch opnieuw starten?",
"Em gravação - quer mesmo reiniciar?",
"Enregistrement en cours - redémarrer?",
"Gjør opptak - starte på nytt likevel?",
- "Nauhoitus käynnissä - aloitetaanko alusta?",
+ "Tallennus kesken - käynnistetäänkö uudelleen?",
"Nagrywanie w trakcie - rzeczywiscie nowy start?",
"Grabando - ¿reiniciar?",
"Ginete egrafi - Telika na ginei epanekinisi?",
- "Inspelning pågår, vill du starta om i alla fall?",
+ "Inspelning pågår, vill du ändå starta om?",
"In inregistrare - repornesc?",
"Felvétel folyamatban van - mégis újraindítani?",
"Estic gravant - reiniciar de totes maneres?"
@@ -898,11 +898,11 @@ const tI18nPhrase Phrases[] = {
"Em gravação - quer mesmo desligar?",
"Enregistrement en cours - confirmez l'arrêt",
"Gjør opptak - slå av likevel?",
- "Nauhoitus kesken - lopetetaanko se?",
+ "Tallennus kesken - sammutetaanko?",
"Nagrywanie w trakcie - mimo to wylaczyc?",
"Grabando - ¿apagar?",
"Ginete egrafi - Telika na ginei termatismos?",
- "Inspelning pågår, vill du avbryta i alla fall?",
+ "Inspelning pågår, vill du ändå avbryta?",
"In inregistrare - opresc?",
"Felvétel folyamatban van - mégis kikapcsolni?",
"Gravant - Apagar de totes maneres?",
@@ -915,7 +915,7 @@ const tI18nPhrase Phrases[] = {
"Em gravação dentro de %d minutos - quer mesmo desligar?",
"Enregistrement dans %d minutes - confirmez l'arrêt",
"Skal gjøre opptak om %d minutter - slå av likevel?",
- "Nauhoitus alkaisi %d min. kuluttua - sammutetaanko silti?",
+ "Tallennus alkaa %d min kuluttua - sammutetaanko?",
"Nagrywanie za %d minut - mimo to wylaczyc?",
"Grabando en %d minutos, ¿de verdad apagar?",
"Anamenete egrafi se %d lepta - Telika na termatistei?",
@@ -932,11 +932,11 @@ const tI18nPhrase Phrases[] = {
"Pressione qualquer tecla para cancelar",
"Appuyez sur une touche pour annuler l'arrêt",
"Trykk en tast for ikke å slå av",
- "Peruuta pysäytys painamalla jotakin näppäintä",
+ "Peru sammutus painamalla jotain näppäintä",
"Dowolny przycisk zatrzyma wylaczanie",
"Pulse una tecla para interrumpir apagar",
"Piese ena pliktro na akirothei o termatismos",
- "Tryck valfri knapp för att avbryta nedstängning",
+ "Tryck valfri knapp för att återkalla avstängningen",
"Apasa orice tasta pentru a anula inchiderea",
"Nyomj egy gombot a leállás megállításához",
"Prem qualsevol tecla per cancel.lar l'aturada",
@@ -995,11 +995,11 @@ const tI18nPhrase Phrases[] = {
},
{ "Source",
"Quelle",
+ "Pozicija",
"",//TODO
"",//TODO
"",//TODO
- "",//TODO
- "",//TODO
+ "Source",
"",//TODO
"Lähde",
"",//TODO
@@ -1018,11 +1018,11 @@ const tI18nPhrase Phrases[] = {
"Srate",
"Fréq. Symbole",
"Srate",
+ "Symbolinopeus",
"Srate",
"Srate",
"Srate",
- "Srate",
- "Srate",
+ "Symbolrate",
"Rata simboluri",
"Srate",
"Srate",
@@ -1039,7 +1039,7 @@ const tI18nPhrase Phrases[] = {
"Vpid",
"Vpid",
"Vpid",
- "Vpid",
+ "Video PID",
"PID Video",
"Vpid",
"PID Vídeo",
@@ -1052,11 +1052,11 @@ const tI18nPhrase Phrases[] = {
"PID Áudio (1)",
"PID Audio (1)",
"Apid1",
- "Ääni PID1",
- "Apid1",
+ "Ääni PID (1)",
"Apid1",
"Apid1",
"Apid1",
+ "Audio PID1",
"PID Audio (1)",
"Apid1",
"PID Àudio (1)",
@@ -1069,11 +1069,11 @@ const tI18nPhrase Phrases[] = {
"Apid2",
"PID Áudio (2)",
"Apid2",
- "Ääni PID2",
- "Apid2",
+ "Ääni PID (2)",
"Apid2",
"Apid2",
"Apid2",
+ "Audio PID2",
"PID Audio (2)",
"Apid2",
"PID Àudio (2)",
@@ -1086,7 +1086,7 @@ const tI18nPhrase Phrases[] = {
"PID AC3 (1)",
"PID AC3 (1)",
"AC3pid1",
- "AC3 PID1",
+ "AC3 PID (1)",
"Dpid1",
"Dpid1",
"Dpid1",
@@ -1103,7 +1103,7 @@ const tI18nPhrase Phrases[] = {
"PID AC3 (2)",
"PID AC3 (2)",
"AC3pid2",
- "AC3 PID2",
+ "AC3 PID (2)",
"Dpid2",
"Dpid2",
"Dpid2",
@@ -1120,11 +1120,11 @@ const tI18nPhrase Phrases[] = {
"PID Teletexto",
"PID Télétexte",
"Tekst-TV pid",
- "TekstiTV PID",
- "Tpid",
+ "Teksti-TV PID",
"Tpid",
"Tpid",
"Tpid",
+ "Teletext PID",
"PID Teletext",
"Tpid",
"PID Teletext",
@@ -1141,7 +1141,7 @@ const tI18nPhrase Phrases[] = {
"CA",
"CA",
"CA",
- "CA",
+ "Kortläsare",
"Criptare",
"CA",
"Accés Condicional",
@@ -1154,7 +1154,7 @@ const tI18nPhrase Phrases[] = {
"Sid",
"Sid",
"Sid",
- "Sid",
+ "Palvelu ID",
"Sid",
"Sid",
"Sid",
@@ -1165,7 +1165,7 @@ const tI18nPhrase Phrases[] = {
},
{ "Inversion",
"Inversion",
- "Inversion",
+ "Inverzija",
"Inversion",
"Inversion",
"Inversion",
@@ -1182,13 +1182,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Bandwidth",
"Bandwidth",
+ "Pasovna sirina",
"Bandwidth",
"Bandwidth",
"Bandwidth",
"Bandwidth",
"Bandwidth",
- "Bandwidth",
- "Bandwidth",
+ "Kaistanleveys",
"Bandwidth",
"Bandwidth",
"Bandwidth",
@@ -1205,7 +1205,7 @@ const tI18nPhrase Phrases[] = {
"CoderateH",
"CoderateH",
"CoderateH",
- "CoderateH",
+ "Yläkoodinopeus", //Finnish - unsure about this
"CoderateH",
"CoderateH",
"CoderateH",
@@ -1222,7 +1222,7 @@ const tI18nPhrase Phrases[] = {
"CoderateL",
"CoderateL",
"CoderateL",
- "CoderateL",
+ "Alakoodinopeus", //Finnish - unsure about this
"CoderateL",
"CoderateL",
"CoderateL",
@@ -1233,7 +1233,7 @@ const tI18nPhrase Phrases[] = {
},
{ "Modulation",
"Modulation",
- "Modulation",
+ "Modulacija",
"Modulation",
"Modulation",
"Modulation",
@@ -1250,13 +1250,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Transmission",
"Transmission",
+ "Prenos",
"Transmission",
"Transmission",
"Transmission",
"Transmission",
"Transmission",
- "Transmission",
- "Transmission",
+ "Lähetys", //Finnish - unsure about this
"Transmission",
"Transmission",
"Transmission",
@@ -1267,13 +1267,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Guard",
"Guard",
+ "Zascita",
"Guard",
"Guard",
"Guard",
"Guard",
"Guard",
- "Guard",
- "Guard",
+ "Suoja", //Finnish - unsure about this
"Guard",
"Guard",
"Guard",
@@ -1284,13 +1284,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Hierarchy",
"Hierarchy",
+ "Hierarhija",
"Hierarchy",
"Hierarchy",
"Hierarchy",
"Hierarchy",
"Hierarchy",
- "Hierarchy",
- "Hierarchy",
+ "Hierarkia",
"Hierarchy",
"Hierarchy",
"Hierarchy",
@@ -1410,11 +1410,11 @@ const tI18nPhrase Phrases[] = {
"Duração",
"Durée de vie",
"Levetid",
- "Voimassaolo",
+ "Elinikä",
"Trwalosc dni",
"Durabilidad",
"Xronos Zois",
- "Speltid",
+ "Livstid",
"Durata",
"Élettartam",
"Duració",
@@ -1456,7 +1456,7 @@ const tI18nPhrase Phrases[] = {
// Error messages:
{ "Channel is being used by a timer!",
"Kanal wird von einem Timer benutzt!",
- "Urnik zaseda kanal!",
+ "Kanal uporablja termin za snemanje!",
"Canale occupato da un timer!",
"Kanaal wordt gebruikt door een timer!",
"Canal a ser utilizador por um timer!",
@@ -1490,13 +1490,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Timer is recording!",
"Timer zeichnet gerade auf!",
- "Snemanje po urniku!",
+ "Snemanje po terminu!",
"Registrazione di un timer in corso!",
"Timer is aan het opnemen!",
"Timer a gravar!",
"Enregistrement en cours!",
"Timer gjør opptak!",
- "Ajastinnauhoitus käynnissä!",
+ "Ajastintallennus käynnissä!",
"Timer nagrywa!",
"¡Timer esta grabando!",
"Ginete progrmamatismeni egrafi!",
@@ -1507,34 +1507,34 @@ const tI18nPhrase Phrases[] = {
},
{ "Error while accessing recording!",
"Fehler beim Ansprechen der Aufzeichnung!",
- "Napaka pri dostopu do posnetka",
+ "Napaka pri dostopu do posnetka!",
"Errore nel tentativo di acc alla registrazione",
"Fout bij lezen opname!",
"Erro ao aceder à gravação",
"Impossible d'accèder à l'enregistrement",
"Feil under lesing av opptak!",
- "Nauhoituksen toistaminen epäonnistui!",
+ "Tallenteen toistaminen epäonnistui!",
"Blad - brak dostepu do nagrania!",
"¡Error al acceder a la grabación!",
"Provlima stin prospelasi egrafis!",
- "Det går inte att läsa inspelningen",
+ "Inspelningen går inte att läsa!",
"Eroare in timpul accesarii inregistrarii",
"Hiba a felvétel hozzáférésénél",
"Error a l'accedir a la gravació!",
},
{ "Error while deleting recording!",
"Fehler beim Löschen der Aufzeichnung!",
- "Napaka pri odstranjevanju posnetka!",
+ "Napaka pri brisanju posnetka!",
"Errore durante la canc del filmato!",
"Fout bij verwijderen opname!",
"Erro enquanto apagava uma gravação!",
"Erreur de suppression de l'enregistrement!",
"Feil under sletting av opptak!",
- "Nauhoituksen poistaminen epäonnistui!",
+ "Tallenteen poistaminen epäonnistui!",
"Blad przy usuwaniu nagrania!",
"¡Error al borrar la grabación!",
"Provlima sto svisimo egrafis !",
- "Det går inte att ta bort inspelningen",
+ "Inspelningen går inte att ta bort!",
"Eroare in timpul stergerii inregistrarii!",
"Hiba a felvétel törlésénél!",
"Error a l'esborrar la gravació!",
@@ -1564,7 +1564,7 @@ const tI18nPhrase Phrases[] = {
"Nenhuma placa DVB disponivel para gravar!",
"Pas de carte DVB disponible pour l'enregistrement!",
"Ingen ledige DVB enheter for opptak!",
- "Ei vapaata vastaanotinta nauhoitusta varten!",
+ "Ei vapaata vastaanotinta tallennukselle!",
"Brak wolnej karty DVB do nagrywania!",
"¡No hay dispositivo DVB disponible para grabar!",
"Den periseuei DVB Karta gia egrafi!",
@@ -1575,13 +1575,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Channel not available!",
"Kanal nicht verfügbar!",
+ "Kanal ni razpolozljiv!",
"",//TODO
"",//TODO
"",//TODO
+ "Chaîne non disponible!",
"",//TODO
- "",//TODO
- "",//TODO
- "Kanavaa ei voi katsoa nyt!",
+ "Kanava ei ole käytettävissä!",
"",//TODO
"!Canal no disponible!",
"To kanali den ine diathesimo",
@@ -1592,13 +1592,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Channel settings are not unique!",
"Kanaleinstellungen sind nicht eindeutig!",
+ "Nastavitve kanala niso edinstvene!",
"",//TODO
"",//TODO
"",//TODO
+ "Caractéristiques des chaînes ne sont pas uniques",
"",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
+ "Kanava-asetukset eivät ole yksilölliset!",
"",//TODO
"!Propiedades de canal duplicadas!",
"Ta kanalia stin lista den ine monadika!",
@@ -1615,7 +1615,7 @@ const tI18nPhrase Phrases[] = {
"Canal bloqueado (a gravar)!",
"Chaîne verrouillée (enregistrement en cours)!",
"Kanalen er låst (opptak)!",
- "Kanava lukittu (nauhoitusta varten)!",
+ "Kanava lukittu (tallennus käynnissä)!",
"Kanal zablokowany (nagrywanie w toku)!",
"¡Canal bloqueado (grabando)!",
"To kanali ine klidomeno (Ginete egrafi)!",
@@ -1632,7 +1632,7 @@ const tI18nPhrase Phrases[] = {
"Impossível iniciar modo de transferência!",
"Impossible d'utiliser le mode transfert!",
"Kan ikke starte transfer modus!",
- "Käsittämättömiä teknisiä ongelmia!",
+ "Käsittämättömiä teknisiä ongelmia!", //Finnish - unsure about this ;-)
"Tryb transferowy jest niemozliwy!",
"¡No puedo iniciar modo de transferencia!",
"Adinamia ekinisis katastasis metaforas!",
@@ -1643,17 +1643,17 @@ const tI18nPhrase Phrases[] = {
},
{ "No editing marks defined!",
"Keine Schnittmarken gesetzt!",
+ "Nobena tocka ni definirana!",
"",//TODO
"",//TODO
"",//TODO
+ "Pas de marques d'édition définies!",
"",//TODO
"",//TODO
"",//TODO
+ "Muokkausmerkinnät puuttuvat",
"",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
+ "Det finns inga redigeringsmärken",//TODO
"",//TODO
"",//TODO
"",//TODO
@@ -1666,11 +1666,11 @@ const tI18nPhrase Phrases[] = {
"Não pode iniciar a modificação!",
"Impossible de commencer le montage!",
"Kan ikke starte redigeringsprosessen!",
- "Muokkauksen aloittaminen ei onnistu!",
+ "Muokkauksen aloitus epäonnistui!",
"Uruchamianie montazu jest niemozliwe!",
"¡No puedo iniciar proceso de modificación!",
"Adinamia ekinisis tis epexsergasias!",
- "Kan inte starta editering!",
+ "Kan inte starta redigering!",
"Nu pot porni procesul de editare!",
"A vágás nem indítható!",
"No puc iniciar el procés d'edició!",
@@ -1687,24 +1687,24 @@ const tI18nPhrase Phrases[] = {
"Montaz w toku!",
"¡Proceso de modificación ya fue iniciado!",
"Epexsergasia vriskete se exselixsi!",
- "Editering är redan aktiv!",
+ "Redigeringen är redan aktiv!",
"Procesul de editare este activ!",
"A vágás már aktivált!",
"Procés d'edició iniciat anteriorment!",
},
{ "Can't shutdown - option '-s' not given!",
"Shutdown unmöglich - Option '-s' fehlt!",
- "Zaustavitev ni mogoca - opcija '-s' ni podana!",
+ "Zaustavitev ni izvedljiva - opcija '-s' ni podana!",
"Impossibile spegnere - parametro '-s' non passato",
"Shutdown onmogelijk - Optie '-s' ontbreekt!",
"Impossível desligar - falta a opção '-s'!",
"Arrêt impossible - option '-s' absente!",
"Kan ikke slå av - startet uten parameteret '-s'!",
- "Ei voida sammuttaa '-s' parametria ei annettu!",
+ "Sammutus ei onnistu - '-s' parametri puuttuu!",
"Wylaczenie niemozliwe - brak opcji '-s'!",
"¡No puedo apagar - opción '-s' ausente!",
"Adinaton na ginei termatismos. Aniparkti i parametros '-s'!",
- "Kan inte avsluta, måste använda flagga '-s'",
+ "Kan inte avsluta, måste använda parameter '-s'",
"Nu pot opri calculatorul - vezi optiunea '-s'",
"A leállítás nem lehetséges - Opció '-s' hiányzik!",
"No puc apagar, falta la opció -s !"
@@ -1728,51 +1728,51 @@ const tI18nPhrase Phrases[] = {
},
{ "Can't open CAM menu!",
"CAM-Menü kann nicht geöffnet werden!",
+ "Ne morem odpreti CAM menija!",
"",//TODO
"",//TODO
"",//TODO
+ "Impossible d'ouvrir le menu CAM!",
"",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
+ "Salausmoduuli ei valittavissa",
"",//TODO
"¡No pudeo acceder al menú de la CAM!",
"Den mpori na aniksi to CAM menou!",
- "",//TODO
+ "Det går inte att öppna CAM menyn!",
"",//TODO
"",//TODO
"No puc obrir el menú de la CAM!",
},
{ "Can't reset CAM!",
"CAM-Reset fehlgeschlagen!",
+ "Ne morem resetirati CAM-a",
"",//TODO
"",//TODO
"",//TODO
+ "Impossible de réinitialiser la CAM!",
"",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
+ "Salausmoduulin alustus epäonnistui!",
"",//TODO
"¡No puedo reiniciar la CAM!",
"Adinato na gini epanafora sto CAM",
- "",//TODO
+ "Kan inte återställa CAM!",
"",//TODO
"",//TODO
"No puc reiniciar la CAM!",
},
{ "CAM has been reset",
"CAM wurde zurückgesetzt!",
+ "CAM je resetiran!",
"",//TODO
"",//TODO
"",//TODO
+ "La CAM a été réinitialisée",
"",//TODO
- "",//TODO
- "",//TODO
- "",//TODO
+ "Salausmoduuli alustettu",
"",//TODO
"CAM reiniciada",
"Sto CAM egine apanafora",
- "",//TODO
+ "CA modulen har återställts",
"",//TODO
"",//TODO
"CAM reiniciada",
@@ -1786,7 +1786,7 @@ const tI18nPhrase Phrases[] = {
"OSD",
"Affichage des menus",
"OSD",
- "Tekstinäyttö",
+ "Kuvaruutunäyttö",
"OSD",
"Menús en pantalla",
"OSD",
@@ -1797,7 +1797,7 @@ const tI18nPhrase Phrases[] = {
},
{ "EPG",
"EPG",
- "EPG",
+ "Programski vodnik",
"EPG",
"EPG",
"EPG",
@@ -1871,7 +1871,7 @@ const tI18nPhrase Phrases[] = {
"A gravar",
"Enregistrement",
"Opptak",
- "Nauhoita",
+ "Tallennus",
"Nagranie",
"Opciones de Grabación",
"Egrafi",
@@ -1888,11 +1888,11 @@ const tI18nPhrase Phrases[] = {
"Replay",
"Lecture",
"Spill av",
- "Toista",
+ "Toisto",
"Odtwarzanie",
"Opciones de Reproducción",
"Anametadosi",
- "Repris",
+ "Uppspelning",
"Redare",
"Lejátszás",
"Opcions de Reproducció",
@@ -1905,7 +1905,7 @@ const tI18nPhrase Phrases[] = {
"Outros",
"Divers",
"Forskjellig",
- "Sekalaista",
+ "Sekalaiset",
"Pozostale",
"Varios",
"Diafora",
@@ -1922,11 +1922,11 @@ const tI18nPhrase Phrases[] = {
"Plugins",
"Plugins",
"Plugins",
- "Laajennokset",
- "Plugins",
+ "Laajennukset",
"Plugins",
"Plugins",
"Plugins",
+ "Moduler",
"Plugins",
"Plugins",
"Plugins",
@@ -1939,11 +1939,11 @@ const tI18nPhrase Phrases[] = {
"Plugin",
"Plugin",
"Plugin",
- "Laajennos",
- "Plugin",
+ "Laajennus",
"Plugin",
"Plugin",
"Plugin",
+ "Modul",
"Plugin",
"Plugin",
"Plugin",
@@ -1956,7 +1956,7 @@ const tI18nPhrase Phrases[] = {
"Reiniciar",
"Redémarrer",
"Start på nytt",
- "Aloita uudelleen",
+ "Uudelleenkäynnistys"
"Zastartowac",
"Reiniciar",
"Epanekinisi",
@@ -2025,7 +2025,7 @@ const tI18nPhrase Phrases[] = {
"Mostrar contador (s)",
"Durée affichage écran (s)",
"Tid meldinger skal vises (s)",
- "Ilmoitusten näkymisaika (s)",
+ "Viestien esitysaika (s)",
"Czas wyswietlania wiadomosci (s)",
"Duración muestra mensajes (s)",
"Xronos endiksis minimaton (d)",
@@ -2042,7 +2042,7 @@ const tI18nPhrase Phrases[] = {
"Posição de info dos canais",
"Position infos chaînes",
"Posisjon på kanalinformasjon",
- "Kanavainfon sijainti",
+ "Kanavatiedon sijainti",
"Lokalizacja informacji o kanale",
"Posición para información canal",
"Thesi Pliroforias kanalion",
@@ -2059,7 +2059,7 @@ const tI18nPhrase Phrases[] = {
"Mostrar info ao mudar de Canal",
"Affichage progr. en cours",
"Info ved kanalskifte",
- "Näytä kanavainfo",
+ "Näytä kanavatieto",
"Informacja przy zmianie kanalu",
"Información para cambio de canal",
"Plirofories stin alagi kanaliou",
@@ -2076,7 +2076,7 @@ const tI18nPhrase Phrases[] = {
"Scroll da página no menu",
"Scrolling par pages",
"Rask rulling i menyer",
- "Valikkojen rullaus",
+ "Valikkojen selaus",
"Przesuwac stronami",
"Desplazar página entera",
"Kilisi selidas",
@@ -2110,7 +2110,7 @@ const tI18nPhrase Phrases[] = {
"Directorias de gravação",
"Dossiers d'enregistrements",
"Kataloger til opptak",
- "Nauhoitushakemistot",
+ "Tallennehakemistot",
"Wykaz nagran",
"Gracaciones en directorios",
"Fakeloi egrafon",
@@ -2127,7 +2127,7 @@ const tI18nPhrase Phrases[] = {
"Expirou o EPG (h)",
"Inactivité avant rech. EPG (h)",
"Ledig tid før EPG-søk (h)",
- "Ohjelmatied. odotusaika (h)",
+ "Ohjelmaoppaan taustapäivitys (h)",
"Czas do skanu EPG (h)",
"Tiempo hasta exploración EPG (h)",
"Xronos mexri eksetasi EPG se Ores",
@@ -2144,7 +2144,7 @@ const tI18nPhrase Phrases[] = {
"Nível de correctção EPG",
"Niveau de correction EPG",
"Nivå for EPG-feilretting",
- "EPG Bugfix Level",
+ "Ohjelmaoppaan korjaustaso",
"Poziom bledow EPG",
"Nivel para arreglar EPG",
"EPG Bugfix Vathmos",
@@ -2161,7 +2161,7 @@ const tI18nPhrase Phrases[] = {
"Ajustar relógio do sistema",
"Ajuster l'heure du système",
"Juster system-klokken",
- "Vastaanota kellonaika",
+ "Aseta kellonaika",
"Ustawianie czasu",
"Ajustar reloj de sistema",
"Sintonismos Oras ipologosti",
@@ -2195,7 +2195,7 @@ const tI18nPhrase Phrases[] = {
"Interface DVB primário",
"Carte DVB primaire",
"Hoved DVB-enhet",
- "Ensisij. vast.otin",
+ "Päävastaanotin",
"Pierwotny interfejs DVB",
"Primer interface DVB",
"Protevon DVB karta",
@@ -2212,7 +2212,7 @@ const tI18nPhrase Phrases[] = {
"Formato vídeo",
"Format vidéo",
"TV-Format",
- "Kuvamuoto",
+ "Kuvasuhde",
"Format telewizyjny",
"Formato Vídeo",
"Video Format",
@@ -2229,7 +2229,7 @@ const tI18nPhrase Phrases[] = {
"Limite de bandas LNB (MHz)",
"Limite de bandes LNB (MHz)",
"LO-grensefrekvens (MHz)",
- "SLOF (MHz)",
+ "SLOF (MHz)", //Finnish - unsure about this
"SLOF (MHz)",
"SLOF (MHz)",
"SLOF (MHz)",
@@ -2246,7 +2246,7 @@ const tI18nPhrase Phrases[] = {
"Frequência base LNB (MHz)",
"Fréquence basse LNB (MHz)",
"LO-frekvens i lavbåndet (MHz)",
- "LO LNB taajuus (MHz)",
+ "LNB alataajuus (MHz)",
"Dolna czestotliwosc LNB (MHz)",
"Frecuencia baja LNB (MHz)",
"Kato LNB-Sixnotita (MHz)",
@@ -2263,7 +2263,7 @@ const tI18nPhrase Phrases[] = {
"Frequência alta LNB (MHz)",
"Fréquence haute LNB (MHz)",
"LO-frekvens i høybåndet (MHz)",
- "HI LNB taajuus (MHz)",
+ "LNB ylätaajuus (MHz)",
"Gorna czestotliwosc LNB (MHz)",
"Frecuencia alta LNB (MHz)",
"Ano LNB-Sixnotita (MHz)",
@@ -2280,7 +2280,7 @@ const tI18nPhrase Phrases[] = {
"Utilizar DiSEqC",
"Utiliser le DiSEqC",
"Bruk DiSEqC",
- "Käytä DiSEqC",
+ "DiSEqC käytössä",
"Uzywac DiSEqC",
"Utilizar DiSEqC",
"Energopiisi DiSEqC",
@@ -2297,7 +2297,7 @@ const tI18nPhrase Phrases[] = {
"CICAM DVB",
"Accès conditionnel",
"CICAM DVB",
- "CICAM DVB",
+ "CICAM DVB", //Finnish - unsure about this "Salausmoduuli"
"CICAM DVB",
"CICAM DVB",
"CICAM DVB",
@@ -2348,7 +2348,7 @@ const tI18nPhrase Phrases[] = {
"Limite Primário",
"Première limite",
"Prioritetsgrense HovedDVB",
- "PrimaryLimit",
+ "Päälimitti", //Finnish - unsure about this ;-)
"Pierwotny limit",
"Límite primario",
"Protevon orio",
@@ -2374,56 +2374,56 @@ const tI18nPhrase Phrases[] = {
"Default priority",
"Prioritat per defecte",
},
- { "Setup.Recording$Pause lifetime (d)",
- "Pause Lebensdauer (d)",
- "",// TODO
- "",// TODO
- "",// TODO
- "",// TODO
+ { "Setup.Recording$Default lifetime (d)",
+ "Default Lebensdauer (d)",
+ "Osnovni zivljenski cas (d)",
+ "Durata predefinita (d)",
+ "Standaard levensduur (d)",
+ "Validade por defeito (d)",
+ "Durée de vie par défaut (j)",
+ "Normal levetid timer (d)",
+ "Oletuselinikä (d)",
+ "Pierwotna trwalosc (d)",
+ "Duración predefinida",
+ "Xronos zois",
+ "Normal livstid (dagar)",
+ "Durata predefinita",
+ "Default élettartam",
+ "Duració predefinida",
+ },
+ { "Setup.Recording$Pause priority",
+ "Pause Priorität",
+ "Prioriteta pavze",
"",// TODO
"",// TODO
"",// TODO
+ "Priorité des pauses",
"",// TODO
+ "Keskeytyksen prioriteetti",
"",// TODO
"",// TODO
"",// TODO
+ "Prioritet för direktinspelning",
"",// TODO
"",// TODO
- "Duració de la pausa (d)",
+ "Prioritat de la pausa",
},
- { "Setup.Recording$Pause priority",
- "Pause Priorität",
- "",// TODO
- "",// TODO
- "",// TODO
- "",// TODO
+ { "Setup.Recording$Pause lifetime (d)",
+ "Pause Lebensdauer (d)",
+ "Cas pavze (d)",
"",// TODO
"",// TODO
"",// TODO
+ "Durée de vie des pauses (j)",
"",// TODO
+ "Keskeytyksen elinikä (d)",
"",// TODO
"",// TODO
"",// TODO
+ "Livstid för direktinspelning (dagar)",
"",// TODO
"",// TODO
- "Prioritat de la pausa",
- },
- { "Setup.Recording$Default lifetime (d)",
- "Default Lebensdauer (d)",
- "Osnovni zivljenski cas (d)",
- "Durata predefinita (d)",
- "Standaard levensduur (d)",
- "Validade por defeito (d)",
- "Durée de vie par défaut (j)",
- "Normal levetid timer (d)",
- "Oletus voimassaoloaika (d)",
- "Pierwotna trwalosc (d)",
- "Duración predefinida",
- "Xronos zois",
- "Normal livstid",
- "Durata predefinita",
- "Default élettartam",
- "Duració predefinida",
+ "Duració de la pausa (d)",
},
{ "Setup.Recording$Use episode name",
"Episodenname verwenden",
@@ -2450,7 +2450,7 @@ const tI18nPhrase Phrases[] = {
"Marca de gravação rápida",
"Marquage enregistr. immédiats",
"Markere direkteopptak",
- "Merkitse välitön nauh.",
+ "Merkitse pikatallenne",
"Zaznaczyc natychm. nagranie",
"Marcar grabaciones instantáneas",
"Epilogi trexon egrafis",
@@ -2467,7 +2467,7 @@ const tI18nPhrase Phrases[] = {
"Nome de gravação rápida",
"Noms enregistr. immédiats",
"Navngi direkteopptak",
- "Nimeä välitön nauh.",
+ "Nimeä pikatallenne",
"Nazwac natychm. nagranie",
"Nombrar grabaciones instantáneas",
"eponomasi trexon egrafis",
@@ -2478,13 +2478,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Setup.Recording$Instant rec. time (min)",
"Dauer der Direktaufzeichnung (min)",
- "",//TODO
+ "Cas direktnega snemanja (min)",
"",//TODO
"",//TODO
"",//TODO
"Durée enregistr. immédiat (min)",
"",//TODO
- "Pikanauhoituksen pituus (min)",
+ "Pikatallennuksen kesto (min)",
"",//TODO
"Tiempo de grabación instantánea (min)",
"Stigmiees egrafes xronos (lepta)",
@@ -2501,11 +2501,11 @@ const tI18nPhrase Phrases[] = {
"Gravar em Dolby Digital",
"Enregistrer en Dolby Digital",
"Ta opp Dolby Digital lyd",
- "Dolby Digital nauhoitus",
+ "Dolby Digital tallennus",
"Nagrywac Dolby Digital",
"Grabar sonido Dolby Digital",
"Egrafi tou Dolby Digital ixou",
- "Spela in ljud med Dolby Digital",
+ "Spela in ljudet med Dolby Digital",
"Inregistreaza Dolby Digital",
"Dolby Digitál felvétel",
"Gravar el sò en Dolby Digital",
@@ -2518,7 +2518,7 @@ const tI18nPhrase Phrases[] = {
"Tamanho máximo dos ficheiros (MB)",
"Taille maxi des fichiers (MB)",
"Maksimal størrelse på videofiler (MB)",
- "Maksimi tiedoston koko (MB)",
+ "Suurin tiedostokoko (MB)",
"Maks. wielkosc pliku (MB)",
"Tamaño máx. de fichero (MB)",
"Megisto megethos arxeiou (MB)",
@@ -2535,11 +2535,11 @@ const tI18nPhrase Phrases[] = {
"Quebrar ficheiros",
"Séparer les séquences",
"Splitt redigerte filer",
- "Paloittele muokatut",
+ "Jaottele muokatut tallenteet",
"Dzielic montowane pliki",
"Quebrar ficheros",
"Diamelisma epeksergasmenon arxeion",
- "Dela upp editerade filer",
+ "Dela upp redigerade filer",
"Separare fisiere editate",
"Feldolgozott File-k felosztása",
"Separar arxius",
@@ -2573,24 +2573,24 @@ const tI18nPhrase Phrases[] = {
"Wyswietlac status odtwarzania",
"Mostrar modo de replay",
"Endiksi katastasis anametadosis",
- "Visa uppspelnings mode",
+ "Visa uppspelnings läge",
"Afiseaza modul de redare",
"Lejátszás feltüntetése",
"Mostrar mode de reproducció",
},
{ "Setup.Replay$Resume ID",
"Wiedergabe ID",
+ "Predvajalni ID",
"Resume ID",// TODO
"Resume ID",// TODO
"Resume ID",// TODO
"Resume ID",// TODO
"Resume ID",// TODO
- "Resume ID",// TODO
- "Resume ID",// TODO
+ "Jatko ID", //Finnish - unsure about this
"Resume ID",// TODO
"Continuar ID",
"Resume ID",// TODO
- "Resume ID",// TODO
+ "Återuppta ID",
"Resume ID",// TODO
"Resume ID",// TODO
"Continuar ID",
@@ -2603,7 +2603,7 @@ const tI18nPhrase Phrases[] = {
"Período mínimo de pausa (min)",
"MinEventTimeout (min)",
"Minste hendelsespause (min)",
- "Minimi tapahtuman odotus (min)",
+ "Tapahtuman odotusaika (min)", //Finnish - unsure about this
"Min. czas do nast. akcji (Event) (min)",
"Tiempo mínimo pausa (min)",
"Elaxistos Xronos paremvolis (lepta)",
@@ -2620,7 +2620,7 @@ const tI18nPhrase Phrases[] = {
"Período mínimo de inactividade (min)",
"Durée minimale d'inact. (min)",
"Minimumstid med inaktivitet (min)",
- "Minimi käyttäjän odotus (min)",
+ "Käyttäjätoiminnon odotusaika (min)", //Finnish - unsure about this
"Min. brak aktywnosci uzytkownika (min)",
"Tiempo mínimo inactividad (min)",
"Elaxistos xronos mi xrisis (lepta)",
@@ -2631,7 +2631,7 @@ const tI18nPhrase Phrases[] = {
},
{ "Setup.Miscellaneous$SVDRP timeout (s)",
"SVDRP Timeout (s)",
- "SVDRP Timeout (s)",
+ "SVDRP cas neaktivnosti (s)",
"Timeout SVDRP (s)",
"SVDRP Timeout (s)",
"Timeout SVDRP (s)",
@@ -2684,7 +2684,7 @@ const tI18nPhrase Phrases[] = {
// The allowed characters in strings:
{ " abcdefghijklmnopqrstuvwxyz0123456789-.#~",
" aäbcdefghijklmnoöpqrstuüvwxyz0123456789-.#~",
- "",// TODO
+ " abcdefghijklmnopqrstuvwxyz0123456789-.#~",
"",// TODO
"",// TODO
"",// TODO
@@ -2702,13 +2702,13 @@ const tI18nPhrase Phrases[] = {
// Learning keys:
{ "Learning Remote Control Keys (%s)",
"Fernbedienungs-Codes lernen (%s)",
- "Ucim se kod upravljalca (%s)",
+ "Ucenje kod upravljalca (%s)",
"Apprendimento tasti unita` remota (%s)",
"Leren toetsen afstandsbediening (%s)",
"Aprender as teclas do telecomando (%s)",
"Apprentissage des codes de télécommande (%s)",
"Lære fjernkontrolltaster (%s)",
- "Kaukosäätimen näppäinten opettelu (%s)",
+ "Kaukosäätimen opettaminen (%s)",
"Nauka kodu pilota (%s)",
"Aprendiendo teclas del telemando (%s)",
"Ekmathisi pliktron tilexirismou (%s)",
@@ -2725,7 +2725,7 @@ const tI18nPhrase 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",
+ "Vaihe 1: Koodauksen tunnistaminen",
"Faza 1: Detekcja typu kodu",
"Fase 1: Detectando tipo de receptor",
"Phasi 1: Anixneusi kodika RC",
@@ -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 mitä tahansa kaukosäätimen näppäintä",
+ "Paina jotain kaukosäätimen näppäintä",
"Nacisnac klawisz pilota",
"Pulse una tecla en el telemando",
"Piese ena pliktro sto tilexiristirio",
@@ -2776,7 +2776,7 @@ const tI18nPhrase Phrases[] = {
"Não pressione nada...",
"N'appuyer sur aucune touche ...",
"Ikke trykk på noen av tastene...",
- "Älä paina mitään näppäintä...",
+ "Älä paina kaukosäätimen näppäimiä...",
"Nie naciskac klawiszy...",
"No pulse ninguna tecla...",
"Min piezeis pliktra...",
@@ -2827,7 +2827,7 @@ const tI18nPhrase Phrases[] = {
"Pressione 'Cima' para confirmar",
"Appuyer sur 'Haut' pour confirmer",
"Trykk 'Opp' for å bekrefte",
- "Paina 'Ylös' hyväksyäksesi",
+ "Hyväksy painamalla 'Ylös'",
"Nacisnac 'Gora' do potwierdzenia",
"Pulse 'Arriba' para confirmar",
"Piese 'pano' gia apodoxi",
@@ -2844,7 +2844,7 @@ const tI18nPhrase Phrases[] = {
"Pressione 'Baixo' para continuar",
"Appuyer sur 'Bas' pour continuer",
"Trykk Ned' for å fortsette",
- "Paina 'Alas' jatkaaksesi",
+ "Jatka painamalla 'Alas'",
"Nacisnac 'Dol' zeby kontynuowac",
"Pulse 'Abajo' para confirmar",
"Piese 'kato' gia sinexia",
@@ -2861,7 +2861,7 @@ const tI18nPhrase Phrases[] = {
"(Pressione 'Cima' para voltar)",
"(Appuyer sur 'Haut' pour revenir en arrière)",
"(trykk 'Opp' for å gå tilbake)",
- "(paina 'Ylös' palataksesi takaisin)",
+ "(palaa takaisin painamalla 'Ylös')",
"(Nacisnac 'Gora' cofa)",
"(Pulse 'Arriba' para retornar)",
"(Piese 'pano' gia epistrofi",
@@ -2878,7 +2878,7 @@ const tI18nPhrase Phrases[] = {
"(Pressione 'Baixo' para terminar a definição)",
"(Appuyer sur 'Bas' pour terminer)",
"(trykk 'Ned' for å avslutte innlæring)",
- "(paina 'Alas' lopettaaksesi näppäinten opettelun)",
+ "(lopeta opettaminen painamalla 'Alas')",
"(Nacisnac 'Dol' by zakonczyc)",
"(Pulse 'Abajo' para terminar programación teclas)",
"(Piese 'Kato' gia termatismo diloseon plktron)",
@@ -2889,30 +2889,30 @@ const tI18nPhrase Phrases[] = {
},
{ "(press 'Menu' to skip this key)",
"('Menü' drücken zum Überspringen)",
- "",// TODO
+ "pritisnite 'Meni' za preskok te tipke",
"",// TODO
"",// TODO
"",// TODO
"('Menu' pour passer cette touche)",
"",// TODO
- "(Paina 'Valikko' jos näppäintä ei ole)",
+ "näppäimen puuttuessa paina 'Valikko'",
"",// TODO
"Pulse 'Menu' para saltarse esta tecla",
"Pata 'Menou' gia prosperasi aftou tou pliktrou",
- "",// TODO
+ "Tryck 'Meny' för att hoppa över denna knapp.",
"",// TODO
"",// TODO
"Premi 'Menu' per obviar aquesta tecla",
},
{ "Phase 3: Saving key codes",
"Phase 3: Codes abspeichern",
- "Faza 3: Shranjujem kodo",
+ "Faza 3: Shranjevanje kod tipk",
"Fase 3: Salvataggio key codes",
"Fase 3: Opslaan toets codes",
"Fase 3: A salvar os códigos das teclas",
"Phase 3: Sauvegarde des codes des touches",
"Fase 3: Lagre tastekoder",
- "Vaihe 3: Näppäinkoodien tallettaminen",
+ "Vaihe 3: Näppäinkoodien tallentaminen",
"Faza 3: Zapamietac Kod",
"Fase 3: Guardar códigos de teclas",
"Fasi 3: Apothikevsi kodikon",
@@ -2929,7 +2929,7 @@ const tI18nPhrase 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",
+ "Paina 'Ylös' tallentaaksesi ja 'Alas' peruuttaaksesi",
"'Gora' zapamietuje, 'Dol' przerywa",
"Pulse 'Arriba' para guardar, 'Abajo' para anular",
"'Pano' apothikevsi, 'Kato' akirosi",
@@ -3128,13 +3128,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Play",
"Wiedergabe",
- "",// TODO
+ "Predvajaj",
"",// TODO
"",// TODO
"",// TODO
"Lecture",
"",// TODO
- "",// TODO
+ "Toista",
"",// TODO
"Reproducir",
"Anametadosi",
@@ -3145,13 +3145,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Pause",
"Pause",
- "",// TODO
+ "Pavza",
"",// TODO
"",// TODO
"",// TODO
"Pause",
"",// TODO
- "",// TODO
+ "Keskeytä",
"",// TODO
"Pausa",
"Dialima",
@@ -3162,13 +3162,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Stop",
"Stop",
- "",// TODO
+ "Ustavi",
"",// TODO
"",// TODO
"Stop",
+ "Arrêt",
"",// TODO
- "",// TODO
- "",// TODO
+ "Pysäytä",
"",// TODO
"Parar",
"Terma",
@@ -3179,13 +3179,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Record",
"Aufnehmen",
- "",// TODO
+ "Snemaj",
"",// TODO
"",// TODO
"",// TODO
"Enregistrement",
"",// TODO
- "",// TODO
+ "Tallenna",
"",// TODO
"Grabar",
"Egrafi",
@@ -3196,34 +3196,34 @@ const tI18nPhrase Phrases[] = {
},
{ "FastFwd",
"Vorlauf",
- "",// TODO
+ "Hitro naprej",
"",// TODO
"",// TODO
"",// TODO
"Avance rapide",
"",// TODO
- "",// TODO
+ "Pikakelaus >>",
"",// TODO
"Adelante rápido",
"Girisma mprosta",
- "Spola framåt",
+ "Snabbspolning framåt",
"",// TODO
"",// TODO
"Endavant ràpidament",
},
{ "FastRew",
"Rücklauf",
- "",// TODO
+ "Hitro nazaj",
"",// TODO
"",// TODO
"",// TODO
"Retour rapide",
"",// TODO
- "",// TODO
+ "Pikakelaus <<",
"",// TODO
"Atrás rápido",
"Girisma piso",
- "Spola bakåt",
+ "Snabbspolning bakåt",
"",// TODO
"",// TODO
"Enrera ràpidament",
@@ -3247,13 +3247,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Channel+",
"Kanal+",
- "",// TODO
+ "Kanal+",
"",// TODO
"",// TODO
"",// TODO
"Chaîne+",
"",// TODO
- "",// TODO
+ "Kanava +",
"",// TODO
"Canal +",
"Kanali+",
@@ -3264,13 +3264,13 @@ const tI18nPhrase Phrases[] = {
},
{ "Channel-",
"Kanal-",
- "",// TODO
+ "Kanal-",
"",// TODO
"",// TODO
"",// TODO
"Chaîne-",
"",// TODO
- "",// TODO
+ "Kanava -",
"",// TODO
"Canal -",
"Kanali-",
@@ -3287,7 +3287,7 @@ const tI18nPhrase Phrases[] = {
"Volume+",
"Volume+",
"Volum+",
- "Äänenvoimakkuus+",
+ "Äänenvoimakkuus +",
"Glosnej",
"Volumen+",
"Entasi+",
@@ -3304,7 +3304,7 @@ const tI18nPhrase Phrases[] = {
"Volume-",
"Volume-",
"Volum-",
- "Äänenvoimakkuus-",
+ "Äänenvoimakkuus -",
"Ciszej",
"Volumen-",
"Entasi-",
@@ -3321,7 +3321,7 @@ const tI18nPhrase Phrases[] = {
"Sem som",
"Coupure du son",
"Lyd av",
- "Äänen vaimennus",
+ "Mykistä",
"Cisza",
"Mudo",
"Siopilo",
@@ -3367,13 +3367,13 @@ const tI18nPhrase Phrases[] = {
},
{ "off",
"aus",
+ "izklop",
"",// TODO
"",// TODO
+ "off",
"",// TODO
"",// TODO
- "",// TODO
- "",// TODO
- "",// TODO
+ "pois",
"",// TODO
"off",
"klisto",
@@ -3384,34 +3384,34 @@ const tI18nPhrase Phrases[] = {
},
{ "none",
"keine",
- "",// TODO
+ "nobeden",
"",// TODO
"",// TODO
"",// TODO
"aucun",
"",// TODO
- "",// TODO
+ "tyhjä",
"",// TODO
"ninguno"
"kanena",
- "",// TODO
+ "ingen",
"",// TODO
"",// TODO
"cap",
},
{ "auto",
"auto",
- "",// TODO
+ "avtomatsko",
"",// TODO
"",// TODO
"",// TODO
"auto",
"",// TODO
- "",// TODO
+ "auto",
"",// TODO
"auto",
"aftomato",
- "",// TODO
+ "automatisk",
"",// TODO
"",// TODO
"auto",
@@ -3445,7 +3445,7 @@ const tI18nPhrase Phrases[] = {
"dol",
"parte inferior",
"kato",
- "nedre",
+ "undre",
"jos",
"lent",
"a baix",
@@ -3458,7 +3458,7 @@ const tI18nPhrase Phrases[] = {
"Disk",
"Disque",
"Disk",
- "Disk",
+ "Levy",
"Disk",
"Disco",
"Disk",
@@ -3492,7 +3492,7 @@ const tI18nPhrase Phrases[] = {
"Saltar: ",
"Accès direct: ",
"Hopp: ",
- "Hyppää: ",
+ "Siirry: ",
"Skok: ",
"Salta a: ",
"Pidima: ",
@@ -3537,13 +3537,13 @@ const tI18nPhrase Phrases[] = {
},
{ " Stop recording ", // note the leading and trailing blanks!
" Aufzeichnung beenden ",
- " Prekini shranjevanje ",
+ " Prekini snemanje ",
" Interrompi registrazione ",
" Stop opnemen ",
" Parar gravação ",
" Arrêter l'enregistrement ",
" Stopp opptak fra ",
- " Pysäytä nauhoitus ",
+ " Pysäytä tallennus ",
" Zatrzymac nagrywanie ",
" Parar grabación ",
" Telos egrafis ",
@@ -3560,11 +3560,11 @@ const tI18nPhrase Phrases[] = {
" Anular modificação",
" Annuler le montage",
" Avbryt redigering",
- " Peruuta muokkaus",
+ " Peru muokkaus",
" Przerwac montaz",
" Anular modificación ",
" Akirosi epexsergasias",
- " Avbryt editering",
+ " Avbryt redigering",
" Opreste editare",
" Vágást megszakítani",
" Cancel·lar l'edició ",
@@ -3577,7 +3577,7 @@ const tI18nPhrase Phrases[] = {
"A mudar interface DVB primário...",
"Changement de carte DVB primaire...",
"Bytter første DVB-enhet...",
- "Vaihdetaan ensisijainen vastaanotin...",
+ "Vaihdetaan päävastaanottimelle...",
"Pierwszy interfejs DVB przelacza...",
"Cambio al interface DVB primario...",
"I protevon DVB Karta alazi...",
@@ -3615,14 +3615,14 @@ const tI18nPhrase Phrases[] = {
"Uruchomiony proces montazu",
"Proceso modificación iniciado",
"Arxi epexsergasias",
- "Editering startad",
+ "Redigering startad",
"Procesul de editare a inceput",
"Vágás elindítva",
"Procés d'edició iniciat",
},
{ "Editing process finished",
"Schnitt beendet",
- "Proces urejanja koncan",
+ "Proces urejanja je koncan",
"Processo di modifica terminato",
"Bewerken is klaar",
"Processo de modificação terminado",
@@ -3632,7 +3632,7 @@ const tI18nPhrase Phrases[] = {
"Proces montazu zakonczony",
"Proceso de modificación terminado",
"I epexsergasia teliose",
- "Editering avslutad",
+ "Redigering avslutad",
"Procesul de editare s-a terminat",
"Vágás befejezve",
"Procés d'edició finalitzat",
@@ -3649,7 +3649,7 @@ const tI18nPhrase Phrases[] = {
"Bledny proces montazu!",
"Modificación ha fallado!",
"I epexsergasia apetixe!",
- "Editeringsprocessen misslyckades",
+ "Redigeringsprocessen misslyckades",
"Proces de editare nereusit",
"Vágás sikertelen!",
"Procés d'edició fallit!",
@@ -3662,7 +3662,7 @@ const tI18nPhrase Phrases[] = {
"A pesquisar gravações...",
"Recherche des enregistrements...",
"Går igjennom opptakene...",
- "haetaan nauhoituksia...",
+ "haetaan tallenteita...",
"Skan nagran...",
"buscando grabaciones...",
"Eksetasi egrafon...",
@@ -3673,34 +3673,34 @@ const tI18nPhrase Phrases[] = {
},
{ "Pausing live video...",
"Live-Signal wird angehalten...",
- "",// TODO
+ "Ustavljanje predvajanja v zivo...",
"",// TODO
"",// TODO
"",// TODO
"Pause de l'émission en direct...",
"",// TODO
- "",// TODO
+ "Keskeytetään lähetys...",
"",// TODO
"Emisión en directo parada...",
"",// TODO
- "",// TODO
+ "Pausar direktinspelningen",
"",// TODO
"",// TODO
"Pausa d'emissió en directe..."
},
{ "This plugin has no setup parameters!",
"Dieses Plugin hat keine Setup-Parameter!",
+ "Ta plugin nima nastavitvenih parametrov!",
"",// TODO
"",// TODO
"",// TODO
+ "Ce plugin n'a pas de paramètres!",
"",// TODO
- "Ce plugin n'a pas de paramètres !",
- "",// TODO
- "Tällä laajennoksella ei ole asetuksia!",
+ "Tällä laajennuksella ei ole asetuksia!",
"",// TODO
"Este plugin no admite configuración",
"Afto to plugin den exi parametrous",
- "",// TODO
+ "Den här modulen har inga parametrar",
"",// TODO
"",// TODO
"Aquest plugin no admet configuració!",
diff --git a/menu.c b/menu.c
index f4c58b3..9fb3750 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.245 2003/05/16 12:40:12 kls Exp $
+ * $Id: menu.c 1.249 2003/05/25 14:06:17 kls Exp $
*/
#include "menu.h"
@@ -834,6 +834,7 @@ private:
cTimer *timer;
cTimer data;
int channel;
+ bool deleteIfCancelled;
cMenuEditDateItem *firstday;
void SetFirstDayItem(void);
public:
@@ -847,6 +848,7 @@ cMenuEditTimer::cMenuEditTimer(int Index, bool New)
{
firstday = NULL;
timer = Timers.Get(Index);
+ deleteIfCancelled = New;
if (timer) {
data = *timer;
if (New)
@@ -867,6 +869,12 @@ 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);
+ }
Timers.DecBeingEdited();
}
@@ -907,6 +915,7 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key)
Timers.Save();
isyslog("timer %d modified (%s)", timer->Index() + 1, timer->active ? "active" : "inactive");
}
+ deleteIfCancelled = false;
}
return osBack;
case kRed:
@@ -1044,18 +1053,22 @@ eOSState cMenuTimers::Delete(void)
// Check if this timer is active:
cTimer *ti = CurrentTimer();
if (ti) {
- if (!ti->Recording()) {
- if (Interface->Confirm(tr("Delete timer?"))) {
- int Index = ti->Index();
- Timers.Del(ti);
- cOsdMenu::Del(Current());
- Timers.Save();
- Display();
- isyslog("timer %d deleted", Index + 1);
+ if (Interface->Confirm(tr("Delete timer?"))) {
+ if (ti->Recording()) {
+ if (Interface->Confirm(tr("Timer still recording - really delete?"))) {
+ ti->Skip();
+ cRecordControls::Process(time(NULL));
+ }
+ else
+ return osContinue;
}
+ int Index = ti->Index();
+ Timers.Del(ti);
+ cOsdMenu::Del(Current());
+ Timers.Save();
+ Display();
+ isyslog("timer %d deleted", Index + 1);
}
- else
- Interface->Error(tr("Timer is recording!"));
}
return osContinue;
}
@@ -1081,6 +1094,8 @@ eOSState cMenuTimers::Summary(void)
eOSState cMenuTimers::ProcessKey(eKeys Key)
{
+ cTimer *ti = HasSubMenu() ? CurrentTimer() : NULL;
+ int TimerNumber = ti ? ti->Index() : -1;
eOSState state = cOsdMenu::ProcessKey(Key);
if (state == osUnknown) {
@@ -1097,6 +1112,11 @@ 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());
+ Display();
+ }
return state;
}
@@ -1263,7 +1283,7 @@ eOSState cMenuWhatsOn::Record(void)
delete timer;
timer = t;
}
- return AddSubMenu(new cMenuEditTimer(timer->Index(), true));
+ return AddSubMenu(new cMenuEditTimer(timer->Index(), !t));
}
return osContinue;
}
@@ -1397,7 +1417,7 @@ eOSState cMenuSchedule::Record(void)
delete timer;
timer = t;
}
- return AddSubMenu(new cMenuEditTimer(timer->Index(), true));
+ return AddSubMenu(new cMenuEditTimer(timer->Index(), !t));
}
return osContinue;
}
@@ -2938,6 +2958,23 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause)
}
cRecording Recording(timer, Title, Subtitle, Summary);
fileName = strdup(Recording.FileName());
+
+ // crude attempt to avoid duplicate recordings:
+ if (cRecordControls::GetRecordControl(fileName)) {
+ isyslog("already recording: '%s'", fileName);
+ if (Timer) {
+ timer->SetPending(false);
+ timer->SetRecording(false);
+ timer->OnOff();
+ }
+ else {
+ Timers.Del(timer);
+ Timers.Save();
+ }
+ timer = NULL;
+ return;
+ }
+
cRecordingUserCommand::InvokeCommand(RUC_BEFORERECORDING, fileName);
const cChannel *ch = timer->Channel();
recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2());
@@ -3240,7 +3277,7 @@ void cReplayControl::ClearLastReplayed(const char *FileName)
}
}
-void cReplayControl::Show(int Seconds)
+void cReplayControl::ShowTimed(int Seconds)
{
if (modeOnly)
Hide();
@@ -3250,6 +3287,11 @@ void cReplayControl::Show(int Seconds)
}
}
+void cReplayControl::Show(void)
+{
+ ShowTimed();
+}
+
void cReplayControl::Hide(void)
{
if (visible) {
@@ -3447,7 +3489,7 @@ void cReplayControl::MarkToggle(void)
marks.Del(m);
else {
marks.Add(Current);
- Show(2);
+ ShowTimed(2);
}
marks.Save();
}
diff --git a/menu.h b/menu.h
index a404505..5dd4080 100644
--- a/menu.h
+++ b/menu.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.h 1.55 2003/05/11 13:43:58 kls Exp $
+ * $Id: menu.h 1.56 2003/05/24 16:35:52 kls Exp $
*/
#ifndef __MENU_H
@@ -50,7 +50,7 @@ class cDisplayVolume : public cOsdObject {
private:
int timeout;
static cDisplayVolume *displayVolume;
- void Show(void);
+ virtual void Show(void);
cDisplayVolume(void);
public:
virtual ~cDisplayVolume();
@@ -154,7 +154,7 @@ private:
void TimeSearchDisplay(void);
void TimeSearchProcess(eKeys Key);
void TimeSearch(void);
- void Show(int Seconds = 0);
+ void ShowTimed(int Seconds = 0);
static char *fileName;
static char *title;
void DisplayAtBottom(const char *s = NULL);
@@ -169,6 +169,7 @@ public:
cReplayControl(void);
virtual ~cReplayControl();
virtual eOSState ProcessKey(eKeys Key);
+ virtual void Show(void);
virtual void Hide(void);
bool Visible(void) { return visible; }
static void SetRecording(const char *FileName, const char *Title);
diff --git a/recording.c b/recording.c
index 9105157..7e68a79 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.78 2003/05/18 15:17:45 kls Exp $
+ * $Id: recording.c 1.79 2003/05/24 11:22:34 kls Exp $
*/
#include "recording.h"
@@ -169,6 +169,11 @@ int cResumeFile::Read(void)
{
int resume = -1;
if (fileName) {
+ struct stat st;
+ if (stat(fileName, &st) == 0) {
+ if ((st.st_mode & S_IWUSR) == 0) // no write access, assume no resume
+ return -1;
+ }
int f = open(fileName, O_RDONLY);
if (f >= 0) {
if (safe_read(f, &resume, sizeof(resume)) != sizeof(resume)) {
diff --git a/vdr.c b/vdr.c
index 7962c0a..8bb907c 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.155 2003/05/16 12:11:45 kls Exp $
+ * $Id: vdr.c 1.159 2003/05/24 15:17:38 kls Exp $
*/
#include <getopt.h>
@@ -323,6 +323,7 @@ int main(int argc, char *argv[])
stdin = freopen(Terminal, "r", stdin);
stdout = freopen(Terminal, "w", stdout);
stderr = freopen(Terminal, "w", stderr);
+ HasStdin = true;
}
isyslog("VDR version %s started", VDRVERSION);
@@ -429,8 +430,6 @@ int main(int argc, char *argv[])
else
cDevice::PrimaryDevice()->SetVolume(Setup.CurrentVolume, true);
- cEITScanner EITScanner;
-
cSIProcessor::Read();
// Signal handlers:
@@ -454,6 +453,7 @@ int main(int argc, char *argv[])
cOsdObject *Menu = NULL;
cOsdObject *Temp = NULL;
int LastChannel = -1;
+ int LastTimerChannel = -1;
int PreviousChannel = cDevice::CurrentChannel();
time_t LastActivity = 0;
int MaxLatencyTime = 0;
@@ -469,11 +469,15 @@ int main(int argc, char *argv[])
// Attach launched player control:
cControl::Attach();
// Make sure we have a visible programme in case device usage has changed:
- if (cDevice::PrimaryDevice()->HasDecoder() && !cDevice::PrimaryDevice()->HasProgramme()) {
+ if (!EITScanner.Active() && cDevice::PrimaryDevice()->HasDecoder() && !cDevice::PrimaryDevice()->HasProgramme()) {
static time_t lastTime = 0;
if (time(NULL) - lastTime > MINCHANNELWAIT) {
- if (!Channels.SwitchTo(cDevice::CurrentChannel()))
+ if (!Channels.SwitchTo(cDevice::CurrentChannel()) // try to switch to the original channel...
+ && !(LastTimerChannel > 0 && Channels.SwitchTo(LastTimerChannel)) // ...or the one used by the last timer...
+ && !cDevice::SwitchChannel(1) // ...or the next higher available one...
+ && !cDevice::SwitchChannel(-1)) // ...or the next lower available one
lastTime = time(NULL); // don't do this too often
+ LastTimerChannel = -1;
}
}
// Restart the Watchdog timer:
@@ -500,6 +504,8 @@ int main(int argc, char *argv[])
if (Timer) {
if (!cRecordControls::Start(Timer))
Timer->SetPending(true);
+ else
+ LastTimerChannel = Timer->Channel()->Number();
}
}
// CAM control:
@@ -563,7 +569,7 @@ int main(int argc, char *argv[])
}
else
cDevice::PrimaryDevice()->SetVolume(NORMALKEY(key) == kVolDn ? -VOLUMEDELTA : VOLUMEDELTA);
- if (!Interface->IsOpen())
+ if (!Menu && !Interface->IsOpen())
Menu = Temp = cDisplayVolume::Create();
cDisplayVolume::Process(key);
key = kNone; // nobody else needs to see these keys