mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 1.7.12
- Changed the EVCONTENTMASK_* macros to enums and changed "mask" to "group". - Updated the Estonian OSD texts (thanks to Arthur Konovalov). - The "Edit timer" menu can now set the folder for the recording from a list of folders stored in "folders.conf". - Updated the Italian OSD texts (thanks to Diego Pierotto). - If svdrphosts.conf contains only the address of the local host, the SVDRP port is opened only for the local host (thanks to Manuel Reimer). - Renamed 'runvdr' to 'runvdr.template' and no longer copying it to the BINDIR in 'make install' (thanks to Martin Dauskardt). - Added plain text error messages to log entries from cOsd::SetAreas() (suggested by Rolf Ahrenberg). - cPalette::ClosestColor() now treats fully transparent colors as "equal"; improved cDvbSpuBitmap::getMinBpp() (thanks to Matthieu Castet and Johann Friedrichs). - The new setup option "Miscellaneous/Channels wrap" controls whether the current channel wraps around the beginning or end of the channel list when zapping (thanks to Matti Lehtimäki). - Fixed determining the frame duration on channels where the PTS deltas jitter by +/-1 around 1800. - The PCR pid in generated PMTs is now set to the channel's PCR pid again. - Fixed determining the frame duration on channels where the PTS deltas jitter by +/-1 around 3600. - The PCR pid is now recorded for channels where this is different from the video PID. To facilitate this, the interfaces of cTransfer, cTransferControl, cRecorder and cReceiver have been modified, so that the PIDs are no longer given in separate parameters, but rather the whole channel is handed down for processing. The old constructor of cReceiver is still available, but it is recommended to plugin authors that they switch to the new interface as soon as possible. When replaying such a recording, the PCR packets are sent to PlayTsVideo() - The files "commands.conf" and "reccmd.conf" can now contain nested lists of commands. See vdr.5 for information about the new file format.
This commit is contained in:
parent
939081e274
commit
09a17d56e2
10
CONTRIBUTORS
10
CONTRIBUTORS
@ -1090,6 +1090,7 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
|
|||||||
in some syslog calls
|
in some syslog calls
|
||||||
for a patch that was used to implement handling the "component descriptor" ("genre")
|
for a patch that was used to implement handling the "component descriptor" ("genre")
|
||||||
for a patch that was used to implement handling the "parental rating descriptor"
|
for a patch that was used to implement handling the "parental rating descriptor"
|
||||||
|
suggesting to add plain text error messages to log entries from cOsd::SetAreas()
|
||||||
|
|
||||||
Ralf Klueber <ralf.klueber@vodafone.com>
|
Ralf Klueber <ralf.klueber@vodafone.com>
|
||||||
for reporting a bug in cutting a recording if there is only a single editing mark
|
for reporting a bug in cutting a recording if there is only a single editing mark
|
||||||
@ -1562,6 +1563,8 @@ Martin Dauskardt <md001@gmx.de>
|
|||||||
recorded
|
recorded
|
||||||
for suggesting to add a table of the used trick speed values to the description of
|
for suggesting to add a table of the used trick speed values to the description of
|
||||||
cDevice::TrickSpeed()
|
cDevice::TrickSpeed()
|
||||||
|
for renaming 'runvdr' to 'runvdr.template' and no longer copying it to the BINDIR
|
||||||
|
in 'make install'
|
||||||
|
|
||||||
Maynard Cedric <maynard.cedric@wanadoo.fr>
|
Maynard Cedric <maynard.cedric@wanadoo.fr>
|
||||||
for reporting a problem in handling the color button texts in cMenuEditStrItem
|
for reporting a problem in handling the color button texts in cMenuEditStrItem
|
||||||
@ -2494,6 +2497,7 @@ Johann Friedrichs <johann.friedrichs@web.de>
|
|||||||
for removing the workaround for short channel names of "Kabel Deutschland"
|
for removing the workaround for short channel names of "Kabel Deutschland"
|
||||||
for some fixes to dvbspu.[hc]
|
for some fixes to dvbspu.[hc]
|
||||||
for fixing a busy loop when moving editing marks
|
for fixing a busy loop when moving editing marks
|
||||||
|
for making cPalette::ClosestColor() treat fully transparent colors as "equal"
|
||||||
|
|
||||||
Timo Helkio <timolavi@mbnet.fi>
|
Timo Helkio <timolavi@mbnet.fi>
|
||||||
for reporting a hangup when replaying a TS recording with subtitles activated
|
for reporting a hangup when replaying a TS recording with subtitles activated
|
||||||
@ -2526,6 +2530,8 @@ Valdemaras Pipiras <valdemaras@ambernet.lt>
|
|||||||
|
|
||||||
Manuel Reimer <Manuel.Reimer@gmx.de>
|
Manuel Reimer <Manuel.Reimer@gmx.de>
|
||||||
for fixing saving terminal settings when running in background
|
for fixing saving terminal settings when running in background
|
||||||
|
for making the SVDRP port open only for the local host if svdrphosts.conf
|
||||||
|
contains only the address of the local host
|
||||||
|
|
||||||
Rene van den Braken <rene@vandenbraken.name>
|
Rene van den Braken <rene@vandenbraken.name>
|
||||||
for reporting a bug in writing the PCR pid into the PMT in
|
for reporting a bug in writing the PCR pid into the PMT in
|
||||||
@ -2539,7 +2545,11 @@ Andreas Schaefers <andreas_schaefers@gmx.de>
|
|||||||
|
|
||||||
Matthieu Castet <castet.matthieu@free.fr>
|
Matthieu Castet <castet.matthieu@free.fr>
|
||||||
for improving SPU handling on devices with limited OSD capabilities
|
for improving SPU handling on devices with limited OSD capabilities
|
||||||
|
for making cPalette::ClosestColor() treat fully transparent colors as "equal"
|
||||||
|
|
||||||
Francesco Saverio Schiavarelli <fschiava@libero.it>
|
Francesco Saverio Schiavarelli <fschiava@libero.it>
|
||||||
for reporting a problem with channels that have some encrypted components that
|
for reporting a problem with channels that have some encrypted components that
|
||||||
VDR doesn't use
|
VDR doesn't use
|
||||||
|
|
||||||
|
Matti Lehtimäki <matti.lehtimaki@gmail.com>
|
||||||
|
for implementing the setup option "Miscellaneous/Channels wrap"
|
||||||
|
33
HISTORY
33
HISTORY
@ -6275,3 +6275,36 @@ Video Disk Recorder Revision History
|
|||||||
the others on the same adapter.
|
the others on the same adapter.
|
||||||
- Fixed plugin arguments corruption with glibc 2.11 on x86_64 (thanks to
|
- Fixed plugin arguments corruption with glibc 2.11 on x86_64 (thanks to
|
||||||
Anssi Hannula).
|
Anssi Hannula).
|
||||||
|
|
||||||
|
2010-01-31: Version 1.7.12
|
||||||
|
|
||||||
|
- Changed the EVCONTENTMASK_* macros to enums and changed "mask" to "group".
|
||||||
|
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
|
||||||
|
- The "Edit timer" menu can now set the folder for the recording from a list of
|
||||||
|
folders stored in "folders.conf".
|
||||||
|
- Updated the Italian OSD texts (thanks to Diego Pierotto).
|
||||||
|
- If svdrphosts.conf contains only the address of the local host, the SVDRP port
|
||||||
|
is opened only for the local host (thanks to Manuel Reimer).
|
||||||
|
- Renamed 'runvdr' to 'runvdr.template' and no longer copying it to the BINDIR
|
||||||
|
in 'make install' (thanks to Martin Dauskardt).
|
||||||
|
- Added plain text error messages to log entries from cOsd::SetAreas() (suggested
|
||||||
|
by Rolf Ahrenberg).
|
||||||
|
- cPalette::ClosestColor() now treats fully transparent colors as "equal"; improved
|
||||||
|
cDvbSpuBitmap::getMinBpp() (thanks to Matthieu Castet and Johann Friedrichs).
|
||||||
|
- The new setup option "Miscellaneous/Channels wrap" controls whether the current
|
||||||
|
channel wraps around the beginning or end of the channel list when zapping (thanks
|
||||||
|
to Matti Lehtimäki).
|
||||||
|
- Fixed determining the frame duration on channels where the PTS deltas jitter by
|
||||||
|
+/-1 around 1800.
|
||||||
|
- The PCR pid in generated PMTs is now set to the channel's PCR pid again.
|
||||||
|
- Fixed determining the frame duration on channels where the PTS deltas jitter by
|
||||||
|
+/-1 around 3600.
|
||||||
|
- The PCR pid is now recorded for channels where this is different from the video
|
||||||
|
PID. To facilitate this, the interfaces of cTransfer, cTransferControl, cRecorder
|
||||||
|
and cReceiver have been modified, so that the PIDs are no longer given in separate
|
||||||
|
parameters, but rather the whole channel is handed down for processing. The old
|
||||||
|
constructor of cReceiver is still available, but it is recommended to plugin authors
|
||||||
|
that they switch to the new interface as soon as possible.
|
||||||
|
When replaying such a recording, the PCR packets are sent to PlayTsVideo()
|
||||||
|
- The files "commands.conf" and "reccmd.conf" can now contain nested lists of
|
||||||
|
commands. See vdr.5 for information about the new file format.
|
||||||
|
11
INSTALL
11
INSTALL
@ -121,8 +121,12 @@ Users who want to set the default character set to something different can
|
|||||||
do this by setting the environment variable VDR_CHARSET_OVERRIDE to something
|
do this by setting the environment variable VDR_CHARSET_OVERRIDE to something
|
||||||
like ISO-8859-9.
|
like ISO-8859-9.
|
||||||
|
|
||||||
Automatic restart in case of hangups:
|
Start script with automatic restart in case of hangups:
|
||||||
-------------------------------------
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
The VDR source directory contains a 'runvdr.template'. Just copy it as 'runvdr'
|
||||||
|
into your /usr/bin or /usr/local/bin directory and adjust it to your particular
|
||||||
|
requirements. (See the comments inside the script for more information.)
|
||||||
|
|
||||||
If you run VDR using the 'runvdr' shell script it will use the built-in
|
If you run VDR using the 'runvdr' shell script it will use the built-in
|
||||||
watchdog timer to restart the program in case something happens that
|
watchdog timer to restart the program in case something happens that
|
||||||
@ -131,9 +135,6 @@ call to the VDR program, be sure to NOT use the '-d' option! Otherwise
|
|||||||
VDR will go into 'daemon' mode and the initial program call will return
|
VDR will go into 'daemon' mode and the initial program call will return
|
||||||
immediately! 'runvdr' needs to be started as user 'root'. Use the '-u'
|
immediately! 'runvdr' needs to be started as user 'root'. Use the '-u'
|
||||||
option to run the actual 'vdr' program under a different user id.
|
option to run the actual 'vdr' program under a different user id.
|
||||||
Note that the 'runvdr' script needs to be adjusted to your particular
|
|
||||||
requirements before you can actually use it. See the comments inside
|
|
||||||
the script for more information.
|
|
||||||
|
|
||||||
Setting the system time:
|
Setting the system time:
|
||||||
------------------------
|
------------------------
|
||||||
|
22
MANUAL
22
MANUAL
@ -474,6 +474,23 @@ Version 1.6
|
|||||||
A timer can also be programmed by pressing the "Red" key on the "Schedule",
|
A timer can also be programmed by pressing the "Red" key on the "Schedule",
|
||||||
"Now", "Next" or "Event" menus.
|
"Now", "Next" or "Event" menus.
|
||||||
|
|
||||||
|
The "Red" key in the "Edit timer" menu opens a list of folders, which can be
|
||||||
|
used to define the file name in which the recording will be stored.
|
||||||
|
|
||||||
|
* Managing folders
|
||||||
|
|
||||||
|
The "Select folder" menu, which can be accessed by pressing the "Red" key in
|
||||||
|
the "Edit timer" menu, offers a list of folders that can be used for storing
|
||||||
|
a recording. In this menu, the "Green" key allows you to define a new folder
|
||||||
|
within the current one; if the "Sub folder" option is set to "yes", this will
|
||||||
|
be a folder that contains other folders (indicated by "..." following the
|
||||||
|
folder name in the list). The "Yellow" key deletes the current folder (note
|
||||||
|
that this will merely delete the folder definition stored in 'folders.conf'
|
||||||
|
and has no effect on existing timers or recordings). The "Blue" key can be
|
||||||
|
used to edit an existing folder definition. The "Red" key selects the current
|
||||||
|
folder, or enters a sub folder. Once a folder has been selected, the entire
|
||||||
|
path of the timer's file name will be replaced with the selected folder.
|
||||||
|
|
||||||
* Parameters in the "Setup" menu
|
* Parameters in the "Setup" menu
|
||||||
|
|
||||||
Select "Setup" from the "VDR" menu to enter the setup menu. From there you can
|
Select "Setup" from the "VDR" menu to enter the setup menu. From there you can
|
||||||
@ -860,6 +877,11 @@ Version 1.6
|
|||||||
VDR was stopped will be used. The valid range is from
|
VDR was stopped will be used. The valid range is from
|
||||||
0 (silent) to 255 (loudest).
|
0 (silent) to 255 (loudest).
|
||||||
|
|
||||||
|
Channels wrap = no During zapping with the "Up" and "Down" keys (or the
|
||||||
|
"Channel+" and "Channel-" keys) the current channel will
|
||||||
|
wrap around the beginning or end of the channel list if
|
||||||
|
this parameter is set to 'yes'.
|
||||||
|
|
||||||
Emergency exit = yes If, for some reason, a recording fails because the video
|
Emergency exit = yes If, for some reason, a recording fails because the video
|
||||||
data stream is broken, or the CAM doesn't decrypt etc.,
|
data stream is broken, or the CAM doesn't decrypt etc.,
|
||||||
VDR automatically exits in order to allow the surrounding
|
VDR automatically exits in order to allow the surrounding
|
||||||
|
4
Makefile
4
Makefile
@ -4,7 +4,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: Makefile 2.5 2009/12/29 11:20:50 kls Exp $
|
# $Id: Makefile 2.6 2010/01/17 12:32:18 kls Exp $
|
||||||
|
|
||||||
.DELETE_ON_ERROR:
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
@ -164,7 +164,7 @@ install: install-bin install-conf install-doc install-plugins install-i18n
|
|||||||
|
|
||||||
install-bin: vdr
|
install-bin: vdr
|
||||||
@mkdir -p $(DESTDIR)$(BINDIR)
|
@mkdir -p $(DESTDIR)$(BINDIR)
|
||||||
@cp --remove-destination vdr runvdr svdrpsend.pl $(DESTDIR)$(BINDIR)
|
@cp --remove-destination vdr svdrpsend.pl $(DESTDIR)$(BINDIR)
|
||||||
|
|
||||||
# Configuration files:
|
# Configuration files:
|
||||||
|
|
||||||
|
@ -10,3 +10,8 @@ VDR Plugin 'dvbsddevice' Revision History
|
|||||||
- Calling the MakePrimaryDevice() function of the base class to allow
|
- Calling the MakePrimaryDevice() function of the base class to allow
|
||||||
the cDevice to stop displaying subtitles.
|
the cDevice to stop displaying subtitles.
|
||||||
- Added support for DVB cards with multiple fontends.
|
- Added support for DVB cards with multiple fontends.
|
||||||
|
|
||||||
|
2010-01-30: Version 0.0.3
|
||||||
|
|
||||||
|
- The PCR pid is now recorded for channels where this is different from the
|
||||||
|
video PID.
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* See the README file for copyright information and how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbsddevice.c 1.2 2010/01/01 15:01:01 kls Exp $
|
* $Id: dvbsddevice.c 1.3 2010/01/30 10:05:42 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <vdr/plugin.h>
|
#include <vdr/plugin.h>
|
||||||
#include "dvbsdffdevice.h"
|
#include "dvbsdffdevice.h"
|
||||||
|
|
||||||
static const char *VERSION = "0.0.2";
|
static const char *VERSION = "0.0.3";
|
||||||
static const char *DESCRIPTION = "SD Full Featured DVB device";
|
static const char *DESCRIPTION = "SD Full Featured DVB device";
|
||||||
|
|
||||||
class cPluginDvbsddevice : public cPlugin {
|
class cPluginDvbsddevice : public cPlugin {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* See the README file for copyright information and how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbsdffdevice.c 2.25 2010/01/04 12:56:56 kls Exp $
|
* $Id: dvbsdffdevice.c 2.26 2010/01/30 10:05:23 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbsdffdevice.h"
|
#include "dvbsdffdevice.h"
|
||||||
@ -434,7 +434,7 @@ bool cDvbSdFfDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
|
|||||||
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
|
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
|
||||||
}
|
}
|
||||||
else if (StartTransferMode)
|
else if (StartTransferMode)
|
||||||
cControl::Launch(new cTransferControl(this, Channel->GetChannelID(), vpid, Channel->Apids(), Channel->Dpids(), Channel->Spids()));
|
cControl::Launch(new cTransferControl(this, Channel));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
236
config.c
236
config.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.c 2.6 2009/12/05 15:30:30 kls Exp $
|
* $Id: config.c 2.10 2010/01/31 12:36:36 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -22,71 +22,6 @@
|
|||||||
|
|
||||||
#define ChkDoublePlausibility(Variable, Default) { if (Variable < 0.00001) Variable = Default; }
|
#define ChkDoublePlausibility(Variable, Default) { if (Variable < 0.00001) Variable = Default; }
|
||||||
|
|
||||||
// --- cCommand --------------------------------------------------------------
|
|
||||||
|
|
||||||
char *cCommand::result = NULL;
|
|
||||||
|
|
||||||
cCommand::cCommand(void)
|
|
||||||
{
|
|
||||||
title = command = NULL;
|
|
||||||
confirm = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
cCommand::~cCommand()
|
|
||||||
{
|
|
||||||
free(title);
|
|
||||||
free(command);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cCommand::Parse(const char *s)
|
|
||||||
{
|
|
||||||
const char *p = strchr(s, ':');
|
|
||||||
if (p) {
|
|
||||||
int l = p - s;
|
|
||||||
if (l > 0) {
|
|
||||||
title = MALLOC(char, l + 1);
|
|
||||||
stripspace(strn0cpy(title, s, l + 1));
|
|
||||||
if (!isempty(title)) {
|
|
||||||
int l = strlen(title);
|
|
||||||
if (l > 1 && title[l - 1] == '?') {
|
|
||||||
confirm = true;
|
|
||||||
title[l - 1] = 0;
|
|
||||||
}
|
|
||||||
command = stripspace(strdup(skipspace(p + 1)));
|
|
||||||
return !isempty(command);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *cCommand::Execute(const char *Parameters)
|
|
||||||
{
|
|
||||||
free(result);
|
|
||||||
result = NULL;
|
|
||||||
cString cmdbuf;
|
|
||||||
if (Parameters)
|
|
||||||
cmdbuf = cString::sprintf("%s %s", command, Parameters);
|
|
||||||
const char *cmd = *cmdbuf ? *cmdbuf : command;
|
|
||||||
dsyslog("executing command '%s'", cmd);
|
|
||||||
cPipe p;
|
|
||||||
if (p.Open(cmd, "r")) {
|
|
||||||
int l = 0;
|
|
||||||
int c;
|
|
||||||
while ((c = fgetc(p)) != EOF) {
|
|
||||||
if (l % 20 == 0)
|
|
||||||
result = (char *)realloc(result, l + 21);
|
|
||||||
result[l++] = char(c);
|
|
||||||
}
|
|
||||||
if (result)
|
|
||||||
result[l] = 0;
|
|
||||||
p.Close();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
esyslog("ERROR: can't open pipe for command '%s'", cmd);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cSVDRPhost ------------------------------------------------------------
|
// --- cSVDRPhost ------------------------------------------------------------
|
||||||
|
|
||||||
cSVDRPhost::cSVDRPhost(void)
|
cSVDRPhost::cSVDRPhost(void)
|
||||||
@ -118,20 +53,180 @@ bool cSVDRPhost::Parse(const char *s)
|
|||||||
return result != 0 && (mask != 0 || addr.s_addr == 0);
|
return result != 0 && (mask != 0 || addr.s_addr == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cSVDRPhost::IsLocalhost(void)
|
||||||
|
{
|
||||||
|
return addr.s_addr == htonl(INADDR_LOOPBACK);
|
||||||
|
}
|
||||||
|
|
||||||
bool cSVDRPhost::Accepts(in_addr_t Address)
|
bool cSVDRPhost::Accepts(in_addr_t Address)
|
||||||
{
|
{
|
||||||
return (Address & mask) == (addr.s_addr & mask);
|
return (Address & mask) == (addr.s_addr & mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- cCommands -------------------------------------------------------------
|
// --- cNestedItem -----------------------------------------------------------
|
||||||
|
|
||||||
cCommands Commands;
|
cNestedItem::cNestedItem(const char *Text, bool WithSubItems)
|
||||||
cCommands RecordingCommands;
|
{
|
||||||
|
text = strdup(Text ? Text : "");
|
||||||
|
subItems = WithSubItems ? new cList<cNestedItem> : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cNestedItem::~cNestedItem()
|
||||||
|
{
|
||||||
|
delete subItems;
|
||||||
|
free(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cNestedItem::Compare(const cListObject &ListObject) const
|
||||||
|
{
|
||||||
|
return strcasecmp(text, ((cNestedItem *)&ListObject)->text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cNestedItem::AddSubItem(cNestedItem *Item)
|
||||||
|
{
|
||||||
|
if (!subItems)
|
||||||
|
subItems = new cList<cNestedItem>;
|
||||||
|
if (Item)
|
||||||
|
subItems->Add(Item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cNestedItem::SetText(const char *Text)
|
||||||
|
{
|
||||||
|
free(text);
|
||||||
|
text = strdup(Text ? Text : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
void cNestedItem::SetSubItems(bool On)
|
||||||
|
{
|
||||||
|
if (On && !subItems)
|
||||||
|
subItems = new cList<cNestedItem>;
|
||||||
|
else if (!On && subItems) {
|
||||||
|
delete subItems;
|
||||||
|
subItems = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cNestedItemList -------------------------------------------------------
|
||||||
|
|
||||||
|
cNestedItemList::cNestedItemList(void)
|
||||||
|
{
|
||||||
|
fileName = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cNestedItemList::~cNestedItemList()
|
||||||
|
{
|
||||||
|
free(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cNestedItemList::Parse(FILE *f, cList<cNestedItem> *List, int &Line)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
cReadLine ReadLine;
|
||||||
|
while ((s = ReadLine.Read(f)) != NULL) {
|
||||||
|
Line++;
|
||||||
|
char *p = strchr(s, '#');
|
||||||
|
if (p)
|
||||||
|
*p = 0;
|
||||||
|
s = skipspace(stripspace(s));
|
||||||
|
if (!isempty(s)) {
|
||||||
|
p = s + strlen(s) - 1;
|
||||||
|
if (*p == '{') {
|
||||||
|
*p = 0;
|
||||||
|
stripspace(s);
|
||||||
|
cNestedItem *Item = new cNestedItem(s, true);
|
||||||
|
List->Add(Item);
|
||||||
|
if (!Parse(f, Item->SubItems(), Line))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (*s == '}')
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
List->Add(new cNestedItem(s));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cNestedItemList::Write(FILE *f, cList<cNestedItem> *List, int Indent)
|
||||||
|
{
|
||||||
|
for (cNestedItem *Item = List->First(); Item; Item = List->Next(Item)) {
|
||||||
|
if (Item->SubItems()) {
|
||||||
|
fprintf(f, "%*s%s {\n", Indent, "", Item->Text());
|
||||||
|
Write(f, Item->SubItems(), Indent + 2);
|
||||||
|
fprintf(f, "%*s}\n", Indent + 2, "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(f, "%*s%s\n", Indent, "", Item->Text());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cNestedItemList::Clear(void)
|
||||||
|
{
|
||||||
|
free(fileName);
|
||||||
|
fileName = NULL;
|
||||||
|
cList<cNestedItem>::Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cNestedItemList::Load(const char *FileName)
|
||||||
|
{
|
||||||
|
cList<cNestedItem>::Clear();
|
||||||
|
if (FileName) {
|
||||||
|
free(fileName);
|
||||||
|
fileName = strdup(FileName);
|
||||||
|
}
|
||||||
|
bool result = false;
|
||||||
|
if (fileName && access(fileName, F_OK) == 0) {
|
||||||
|
isyslog("loading %s", fileName);
|
||||||
|
FILE *f = fopen(fileName, "r");
|
||||||
|
if (f) {
|
||||||
|
int Line = 0;
|
||||||
|
result = Parse(f, this, Line);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG_ERROR_STR(fileName);
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cNestedItemList::Save(void)
|
||||||
|
{
|
||||||
|
bool result = true;
|
||||||
|
cSafeFile f(fileName);
|
||||||
|
if (f.Open()) {
|
||||||
|
result = Write(f, this);
|
||||||
|
if (!f.Close())
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
result = false;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Folders and Commands --------------------------------------------------
|
||||||
|
|
||||||
|
cNestedItemList Folders;
|
||||||
|
cNestedItemList Commands;
|
||||||
|
cNestedItemList RecordingCommands;
|
||||||
|
|
||||||
// --- cSVDRPhosts -----------------------------------------------------------
|
// --- cSVDRPhosts -----------------------------------------------------------
|
||||||
|
|
||||||
cSVDRPhosts SVDRPhosts;
|
cSVDRPhosts SVDRPhosts;
|
||||||
|
|
||||||
|
bool cSVDRPhosts::LocalhostOnly(void)
|
||||||
|
{
|
||||||
|
cSVDRPhost *h = First();
|
||||||
|
while (h) {
|
||||||
|
if (!h->IsLocalhost())
|
||||||
|
return false;
|
||||||
|
h = (cSVDRPhost *)h->Next();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool cSVDRPhosts::Acceptable(in_addr_t Address)
|
bool cSVDRPhosts::Acceptable(in_addr_t Address)
|
||||||
{
|
{
|
||||||
cSVDRPhost *h = First();
|
cSVDRPhost *h = First();
|
||||||
@ -299,6 +394,7 @@ cSetup::cSetup(void)
|
|||||||
CurrentDolby = 0;
|
CurrentDolby = 0;
|
||||||
InitialChannel = 0;
|
InitialChannel = 0;
|
||||||
InitialVolume = -1;
|
InitialVolume = -1;
|
||||||
|
ChannelsWrap = 0;
|
||||||
EmergencyExit = 1;
|
EmergencyExit = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -486,6 +582,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
|
|||||||
else if (!strcasecmp(Name, "CurrentDolby")) CurrentDolby = atoi(Value);
|
else if (!strcasecmp(Name, "CurrentDolby")) CurrentDolby = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "InitialChannel")) InitialChannel = atoi(Value);
|
else if (!strcasecmp(Name, "InitialChannel")) InitialChannel = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "InitialVolume")) InitialVolume = atoi(Value);
|
else if (!strcasecmp(Name, "InitialVolume")) InitialVolume = atoi(Value);
|
||||||
|
else if (!strcasecmp(Name, "ChannelsWrap")) ChannelsWrap = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "EmergencyExit")) EmergencyExit = atoi(Value);
|
else if (!strcasecmp(Name, "EmergencyExit")) EmergencyExit = atoi(Value);
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
@ -578,6 +675,7 @@ bool cSetup::Save(void)
|
|||||||
Store("CurrentDolby", CurrentDolby);
|
Store("CurrentDolby", CurrentDolby);
|
||||||
Store("InitialChannel", InitialChannel);
|
Store("InitialChannel", InitialChannel);
|
||||||
Store("InitialVolume", InitialVolume);
|
Store("InitialVolume", InitialVolume);
|
||||||
|
Store("ChannelsWrap", ChannelsWrap);
|
||||||
Store("EmergencyExit", EmergencyExit);
|
Store("EmergencyExit", EmergencyExit);
|
||||||
|
|
||||||
Sort();
|
Sort();
|
||||||
|
61
config.h
61
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.h 2.16 2009/11/22 19:55:04 kls Exp $
|
* $Id: config.h 2.21 2010/01/31 11:14:02 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
@ -22,13 +22,13 @@
|
|||||||
|
|
||||||
// VDR's own version number:
|
// VDR's own version number:
|
||||||
|
|
||||||
#define VDRVERSION "1.7.11"
|
#define VDRVERSION "1.7.12"
|
||||||
#define VDRVERSNUM 10711 // Version * 10000 + Major * 100 + Minor
|
#define VDRVERSNUM 10712 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// The plugin API's version number:
|
// The plugin API's version number:
|
||||||
|
|
||||||
#define APIVERSION "1.7.11"
|
#define APIVERSION "1.7.12"
|
||||||
#define APIVERSNUM 10711 // Version * 10000 + Major * 100 + Minor
|
#define APIVERSNUM 10712 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// When loading plugins, VDR searches them by their APIVERSION, which
|
// When loading plugins, VDR searches them by their APIVERSION, which
|
||||||
// may be smaller than VDRVERSION in case there have been no changes to
|
// may be smaller than VDRVERSION in case there have been no changes to
|
||||||
@ -48,21 +48,6 @@
|
|||||||
#define MaxSkinName 16
|
#define MaxSkinName 16
|
||||||
#define MaxThemeName 16
|
#define MaxThemeName 16
|
||||||
|
|
||||||
class cCommand : public cListObject {
|
|
||||||
private:
|
|
||||||
char *title;
|
|
||||||
char *command;
|
|
||||||
bool confirm;
|
|
||||||
static char *result;
|
|
||||||
public:
|
|
||||||
cCommand(void);
|
|
||||||
virtual ~cCommand();
|
|
||||||
bool Parse(const char *s);
|
|
||||||
const char *Title(void) { return title; }
|
|
||||||
bool Confirm(void) { return confirm; }
|
|
||||||
const char *Execute(const char *Parameters = NULL);
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef uint32_t in_addr_t; //XXX from /usr/include/netinet/in.h (apparently this is not defined on systems with glibc < 2.2)
|
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 {
|
class cSVDRPhost : public cListObject {
|
||||||
@ -72,6 +57,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
cSVDRPhost(void);
|
cSVDRPhost(void);
|
||||||
bool Parse(const char *s);
|
bool Parse(const char *s);
|
||||||
|
bool IsLocalhost(void);
|
||||||
bool Accepts(in_addr_t Address);
|
bool Accepts(in_addr_t Address);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -158,15 +144,43 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class cCommands : public cConfig<cCommand> {};
|
class cNestedItem : public cListObject {
|
||||||
|
private:
|
||||||
|
char *text;
|
||||||
|
cList<cNestedItem> *subItems;
|
||||||
|
public:
|
||||||
|
cNestedItem(const char *Text, bool WithSubItems = false);
|
||||||
|
virtual ~cNestedItem();
|
||||||
|
virtual int Compare(const cListObject &ListObject) const;
|
||||||
|
const char *Text(void) const { return text; }
|
||||||
|
cList<cNestedItem> *SubItems(void) { return subItems; }
|
||||||
|
void AddSubItem(cNestedItem *Item);
|
||||||
|
void SetText(const char *Text);
|
||||||
|
void SetSubItems(bool On);
|
||||||
|
};
|
||||||
|
|
||||||
|
class cNestedItemList : public cList<cNestedItem> {
|
||||||
|
private:
|
||||||
|
char *fileName;
|
||||||
|
bool Parse(FILE *f, cList<cNestedItem> *List, int &Line);
|
||||||
|
bool Write(FILE *f, cList<cNestedItem> *List, int Indent = 0);
|
||||||
|
public:
|
||||||
|
cNestedItemList(void);
|
||||||
|
virtual ~cNestedItemList();
|
||||||
|
void Clear(void);
|
||||||
|
bool Load(const char *FileName);
|
||||||
|
bool Save(void);
|
||||||
|
};
|
||||||
|
|
||||||
class cSVDRPhosts : public cConfig<cSVDRPhost> {
|
class cSVDRPhosts : public cConfig<cSVDRPhost> {
|
||||||
public:
|
public:
|
||||||
|
bool LocalhostOnly(void);
|
||||||
bool Acceptable(in_addr_t Address);
|
bool Acceptable(in_addr_t Address);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern cCommands Commands;
|
extern cNestedItemList Folders;
|
||||||
extern cCommands RecordingCommands;
|
extern cNestedItemList Commands;
|
||||||
|
extern cNestedItemList RecordingCommands;
|
||||||
extern cSVDRPhosts SVDRPhosts;
|
extern cSVDRPhosts SVDRPhosts;
|
||||||
|
|
||||||
class cSetupLine : public cListObject {
|
class cSetupLine : public cListObject {
|
||||||
@ -272,6 +286,7 @@ public:
|
|||||||
int CurrentDolby;
|
int CurrentDolby;
|
||||||
int InitialChannel;
|
int InitialChannel;
|
||||||
int InitialVolume;
|
int InitialVolume;
|
||||||
|
int ChannelsWrap;
|
||||||
int EmergencyExit;
|
int EmergencyExit;
|
||||||
int __EndData__;
|
int __EndData__;
|
||||||
cSetup(void);
|
cSetup(void);
|
||||||
|
15
device.c
15
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 2.31 2010/01/01 15:40:35 kls Exp $
|
* $Id: device.c 2.32 2010/01/30 11:06:51 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -30,8 +30,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
cLiveSubtitle::cLiveSubtitle(int SPid)
|
cLiveSubtitle::cLiveSubtitle(int SPid)
|
||||||
:cReceiver(tChannelID(), -1, SPid)
|
|
||||||
{
|
{
|
||||||
|
AddPid(SPid);
|
||||||
}
|
}
|
||||||
|
|
||||||
cLiveSubtitle::~cLiveSubtitle()
|
cLiveSubtitle::~cLiveSubtitle()
|
||||||
@ -676,7 +676,7 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
|
|||||||
if (Device && CanReplay()) {
|
if (Device && CanReplay()) {
|
||||||
cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel
|
cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel
|
||||||
if (Device->SetChannel(Channel, false) == scrOk) // calling SetChannel() directly, not SwitchChannel()!
|
if (Device->SetChannel(Channel, false) == scrOk) // calling SetChannel() directly, not SwitchChannel()!
|
||||||
cControl::Launch(new cTransferControl(Device, Channel->GetChannelID(), Channel->Vpid(), Channel->Apids(), Channel->Dpids(), Channel->Spids()));
|
cControl::Launch(new cTransferControl(Device, Channel));
|
||||||
else
|
else
|
||||||
Result = scrNoTransfer;
|
Result = scrNoTransfer;
|
||||||
}
|
}
|
||||||
@ -1364,10 +1364,10 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
|
|||||||
esyslog("ERROR: skipped %d bytes to sync on start of TS packet", Skipped);
|
esyslog("ERROR: skipped %d bytes to sync on start of TS packet", Skipped);
|
||||||
return Played + Skipped;
|
return Played + Skipped;
|
||||||
}
|
}
|
||||||
|
int Pid = TsPid(Data);
|
||||||
if (TsHasPayload(Data)) { // silently ignore TS packets w/o payload
|
if (TsHasPayload(Data)) { // silently ignore TS packets w/o payload
|
||||||
int PayloadOffset = TsPayloadOffset(Data);
|
int PayloadOffset = TsPayloadOffset(Data);
|
||||||
if (PayloadOffset < TS_SIZE) {
|
if (PayloadOffset < TS_SIZE) {
|
||||||
int Pid = TsPid(Data);
|
|
||||||
if (Pid == 0)
|
if (Pid == 0)
|
||||||
patPmtParser.ParsePat(Data, TS_SIZE);
|
patPmtParser.ParsePat(Data, TS_SIZE);
|
||||||
else if (Pid == patPmtParser.PmtPid())
|
else if (Pid == patPmtParser.PmtPid())
|
||||||
@ -1396,6 +1396,13 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Pid == patPmtParser.Ppid()) {
|
||||||
|
int w = PlayTsVideo(Data, TS_SIZE);
|
||||||
|
if (w < 0)
|
||||||
|
return Played ? Played : w;
|
||||||
|
if (w == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
Played += TS_SIZE;
|
Played += TS_SIZE;
|
||||||
Length -= TS_SIZE;
|
Length -= TS_SIZE;
|
||||||
Data += TS_SIZE;
|
Data += TS_SIZE;
|
||||||
|
4
dvbspu.c
4
dvbspu.c
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
* parts of this file are derived from the OMS program.
|
* parts of this file are derived from the OMS program.
|
||||||
*
|
*
|
||||||
* $Id: dvbspu.c 2.7 2009/12/26 15:51:15 kls Exp $
|
* $Id: dvbspu.c 2.8 2010/01/17 13:43:27 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbspu.h"
|
#include "dvbspu.h"
|
||||||
@ -347,7 +347,7 @@ int cDvbSpuBitmap::getMinBpp(const aDvbSpuPalDescr paldescr)
|
|||||||
col++;
|
col++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return col > 2 ? 4 : 2;
|
return col > 2 ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cDvbSpuDecoder::CalcAreaBpp(cBitmap *fgbmp, cBitmap *bgbmp)
|
int cDvbSpuDecoder::CalcAreaBpp(cBitmap *fgbmp, cBitmap *bgbmp)
|
||||||
|
6
eit.c
6
eit.c
@ -8,7 +8,7 @@
|
|||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
|
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
|
||||||
*
|
*
|
||||||
* $Id: eit.c 2.10 2010/01/03 15:35:21 kls Exp $
|
* $Id: eit.c 2.11 2010/01/08 15:17:09 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "eit.h"
|
#include "eit.h"
|
||||||
@ -157,9 +157,9 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
|
|||||||
SI::ContentDescriptor *cd = (SI::ContentDescriptor *)d;
|
SI::ContentDescriptor *cd = (SI::ContentDescriptor *)d;
|
||||||
SI::ContentDescriptor::Nibble Nibble;
|
SI::ContentDescriptor::Nibble Nibble;
|
||||||
int NumContents = 0;
|
int NumContents = 0;
|
||||||
uchar Contents[MAXEVCONTENTS] = { 0 };
|
uchar Contents[MaxEventContents] = { 0 };
|
||||||
for (SI::Loop::Iterator it3; cd->nibbleLoop.getNext(Nibble, it3); ) {
|
for (SI::Loop::Iterator it3; cd->nibbleLoop.getNext(Nibble, it3); ) {
|
||||||
if (NumContents < MAXEVCONTENTS) {
|
if (NumContents < MaxEventContents) {
|
||||||
Contents[NumContents] = ((Nibble.getContentNibbleLevel1() & 0xF) << 4) | (Nibble.getContentNibbleLevel2() & 0xF);
|
Contents[NumContents] = ((Nibble.getContentNibbleLevel1() & 0xF) << 4) | (Nibble.getContentNibbleLevel2() & 0xF);
|
||||||
NumContents++;
|
NumContents++;
|
||||||
}
|
}
|
||||||
|
28
epg.c
28
epg.c
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
*
|
*
|
||||||
* $Id: epg.c 2.4 2010/01/03 14:10:20 kls Exp $
|
* $Id: epg.c 2.5 2010/01/08 15:20:28 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "epg.h"
|
#include "epg.h"
|
||||||
@ -190,7 +190,7 @@ void cEvent::SetComponents(cComponents *Components)
|
|||||||
|
|
||||||
void cEvent::SetContents(uchar *Contents)
|
void cEvent::SetContents(uchar *Contents)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAXEVCONTENTS; i++)
|
for (int i = 0; i < MaxEventContents; i++)
|
||||||
contents[i] = Contents[i];
|
contents[i] = Contents[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ bool cEvent::IsRunning(bool OrAboutToStart) const
|
|||||||
const char *cEvent::ContentToString(uchar Content)
|
const char *cEvent::ContentToString(uchar Content)
|
||||||
{
|
{
|
||||||
switch (Content & 0xF0) {
|
switch (Content & 0xF0) {
|
||||||
case EVCONTENTMASK_MOVIEDRAMA:
|
case ecgMovieDrama:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Movie/Drama");
|
case 0x00: return tr("Content$Movie/Drama");
|
||||||
@ -264,7 +264,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x08: return tr("Content$Adult Movie/Drama");
|
case 0x08: return tr("Content$Adult Movie/Drama");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_NEWSCURRENTAFFAIRS:
|
case ecgNewsCurrentAffairs:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$News/Current Affairs");
|
case 0x00: return tr("Content$News/Current Affairs");
|
||||||
@ -274,7 +274,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x04: return tr("Content$Discussion/Inverview/Debate");
|
case 0x04: return tr("Content$Discussion/Inverview/Debate");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_SHOW:
|
case ecgShow:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Show/Game Show");
|
case 0x00: return tr("Content$Show/Game Show");
|
||||||
@ -283,7 +283,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x03: return tr("Content$Talk Show");
|
case 0x03: return tr("Content$Talk Show");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_SPORTS:
|
case ecgSports:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Sports");
|
case 0x00: return tr("Content$Sports");
|
||||||
@ -300,7 +300,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x0B: return tr("Content$Martial Sports");
|
case 0x0B: return tr("Content$Martial Sports");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_CHILDRENYOUTH:
|
case ecgChildrenYouth:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Children's/Youth Programme");
|
case 0x00: return tr("Content$Children's/Youth Programme");
|
||||||
@ -311,7 +311,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x05: return tr("Content$Cartoons/Puppets");
|
case 0x05: return tr("Content$Cartoons/Puppets");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_MUSICBALLETDANCE:
|
case ecgMusicBalletDance:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Music/Ballet/Dance");
|
case 0x00: return tr("Content$Music/Ballet/Dance");
|
||||||
@ -323,7 +323,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x06: return tr("Content$Ballet");
|
case 0x06: return tr("Content$Ballet");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_ARTSCULTURE:
|
case ecgArtsCulture:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Arts/Culture");
|
case 0x00: return tr("Content$Arts/Culture");
|
||||||
@ -340,7 +340,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x0B: return tr("Content$Fashion");
|
case 0x0B: return tr("Content$Fashion");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_SOCIALPOLITICALECONOMICS:
|
case ecgSocialPoliticalEconomics:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Social/Political/Economics");
|
case 0x00: return tr("Content$Social/Political/Economics");
|
||||||
@ -349,7 +349,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x03: return tr("Content$Remarkable People");
|
case 0x03: return tr("Content$Remarkable People");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_EDUCATIONALSCIENCE:
|
case ecgEducationalScience:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Education/Science/Factual");
|
case 0x00: return tr("Content$Education/Science/Factual");
|
||||||
@ -362,7 +362,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x07: return tr("Content$Languages");
|
case 0x07: return tr("Content$Languages");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_LEISUREHOBBIES:
|
case ecgLeisureHobbies:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
default:
|
default:
|
||||||
case 0x00: return tr("Content$Leisure/Hobbies");
|
case 0x00: return tr("Content$Leisure/Hobbies");
|
||||||
@ -375,7 +375,7 @@ const char *cEvent::ContentToString(uchar Content)
|
|||||||
case 0x07: return tr("Content$Gardening");
|
case 0x07: return tr("Content$Gardening");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVCONTENTMASK_SPECIAL:
|
case ecgSpecial:
|
||||||
switch (Content & 0x0F) {
|
switch (Content & 0x0F) {
|
||||||
case 0x00: return tr("Content$Original Language");
|
case 0x00: return tr("Content$Original Language");
|
||||||
case 0x01: return tr("Content$Black & White");
|
case 0x01: return tr("Content$Black & White");
|
||||||
@ -468,7 +468,7 @@ bool cEvent::Parse(char *s)
|
|||||||
break;
|
break;
|
||||||
case 'G': {
|
case 'G': {
|
||||||
memset(contents, 0, sizeof(contents));
|
memset(contents, 0, sizeof(contents));
|
||||||
for (int i = 0; i < MAXEVCONTENTS; i++) {
|
for (int i = 0; i < MaxEventContents; i++) {
|
||||||
char *tail = NULL;
|
char *tail = NULL;
|
||||||
int c = strtol(t, &tail, 16);
|
int c = strtol(t, &tail, 16);
|
||||||
if (0x00 < c && c <= 0xFF) {
|
if (0x00 < c && c <= 0xFF) {
|
||||||
|
35
epg.h
35
epg.h
@ -7,7 +7,7 @@
|
|||||||
* Original version (as used in VDR before 1.3.0) written by
|
* Original version (as used in VDR before 1.3.0) written by
|
||||||
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
|
||||||
*
|
*
|
||||||
* $Id: epg.h 2.3 2010/01/03 14:39:14 kls Exp $
|
* $Id: epg.h 2.4 2010/01/08 15:20:34 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __EPG_H
|
#ifndef __EPG_H
|
||||||
@ -19,19 +19,22 @@
|
|||||||
|
|
||||||
#define MAXEPGBUGFIXLEVEL 3
|
#define MAXEPGBUGFIXLEVEL 3
|
||||||
|
|
||||||
#define MAXEVCONTENTS 4
|
enum { MaxEventContents = 4 };
|
||||||
#define EVCONTENTMASK_MOVIEDRAMA 0x10
|
|
||||||
#define EVCONTENTMASK_NEWSCURRENTAFFAIRS 0x20
|
enum eEventContentGroup {
|
||||||
#define EVCONTENTMASK_SHOW 0x30
|
ecgMovieDrama = 0x10,
|
||||||
#define EVCONTENTMASK_SPORTS 0x40
|
ecgNewsCurrentAffairs = 0x20,
|
||||||
#define EVCONTENTMASK_CHILDRENYOUTH 0x50
|
ecgShow = 0x30,
|
||||||
#define EVCONTENTMASK_MUSICBALLETDANCE 0x60
|
ecgSports = 0x40,
|
||||||
#define EVCONTENTMASK_ARTSCULTURE 0x70
|
ecgChildrenYouth = 0x50,
|
||||||
#define EVCONTENTMASK_SOCIALPOLITICALECONOMICS 0x80
|
ecgMusicBalletDance = 0x60,
|
||||||
#define EVCONTENTMASK_EDUCATIONALSCIENCE 0x90
|
ecgArtsCulture = 0x70,
|
||||||
#define EVCONTENTMASK_LEISUREHOBBIES 0xA0
|
ecgSocialPoliticalEconomics = 0x80,
|
||||||
#define EVCONTENTMASK_SPECIAL 0xB0
|
ecgEducationalScience = 0x90,
|
||||||
#define EVCONTENTMASK_USERDEFINED 0xF0
|
ecgLeisureHobbies = 0xA0,
|
||||||
|
ecgSpecial = 0xB0,
|
||||||
|
ecgUserDefined = 0xF0
|
||||||
|
};
|
||||||
|
|
||||||
enum eDumpMode { dmAll, dmPresent, dmFollowing, dmAtTime };
|
enum eDumpMode { dmAll, dmPresent, dmFollowing, dmAtTime };
|
||||||
|
|
||||||
@ -78,7 +81,7 @@ private:
|
|||||||
char *shortText; // Short description of this event (typically the episode name in case of a series)
|
char *shortText; // Short description of this event (typically the episode name in case of a series)
|
||||||
char *description; // Description of this event
|
char *description; // Description of this event
|
||||||
cComponents *components; // The stream components of this event
|
cComponents *components; // The stream components of this event
|
||||||
uchar contents[MAXEVCONTENTS]; // Contents of this event
|
uchar contents[MaxEventContents]; // Contents of this event
|
||||||
time_t startTime; // Start time of this event
|
time_t startTime; // Start time of this event
|
||||||
int duration; // Duration of this event in seconds
|
int duration; // Duration of this event in seconds
|
||||||
time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
|
time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL)
|
||||||
@ -97,7 +100,7 @@ public:
|
|||||||
const char *ShortText(void) const { return shortText; }
|
const char *ShortText(void) const { return shortText; }
|
||||||
const char *Description(void) const { return description; }
|
const char *Description(void) const { return description; }
|
||||||
const cComponents *Components(void) const { return components; }
|
const cComponents *Components(void) const { return components; }
|
||||||
uchar Contents(int i = 0) const { return (0 <= i && i < MAXEVCONTENTS) ? contents[i] : 0; }
|
uchar Contents(int i = 0) const { return (0 <= i && i < MaxEventContents) ? contents[i] : 0; }
|
||||||
int ParentalRating(void) const { return parentalRating; }
|
int ParentalRating(void) const { return parentalRating; }
|
||||||
time_t StartTime(void) const { return startTime; }
|
time_t StartTime(void) const { return startTime; }
|
||||||
time_t EndTime(void) const { return startTime + duration; }
|
time_t EndTime(void) const { return startTime + duration; }
|
||||||
|
398
menu.c
398
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 2.10 2009/12/06 11:29:05 kls Exp $
|
* $Id: menu.c 2.14 2010/01/31 12:43:24 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -623,11 +623,276 @@ eOSState cMenuText::ProcessKey(eKeys Key)
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- cMenuFolderItem -------------------------------------------------------
|
||||||
|
|
||||||
|
class cMenuFolderItem : public cOsdItem {
|
||||||
|
private:
|
||||||
|
cNestedItem *folder;
|
||||||
|
public:
|
||||||
|
cMenuFolderItem(cNestedItem *Folder);
|
||||||
|
cNestedItem *Folder(void) { return folder; }
|
||||||
|
};
|
||||||
|
|
||||||
|
cMenuFolderItem::cMenuFolderItem(cNestedItem *Folder)
|
||||||
|
:cOsdItem(Folder->Text())
|
||||||
|
{
|
||||||
|
folder = Folder;
|
||||||
|
if (folder->SubItems())
|
||||||
|
SetText(cString::sprintf("%s...", folder->Text()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cMenuEditFolder -------------------------------------------------------
|
||||||
|
|
||||||
|
class cMenuEditFolder : public cOsdMenu {
|
||||||
|
private:
|
||||||
|
cList<cNestedItem> *list;
|
||||||
|
cNestedItem *folder;
|
||||||
|
char name[PATH_MAX];
|
||||||
|
int subFolder;
|
||||||
|
eOSState Confirm(void);
|
||||||
|
public:
|
||||||
|
cMenuEditFolder(const char *Dir, cList<cNestedItem> *List, cNestedItem *Folder = NULL);
|
||||||
|
cString GetFolder(void);
|
||||||
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
|
};
|
||||||
|
|
||||||
|
cMenuEditFolder::cMenuEditFolder(const char *Dir, cList<cNestedItem> *List, cNestedItem *Folder)
|
||||||
|
:cOsdMenu(Folder ? tr("Edit folder") : tr("New folder"), 12)
|
||||||
|
{
|
||||||
|
list = List;
|
||||||
|
folder = Folder;
|
||||||
|
if (folder) {
|
||||||
|
strn0cpy(name, folder->Text(), sizeof(name));
|
||||||
|
subFolder = folder->SubItems() != NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*name = 0;
|
||||||
|
subFolder = 0;
|
||||||
|
cRemote::Put(kRight, true); // go right into string editing mode
|
||||||
|
}
|
||||||
|
if (!isempty(Dir)) {
|
||||||
|
cOsdItem *DirItem = new cOsdItem(Dir);
|
||||||
|
DirItem->SetSelectable(false);
|
||||||
|
Add(DirItem);
|
||||||
|
}
|
||||||
|
Add(new cMenuEditStrItem( tr("Name"), name, sizeof(name)));
|
||||||
|
Add(new cMenuEditBoolItem(tr("Sub folder"), &subFolder));
|
||||||
|
}
|
||||||
|
|
||||||
|
cString cMenuEditFolder::GetFolder(void)
|
||||||
|
{
|
||||||
|
return folder ? folder->Text() : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditFolder::Confirm(void)
|
||||||
|
{
|
||||||
|
if (!folder || strcmp(folder->Text(), name) != 0) {
|
||||||
|
// each name may occur only once in a folder list
|
||||||
|
for (cNestedItem *Folder = list->First(); Folder; Folder = list->Next(Folder)) {
|
||||||
|
if (strcmp(Folder->Text(), name) == 0) {
|
||||||
|
Skins.Message(mtError, tr("Folder name already exists!"));
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
char *p = strpbrk(name, "\\{}#~"); // FOLDERDELIMCHAR
|
||||||
|
if (p) {
|
||||||
|
Skins.Message(mtError, cString::sprintf(tr("Folder name must not contain '%c'!"), *p));
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (folder) {
|
||||||
|
folder->SetText(name);
|
||||||
|
folder->SetSubItems(subFolder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
list->Add(folder = new cNestedItem(name, subFolder));
|
||||||
|
return osEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditFolder::ProcessKey(eKeys Key)
|
||||||
|
{
|
||||||
|
eOSState state = cOsdMenu::ProcessKey(Key);
|
||||||
|
|
||||||
|
if (state == osUnknown) {
|
||||||
|
switch (Key) {
|
||||||
|
case kOk: return Confirm();
|
||||||
|
case kRed:
|
||||||
|
case kGreen:
|
||||||
|
case kYellow:
|
||||||
|
case kBlue: return osContinue;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- cMenuFolder -----------------------------------------------------------
|
||||||
|
|
||||||
|
cMenuFolder::cMenuFolder(const char *Title, cNestedItemList *NestedItemList, const char *Path)
|
||||||
|
:cOsdMenu(Title)
|
||||||
|
{
|
||||||
|
list = nestedItemList = NestedItemList;
|
||||||
|
firstFolder = NULL;
|
||||||
|
editing = false;
|
||||||
|
Set();
|
||||||
|
SetHelpKeys();
|
||||||
|
DescendPath(Path);
|
||||||
|
}
|
||||||
|
|
||||||
|
cMenuFolder::cMenuFolder(const char *Title, cList<cNestedItem> *List, cNestedItemList *NestedItemList, const char *Dir, const char *Path)
|
||||||
|
:cOsdMenu(Title)
|
||||||
|
{
|
||||||
|
list = List;
|
||||||
|
nestedItemList = NestedItemList;
|
||||||
|
dir = Dir;
|
||||||
|
firstFolder = NULL;
|
||||||
|
editing = false;
|
||||||
|
Set();
|
||||||
|
SetHelpKeys();
|
||||||
|
DescendPath(Path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuFolder::SetHelpKeys(void)
|
||||||
|
{
|
||||||
|
SetHelp(firstFolder ? tr("Button$Select") : NULL, tr("Button$New"), firstFolder ? tr("Button$Delete") : NULL, firstFolder ? tr("Button$Edit") : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuFolder::Set(const char *CurrentFolder)
|
||||||
|
{
|
||||||
|
firstFolder = NULL;
|
||||||
|
Clear();
|
||||||
|
if (!isempty(dir)) {
|
||||||
|
cOsdItem *DirItem = new cOsdItem(dir);
|
||||||
|
DirItem->SetSelectable(false);
|
||||||
|
Add(DirItem);
|
||||||
|
}
|
||||||
|
list->Sort();
|
||||||
|
for (cNestedItem *Folder = list->First(); Folder; Folder = list->Next(Folder)) {
|
||||||
|
cOsdItem *FolderItem = new cMenuFolderItem(Folder);
|
||||||
|
Add(FolderItem, CurrentFolder ? strcmp(Folder->Text(), CurrentFolder) == 0 : false);
|
||||||
|
if (!firstFolder)
|
||||||
|
firstFolder = FolderItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMenuFolder::DescendPath(const char *Path)
|
||||||
|
{
|
||||||
|
if (Path) {
|
||||||
|
const char *p = strchr(Path, FOLDERDELIMCHAR);
|
||||||
|
if (p) {
|
||||||
|
for (cMenuFolderItem *Folder = (cMenuFolderItem *)firstFolder; Folder; Folder = (cMenuFolderItem *)Next(Folder)) {
|
||||||
|
if (strncmp(Folder->Folder()->Text(), Path, p - Path) == 0) {
|
||||||
|
SetCurrent(Folder);
|
||||||
|
if (Folder->Folder()->SubItems())
|
||||||
|
AddSubMenu(new cMenuFolder(Title(), Folder->Folder()->SubItems(), nestedItemList, !isempty(dir) ? *cString::sprintf("%s%c%s", *dir, FOLDERDELIMCHAR, Folder->Folder()->Text()) : Folder->Folder()->Text(), p + 1));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuFolder::Select(void)
|
||||||
|
{
|
||||||
|
if (firstFolder) {
|
||||||
|
cMenuFolderItem *Folder = (cMenuFolderItem *)Get(Current());
|
||||||
|
if (Folder) {
|
||||||
|
if (Folder->Folder()->SubItems())
|
||||||
|
return AddSubMenu(new cMenuFolder(Title(), Folder->Folder()->SubItems(), nestedItemList, !isempty(dir) ? *cString::sprintf("%s%c%s", *dir, FOLDERDELIMCHAR, Folder->Folder()->Text()) : Folder->Folder()->Text()));
|
||||||
|
else
|
||||||
|
return osEnd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuFolder::New(void)
|
||||||
|
{
|
||||||
|
editing = true;
|
||||||
|
return AddSubMenu(new cMenuEditFolder(dir, list));
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuFolder::Delete(void)
|
||||||
|
{
|
||||||
|
if (!HasSubMenu() && firstFolder) {
|
||||||
|
cMenuFolderItem *Folder = (cMenuFolderItem *)Get(Current());
|
||||||
|
if (Folder && Interface->Confirm(Folder->Folder()->SubItems() ? tr("Delete folder and all sub folders?") : tr("Delete folder?"))) {
|
||||||
|
list->Del(Folder->Folder());
|
||||||
|
Del(Folder->Index());
|
||||||
|
firstFolder = Get(isempty(dir) ? 0 : 1);
|
||||||
|
Display();
|
||||||
|
SetHelpKeys();
|
||||||
|
nestedItemList->Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuFolder::Edit(void)
|
||||||
|
{
|
||||||
|
if (!HasSubMenu() && firstFolder) {
|
||||||
|
cMenuFolderItem *Folder = (cMenuFolderItem *)Get(Current());
|
||||||
|
if (Folder) {
|
||||||
|
editing = true;
|
||||||
|
return AddSubMenu(new cMenuEditFolder(dir, list, Folder->Folder()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuFolder::SetFolder(void)
|
||||||
|
{
|
||||||
|
cMenuEditFolder *mef = (cMenuEditFolder *)SubMenu();
|
||||||
|
if (mef) {
|
||||||
|
Set(mef->GetFolder());
|
||||||
|
SetHelpKeys();
|
||||||
|
Display();
|
||||||
|
nestedItemList->Save();
|
||||||
|
}
|
||||||
|
return CloseSubMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
cString cMenuFolder::GetFolder(void)
|
||||||
|
{
|
||||||
|
if (firstFolder) {
|
||||||
|
cMenuFolderItem *Folder = (cMenuFolderItem *)Get(Current());
|
||||||
|
if (Folder) {
|
||||||
|
cMenuFolder *mf = (cMenuFolder *)SubMenu();
|
||||||
|
if (mf)
|
||||||
|
return cString::sprintf("%s%c%s", Folder->Folder()->Text(), FOLDERDELIMCHAR, *mf->GetFolder());
|
||||||
|
return Folder->Folder()->Text();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
eOSState cMenuFolder::ProcessKey(eKeys Key)
|
||||||
|
{
|
||||||
|
if (!HasSubMenu())
|
||||||
|
editing = false;
|
||||||
|
eOSState state = cOsdMenu::ProcessKey(Key);
|
||||||
|
|
||||||
|
if (state == osUnknown) {
|
||||||
|
switch (Key) {
|
||||||
|
case kOk:
|
||||||
|
case kRed: return Select();
|
||||||
|
case kGreen: return New();
|
||||||
|
case kYellow: return Delete();
|
||||||
|
case kBlue: return Edit();
|
||||||
|
default: state = osContinue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (state == osEnd && HasSubMenu() && editing)
|
||||||
|
state = SetFolder();
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
// --- cMenuEditTimer --------------------------------------------------------
|
// --- cMenuEditTimer --------------------------------------------------------
|
||||||
|
|
||||||
cMenuEditTimer::cMenuEditTimer(cTimer *Timer, bool New)
|
cMenuEditTimer::cMenuEditTimer(cTimer *Timer, bool New)
|
||||||
:cOsdMenu(tr("Edit timer"), 12)
|
:cOsdMenu(tr("Edit timer"), 12)
|
||||||
{
|
{
|
||||||
|
file = NULL;
|
||||||
firstday = NULL;
|
firstday = NULL;
|
||||||
timer = Timer;
|
timer = Timer;
|
||||||
addIfConfirmed = New;
|
addIfConfirmed = New;
|
||||||
@ -644,9 +909,10 @@ cMenuEditTimer::cMenuEditTimer(cTimer *Timer, bool New)
|
|||||||
Add(new cMenuEditBitItem( tr("VPS"), &data.flags, tfVps));
|
Add(new cMenuEditBitItem( tr("VPS"), &data.flags, tfVps));
|
||||||
Add(new cMenuEditIntItem( tr("Priority"), &data.priority, 0, MAXPRIORITY));
|
Add(new cMenuEditIntItem( tr("Priority"), &data.priority, 0, MAXPRIORITY));
|
||||||
Add(new cMenuEditIntItem( tr("Lifetime"), &data.lifetime, 0, MAXLIFETIME));
|
Add(new cMenuEditIntItem( tr("Lifetime"), &data.lifetime, 0, MAXLIFETIME));
|
||||||
Add(new cMenuEditStrItem( tr("File"), data.file, sizeof(data.file)));
|
Add(file = new cMenuEditStrItem( tr("File"), data.file, sizeof(data.file)));
|
||||||
SetFirstDayItem();
|
SetFirstDayItem();
|
||||||
}
|
}
|
||||||
|
SetHelpKeys();
|
||||||
Timers.IncBeingEdited();
|
Timers.IncBeingEdited();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,6 +923,11 @@ cMenuEditTimer::~cMenuEditTimer()
|
|||||||
Timers.DecBeingEdited();
|
Timers.DecBeingEdited();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cMenuEditTimer::SetHelpKeys(void)
|
||||||
|
{
|
||||||
|
SetHelp(tr("Button$Folder"));
|
||||||
|
}
|
||||||
|
|
||||||
void cMenuEditTimer::SetFirstDayItem(void)
|
void cMenuEditTimer::SetFirstDayItem(void)
|
||||||
{
|
{
|
||||||
if (!firstday && !data.IsSingleEvent()) {
|
if (!firstday && !data.IsSingleEvent()) {
|
||||||
@ -670,6 +941,26 @@ void cMenuEditTimer::SetFirstDayItem(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eOSState cMenuEditTimer::SetFolder(void)
|
||||||
|
{
|
||||||
|
cMenuFolder *mf = (cMenuFolder *)SubMenu();
|
||||||
|
if (mf) {
|
||||||
|
cString Folder = mf->GetFolder();
|
||||||
|
char *p = strrchr(data.file, FOLDERDELIMCHAR);
|
||||||
|
if (p)
|
||||||
|
p++;
|
||||||
|
else
|
||||||
|
p = data.file;
|
||||||
|
if (!isempty(*Folder))
|
||||||
|
strn0cpy(data.file, cString::sprintf("%s%c%s", *Folder, FOLDERDELIMCHAR, p), sizeof(data.file));
|
||||||
|
else if (p != data.file)
|
||||||
|
memmove(data.file, p, strlen(p) + 1);
|
||||||
|
SetCurrent(file);
|
||||||
|
Display();
|
||||||
|
}
|
||||||
|
return CloseSubMenu();
|
||||||
|
}
|
||||||
|
|
||||||
eOSState cMenuEditTimer::ProcessKey(eKeys Key)
|
eOSState cMenuEditTimer::ProcessKey(eKeys Key)
|
||||||
{
|
{
|
||||||
eOSState state = cOsdMenu::ProcessKey(Key);
|
eOSState state = cOsdMenu::ProcessKey(Key);
|
||||||
@ -699,13 +990,15 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return osBack;
|
return osBack;
|
||||||
case kRed:
|
case kRed: return AddSubMenu(new cMenuFolder(tr("Select folder"), &Folders, data.file));
|
||||||
case kGreen:
|
case kGreen:
|
||||||
case kYellow:
|
case kYellow:
|
||||||
case kBlue: return osContinue;
|
case kBlue: return osContinue;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (state == osEnd && HasSubMenu())
|
||||||
|
state = SetFolder();
|
||||||
if (Key != kNone)
|
if (Key != kNone)
|
||||||
SetFirstDayItem();
|
SetFirstDayItem();
|
||||||
return state;
|
return state;
|
||||||
@ -1490,46 +1783,102 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key)
|
|||||||
|
|
||||||
class cMenuCommands : public cOsdMenu {
|
class cMenuCommands : public cOsdMenu {
|
||||||
private:
|
private:
|
||||||
cCommands *commands;
|
cList<cNestedItem> *commands;
|
||||||
char *parameters;
|
cString parameters;
|
||||||
|
cString title;
|
||||||
|
cString command;
|
||||||
|
bool confirm;
|
||||||
|
char *result;
|
||||||
|
bool Parse(const char *s);
|
||||||
eOSState Execute(void);
|
eOSState Execute(void);
|
||||||
public:
|
public:
|
||||||
cMenuCommands(const char *Title, cCommands *Commands, const char *Parameters = NULL);
|
cMenuCommands(const char *Title, cList<cNestedItem> *Commands, const char *Parameters = NULL);
|
||||||
virtual ~cMenuCommands();
|
virtual ~cMenuCommands();
|
||||||
virtual eOSState ProcessKey(eKeys Key);
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
};
|
};
|
||||||
|
|
||||||
cMenuCommands::cMenuCommands(const char *Title, cCommands *Commands, const char *Parameters)
|
cMenuCommands::cMenuCommands(const char *Title, cList<cNestedItem> *Commands, const char *Parameters)
|
||||||
:cOsdMenu(Title)
|
:cOsdMenu(Title)
|
||||||
{
|
{
|
||||||
|
result = NULL;
|
||||||
SetHasHotkeys();
|
SetHasHotkeys();
|
||||||
commands = Commands;
|
commands = Commands;
|
||||||
parameters = Parameters ? strdup(Parameters) : NULL;
|
parameters = Parameters;
|
||||||
for (cCommand *command = commands->First(); command; command = commands->Next(command))
|
for (cNestedItem *Command = commands->First(); Command; Command = commands->Next(Command)) {
|
||||||
Add(new cOsdItem(hk(command->Title())));
|
const char *s = Command->Text();
|
||||||
|
if (Command->SubItems())
|
||||||
|
Add(new cOsdItem(hk(cString::sprintf("%s...", s))));
|
||||||
|
else if (Parse(s))
|
||||||
|
Add(new cOsdItem(hk(title)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cMenuCommands::~cMenuCommands()
|
cMenuCommands::~cMenuCommands()
|
||||||
{
|
{
|
||||||
free(parameters);
|
free(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cMenuCommands::Parse(const char *s)
|
||||||
|
{
|
||||||
|
const char *p = strchr(s, ':');
|
||||||
|
if (p) {
|
||||||
|
int l = p - s;
|
||||||
|
if (l > 0) {
|
||||||
|
char t[l + 1];
|
||||||
|
stripspace(strn0cpy(t, s, l + 1));
|
||||||
|
l = strlen(t);
|
||||||
|
if (l > 1 && t[l - 1] == '?') {
|
||||||
|
t[l - 1] = 0;
|
||||||
|
confirm = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
confirm = false;
|
||||||
|
title = t;
|
||||||
|
command = skipspace(p + 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
eOSState cMenuCommands::Execute(void)
|
eOSState cMenuCommands::Execute(void)
|
||||||
{
|
{
|
||||||
cCommand *command = commands->Get(Current());
|
cNestedItem *Command = commands->Get(Current());
|
||||||
if (command) {
|
if (Command) {
|
||||||
bool confirmed = true;
|
if (Command->SubItems())
|
||||||
if (command->Confirm())
|
return AddSubMenu(new cMenuCommands(Title(), Command->SubItems(), parameters));
|
||||||
confirmed = Interface->Confirm(cString::sprintf("%s?", command->Title()));
|
if (Parse(Command->Text())) {
|
||||||
if (confirmed) {
|
if (!confirm || Interface->Confirm(cString::sprintf("%s?", *title))) {
|
||||||
Skins.Message(mtStatus, cString::sprintf("%s...", command->Title()));
|
Skins.Message(mtStatus, cString::sprintf("%s...", *title));
|
||||||
const char *Result = command->Execute(parameters);
|
free(result);
|
||||||
|
result = NULL;
|
||||||
|
cString cmdbuf;
|
||||||
|
if (!isempty(parameters))
|
||||||
|
cmdbuf = cString::sprintf("%s %s", *command, *parameters);
|
||||||
|
const char *cmd = *cmdbuf ? *cmdbuf : *command;
|
||||||
|
dsyslog("executing command '%s'", cmd);
|
||||||
|
cPipe p;
|
||||||
|
if (p.Open(cmd, "r")) {
|
||||||
|
int l = 0;
|
||||||
|
int c;
|
||||||
|
while ((c = fgetc(p)) != EOF) {
|
||||||
|
if (l % 20 == 0)
|
||||||
|
result = (char *)realloc(result, l + 21);
|
||||||
|
result[l++] = char(c);
|
||||||
|
}
|
||||||
|
if (result)
|
||||||
|
result[l] = 0;
|
||||||
|
p.Close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog("ERROR: can't open pipe for command '%s'", cmd);
|
||||||
Skins.Message(mtStatus, NULL);
|
Skins.Message(mtStatus, NULL);
|
||||||
if (Result)
|
if (result)
|
||||||
return AddSubMenu(new cMenuText(command->Title(), Result, fontFix));
|
return AddSubMenu(new cMenuText(title, result, fontFix));
|
||||||
return osEnd;
|
return osEnd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1921,7 +2270,7 @@ void cMenuRecordings::Set(bool Refresh)
|
|||||||
Clear();
|
Clear();
|
||||||
Recordings.Sort();
|
Recordings.Sort();
|
||||||
for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
|
for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
|
||||||
if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == '~')) {
|
if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == FOLDERDELIMCHAR)) {
|
||||||
cMenuRecordingItem *Item = new cMenuRecordingItem(recording, level);
|
cMenuRecordingItem *Item = new cMenuRecordingItem(recording, level);
|
||||||
if (*Item->Text() && (!LastItem || strcmp(Item->Text(), LastItemText) != 0)) {
|
if (*Item->Text() && (!LastItem || strcmp(Item->Text(), LastItemText) != 0)) {
|
||||||
Add(Item);
|
Add(Item);
|
||||||
@ -2746,6 +3095,7 @@ cMenuSetupMisc::cMenuSetupMisc(void)
|
|||||||
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Channel entry timeout (ms)"), &data.ChannelEntryTimeout, 0));
|
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Channel entry timeout (ms)"), &data.ChannelEntryTimeout, 0));
|
||||||
Add(new cMenuEditChanItem(tr("Setup.Miscellaneous$Initial channel"), &data.InitialChannel, tr("Setup.Miscellaneous$as before")));
|
Add(new cMenuEditChanItem(tr("Setup.Miscellaneous$Initial channel"), &data.InitialChannel, tr("Setup.Miscellaneous$as before")));
|
||||||
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Initial volume"), &data.InitialVolume, -1, 255, tr("Setup.Miscellaneous$as before")));
|
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Initial volume"), &data.InitialVolume, -1, 255, tr("Setup.Miscellaneous$as before")));
|
||||||
|
Add(new cMenuEditBoolItem(tr("Setup.Miscellaneous$Channels wrap"), &data.ChannelsWrap));
|
||||||
Add(new cMenuEditBoolItem(tr("Setup.Miscellaneous$Emergency exit"), &data.EmergencyExit));
|
Add(new cMenuEditBoolItem(tr("Setup.Miscellaneous$Emergency exit"), &data.EmergencyExit));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3245,6 +3595,8 @@ cChannel *cDisplayChannel::NextAvailableChannel(cChannel *Channel, int Direction
|
|||||||
if (Direction) {
|
if (Direction) {
|
||||||
while (Channel) {
|
while (Channel) {
|
||||||
Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
|
Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
|
||||||
|
if (!Channel && Setup.ChannelsWrap)
|
||||||
|
Channel = Direction > 0 ? Channels.First() : Channels.Last();
|
||||||
if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, 0, true))
|
if (Channel && !Channel->GroupSep() && cDevice::GetDevice(Channel, 0, true))
|
||||||
return Channel;
|
return Channel;
|
||||||
}
|
}
|
||||||
@ -3759,7 +4111,7 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause)
|
|||||||
isyslog("record %s", fileName);
|
isyslog("record %s", fileName);
|
||||||
if (MakeDirs(fileName, true)) {
|
if (MakeDirs(fileName, true)) {
|
||||||
const cChannel *ch = timer->Channel();
|
const cChannel *ch = timer->Channel();
|
||||||
recorder = new cRecorder(fileName, ch->GetChannelID(), timer->Priority(), ch->Vpid(), ch->Apids(), ch->Dpids(), ch->Spids());
|
recorder = new cRecorder(fileName, ch, timer->Priority());
|
||||||
if (device->AttachReceiver(recorder)) {
|
if (device->AttachReceiver(recorder)) {
|
||||||
Recording.WriteInfo();
|
Recording.WriteInfo();
|
||||||
cStatus::MsgRecording(device, Recording.Name(), Recording.FileName(), true);
|
cStatus::MsgRecording(device, Recording.Name(), Recording.FileName(), true);
|
||||||
|
27
menu.h
27
menu.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.h 2.0 2008/02/10 16:01:53 kls Exp $
|
* $Id: menu.h 2.1 2010/01/17 11:21:42 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __MENU_H
|
#ifndef __MENU_H
|
||||||
@ -31,14 +31,39 @@ public:
|
|||||||
virtual eOSState ProcessKey(eKeys Key);
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class cMenuFolder : public cOsdMenu {
|
||||||
|
private:
|
||||||
|
cNestedItemList *nestedItemList;
|
||||||
|
cList<cNestedItem> *list;
|
||||||
|
cString dir;
|
||||||
|
cOsdItem *firstFolder;
|
||||||
|
bool editing;
|
||||||
|
void SetHelpKeys(void);
|
||||||
|
void Set(const char *CurrentFolder = NULL);
|
||||||
|
void DescendPath(const char *Path);
|
||||||
|
eOSState SetFolder(void);
|
||||||
|
eOSState Select(void);
|
||||||
|
eOSState New(void);
|
||||||
|
eOSState Delete(void);
|
||||||
|
eOSState Edit(void);
|
||||||
|
cMenuFolder(const char *Title, cList<cNestedItem> *List, cNestedItemList *NestedItemList, const char *Dir, const char *Path = NULL);
|
||||||
|
public:
|
||||||
|
cMenuFolder(const char *Title, cNestedItemList *NestedItemList, const char *Path = NULL);
|
||||||
|
cString GetFolder(void);
|
||||||
|
virtual eOSState ProcessKey(eKeys Key);
|
||||||
|
};
|
||||||
|
|
||||||
class cMenuEditTimer : public cOsdMenu {
|
class cMenuEditTimer : public cOsdMenu {
|
||||||
private:
|
private:
|
||||||
cTimer *timer;
|
cTimer *timer;
|
||||||
cTimer data;
|
cTimer data;
|
||||||
int channel;
|
int channel;
|
||||||
bool addIfConfirmed;
|
bool addIfConfirmed;
|
||||||
|
cMenuEditStrItem *file;
|
||||||
cMenuEditDateItem *firstday;
|
cMenuEditDateItem *firstday;
|
||||||
|
eOSState SetFolder(void);
|
||||||
void SetFirstDayItem(void);
|
void SetFirstDayItem(void);
|
||||||
|
void SetHelpKeys(void);
|
||||||
public:
|
public:
|
||||||
cMenuEditTimer(cTimer *Timer, bool New = false);
|
cMenuEditTimer(cTimer *Timer, bool New = false);
|
||||||
virtual ~cMenuEditTimer();
|
virtual ~cMenuEditTimer();
|
||||||
|
22
osd.c
22
osd.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osd.c 2.6 2009/12/06 11:33:47 kls Exp $
|
* $Id: osd.c 2.9 2010/01/22 15:58:39 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
@ -145,12 +145,14 @@ int cPalette::ClosestColor(tColor Color, int MaxDiff) const
|
|||||||
int R1 = (Color & 0x00FF0000) >> 16;
|
int R1 = (Color & 0x00FF0000) >> 16;
|
||||||
int G1 = (Color & 0x0000FF00) >> 8;
|
int G1 = (Color & 0x0000FF00) >> 8;
|
||||||
int B1 = (Color & 0x000000FF);
|
int B1 = (Color & 0x000000FF);
|
||||||
for (int i = 0; i < numColors; i++) {
|
for (int i = 0; i < numColors && d > 0; i++) {
|
||||||
int A2 = (color[i] & 0xFF000000) >> 24;
|
int A2 = (color[i] & 0xFF000000) >> 24;
|
||||||
int R2 = (color[i] & 0x00FF0000) >> 16;
|
int R2 = (color[i] & 0x00FF0000) >> 16;
|
||||||
int G2 = (color[i] & 0x0000FF00) >> 8;
|
int G2 = (color[i] & 0x0000FF00) >> 8;
|
||||||
int B2 = (color[i] & 0x000000FF);
|
int B2 = (color[i] & 0x000000FF);
|
||||||
int diff = (abs(A1 - A2) << 1) + (abs(R1 - R2) << 1) + (abs(G1 - G2) << 1) + (abs(B1 - B2) << 1);
|
int diff = 0;
|
||||||
|
if (A1 || A2) // fully transparent colors are considered equal
|
||||||
|
diff = (abs(A1 - A2) << 1) + (abs(R1 - R2) << 1) + (abs(G1 - G2) << 1) + (abs(B1 - B2) << 1);
|
||||||
if (diff < d) {
|
if (diff < d) {
|
||||||
d = diff;
|
d = diff;
|
||||||
n = i;
|
n = i;
|
||||||
@ -724,6 +726,18 @@ void cBitmap::ShrinkBpp(int NewBpp)
|
|||||||
|
|
||||||
// --- cOsd ------------------------------------------------------------------
|
// --- cOsd ------------------------------------------------------------------
|
||||||
|
|
||||||
|
static const char *OsdErrorTexts[] = {
|
||||||
|
"ok",
|
||||||
|
"too many areas",
|
||||||
|
"too many colors",
|
||||||
|
"bpp not supported",
|
||||||
|
"areas overlap",
|
||||||
|
"wrong alignment",
|
||||||
|
"out of memory",
|
||||||
|
"wrong area size",
|
||||||
|
"unknown",
|
||||||
|
};
|
||||||
|
|
||||||
int cOsd::osdLeft = 0;
|
int cOsd::osdLeft = 0;
|
||||||
int cOsd::osdTop = 0;
|
int cOsd::osdTop = 0;
|
||||||
int cOsd::osdWidth = 0;
|
int cOsd::osdWidth = 0;
|
||||||
@ -814,7 +828,7 @@ eOsdError cOsd::SetAreas(const tArea *Areas, int NumAreas)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
esyslog("ERROR: cOsd::SetAreas returned %d", Result);
|
esyslog("ERROR: cOsd::SetAreas returned %d (%s)", Result, Result < oeUnknown ? OsdErrorTexts[Result] : OsdErrorTexts[oeUnknown]);
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
osd.h
4
osd.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osd.h 2.4 2009/05/08 13:41:03 kls Exp $
|
* $Id: osd.h 2.5 2010/01/17 13:23:50 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __OSD_H
|
#ifndef __OSD_H
|
||||||
@ -36,7 +36,7 @@ enum {
|
|||||||
clrWhite = 0xFFFCFCFC,
|
clrWhite = 0xFFFCFCFC,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eOsdError { oeOk,
|
enum eOsdError { oeOk, // see also OsdErrorTexts in osd.c
|
||||||
oeTooManyAreas,
|
oeTooManyAreas,
|
||||||
oeTooManyColors,
|
oeTooManyColors,
|
||||||
oeBppNotSupported,
|
oeBppNotSupported,
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osdbase.c 2.1 2009/06/01 11:54:50 kls Exp $
|
* $Id: osdbase.c 2.2 2010/01/17 11:36:12 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "osdbase.h"
|
#include "osdbase.h"
|
||||||
@ -41,7 +41,7 @@ cOsdItem::~cOsdItem()
|
|||||||
void cOsdItem::SetText(const char *Text, bool Copy)
|
void cOsdItem::SetText(const char *Text, bool Copy)
|
||||||
{
|
{
|
||||||
free(text);
|
free(text);
|
||||||
text = Copy ? strdup(Text) : (char *)Text; // text assumes ownership!
|
text = Copy ? strdup(Text ? Text : "") : (char *)Text; // text assumes ownership!
|
||||||
}
|
}
|
||||||
|
|
||||||
void cOsdItem::SetSelectable(bool Selectable)
|
void cOsdItem::SetSelectable(bool Selectable)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osdbase.h 2.0 2007/11/03 14:50:52 kls Exp $
|
* $Id: osdbase.h 2.1 2010/01/16 14:25:31 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __OSDBASE_H
|
#ifndef __OSDBASE_H
|
||||||
@ -102,6 +102,7 @@ protected:
|
|||||||
void SetCols(int c0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0);
|
void SetCols(int c0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0);
|
||||||
void SetHasHotkeys(bool HasHotkeys = true);
|
void SetHasHotkeys(bool HasHotkeys = true);
|
||||||
virtual void Clear(void);
|
virtual void Clear(void);
|
||||||
|
const char *Title(void) { return title; }
|
||||||
bool SelectableItem(int idx);
|
bool SelectableItem(int idx);
|
||||||
void SetCurrent(cOsdItem *Item);
|
void SetCurrent(cOsdItem *Item);
|
||||||
void RefreshCurrent(void);
|
void RefreshCurrent(void);
|
||||||
@ -116,6 +117,7 @@ protected:
|
|||||||
eOSState AddSubMenu(cOsdMenu *SubMenu);
|
eOSState AddSubMenu(cOsdMenu *SubMenu);
|
||||||
eOSState CloseSubMenu();
|
eOSState CloseSubMenu();
|
||||||
bool HasSubMenu(void) { return subMenu; }
|
bool HasSubMenu(void) { return subMenu; }
|
||||||
|
cOsdMenu *SubMenu(void) { return subMenu; }
|
||||||
void SetStatus(const char *s);
|
void SetStatus(const char *s);
|
||||||
void SetTitle(const char *Title);
|
void SetTitle(const char *Title);
|
||||||
void SetHelp(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);
|
void SetHelp(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);
|
||||||
|
36
po/ca_ES.po
36
po/ca_ES.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
||||||
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
||||||
"Language-Team: Catalanian\n"
|
"Language-Team: Catalanian\n"
|
||||||
@ -586,6 +586,31 @@ msgstr "Canal en
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Esborrar el canal?"
|
msgstr "Esborrar el canal?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Editar temporitzador"
|
msgstr "Editar temporitzador"
|
||||||
|
|
||||||
@ -616,9 +641,15 @@ msgstr "Durada"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Arxiu"
|
msgstr "Arxiu"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Primer dia"
|
msgstr "Primer dia"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Temporitzadors"
|
msgstr "Temporitzadors"
|
||||||
|
|
||||||
@ -1047,6 +1078,9 @@ msgstr "anterior"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Volum inicial"
|
msgstr "Volum inicial"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Sortida d'emergència"
|
msgstr "Sortida d'emergència"
|
||||||
|
|
||||||
|
36
po/cs_CZ.po
36
po/cs_CZ.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-28 15:00+0200\n"
|
"PO-Revision-Date: 2008-02-28 15:00+0200\n"
|
||||||
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>, Jiøí Dobrý <jdobry@centrum.cz>\n"
|
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>, Jiøí Dobrý <jdobry@centrum.cz>\n"
|
||||||
"Language-Team: Czech\n"
|
"Language-Team: Czech\n"
|
||||||
@ -584,6 +584,31 @@ msgstr "Kan
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Smazat kanál?"
|
msgstr "Smazat kanál?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Editace èasovaèe"
|
msgstr "Editace èasovaèe"
|
||||||
|
|
||||||
@ -614,9 +639,15 @@ msgstr "
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Soubor"
|
msgstr "Soubor"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "První den"
|
msgstr "První den"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Èasovaèe"
|
msgstr "Èasovaèe"
|
||||||
|
|
||||||
@ -1045,6 +1076,9 @@ msgstr "jako naposledy"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Hlasitost po spu¹tìní"
|
msgstr "Hlasitost po spu¹tìní"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Nouzové ukonèení"
|
msgstr "Nouzové ukonèení"
|
||||||
|
|
||||||
|
36
po/da_DK.po
36
po/da_DK.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
|
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
|
||||||
"Language-Team: Danish\n"
|
"Language-Team: Danish\n"
|
||||||
@ -583,6 +583,31 @@ msgstr "Kanal anvendes af en timer!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Slet kanal?"
|
msgstr "Slet kanal?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Rediger timer"
|
msgstr "Rediger timer"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "Levetid"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fil"
|
msgstr "Fil"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Første dag"
|
msgstr "Første dag"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timere"
|
msgstr "Timere"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr "som f
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Lydstyrke ved opstart"
|
msgstr "Lydstyrke ved opstart"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Nødudgang"
|
msgstr "Nødudgang"
|
||||||
|
|
||||||
|
38
po/de_DE.po
38
po/de_DE.po
@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2007-11-25 15:19+0200\n"
|
"PO-Revision-Date: 2010-01-16 16:46+0100\n"
|
||||||
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
|
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -583,6 +583,31 @@ msgstr "Kanal wird von einem Timer benutzt!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Kanal löschen?"
|
msgstr "Kanal löschen?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr "Verzeichnis editieren"
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr "Neues Verzeichnis"
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr "Unterverzeichnis"
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr "Verzeichnisname existiert bereits!"
|
||||||
|
|
||||||
|
#, fuzzy, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr "Verzeichnisname darf kein '{', '}' oder '#' enthalten!"
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr "Auswählen"
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr "Verzeichnis und alle Unterverzeichnisse löschen?"
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr "Verzeichnis löschen?"
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Timer editieren"
|
msgstr "Timer editieren"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "Lebensdauer"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Datei"
|
msgstr "Datei"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr "Verzeichnis"
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Erster Tag"
|
msgstr "Erster Tag"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr "Verzeichnis wählen"
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timer"
|
msgstr "Timer"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr "wie vorher"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Lautstärke beim Einschalten"
|
msgstr "Lautstärke beim Einschalten"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr "Rundum zappen"
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Notausstieg"
|
msgstr "Notausstieg"
|
||||||
|
|
||||||
|
36
po/el_GR.po
36
po/el_GR.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
|
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
|
||||||
"Language-Team: Greek\n"
|
"Language-Team: Greek\n"
|
||||||
@ -583,6 +583,31 @@ msgstr "
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "ÄéáãñáöÞ êáíáëéïý?"
|
msgstr "ÄéáãñáöÞ êáíáëéïý?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Ôñïðïðïßçóç ÷ñïíïðñïãñáììáôéóìïý"
|
msgstr "Ôñïðïðïßçóç ÷ñïíïðñïãñáììáôéóìïý"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Áñ÷åßï"
|
msgstr "Áñ÷åßï"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Ðñþôç ìÝñá"
|
msgstr "Ðñþôç ìÝñá"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "×ñïíïðñïãñáììáôéóìïß"
|
msgstr "×ñïíïðñïãñáììáôéóìïß"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr ""
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
36
po/es_ES.po
36
po/es_ES.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
|
||||||
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
@ -584,6 +584,31 @@ msgstr "
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "¿Eliminar canal?"
|
msgstr "¿Eliminar canal?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Modificar programación"
|
msgstr "Modificar programación"
|
||||||
|
|
||||||
@ -614,9 +639,15 @@ msgstr "Duraci
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fichero"
|
msgstr "Fichero"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Primer día"
|
msgstr "Primer día"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Programar grabaciones"
|
msgstr "Programar grabaciones"
|
||||||
|
|
||||||
@ -1045,6 +1076,9 @@ msgstr "anterior"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Volumen inicial"
|
msgstr "Volumen inicial"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Salida de emergencia"
|
msgstr "Salida de emergencia"
|
||||||
|
|
||||||
|
200
po/et_EE.po
200
po/et_EE.po
@ -1,13 +1,13 @@
|
|||||||
# VDR language source file.
|
# VDR language source file.
|
||||||
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
|
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
|
||||||
# This file is distributed under the same license as the VDR package.
|
# This file is distributed under the same license as the VDR package.
|
||||||
# Arthur Konovalov <artlov@gmail.com>, 2004-2009
|
# Arthur Konovalov <artlov@gmail.com>, 2004-2010
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
|
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
|
||||||
"Language-Team: Estonian\n"
|
"Language-Team: Estonian\n"
|
||||||
@ -34,251 +34,251 @@ msgid "Channel not available!"
|
|||||||
msgstr "Kanal ei ole kättesaadav!"
|
msgstr "Kanal ei ole kättesaadav!"
|
||||||
|
|
||||||
msgid "Can't start Transfer Mode!"
|
msgid "Can't start Transfer Mode!"
|
||||||
msgstr "Siirdemooduse start nurjus!"
|
msgstr "Ülekandemooduse start nurjus!"
|
||||||
|
|
||||||
msgid "Starting EPG scan"
|
msgid "Starting EPG scan"
|
||||||
msgstr "EPG skaneerimine käivitatud"
|
msgstr "EPG skaneerimine käivitatud"
|
||||||
|
|
||||||
msgid "Content$Movie/Drama"
|
msgid "Content$Movie/Drama"
|
||||||
msgstr ""
|
msgstr "Film/draama"
|
||||||
|
|
||||||
msgid "Content$Detective/Thriller"
|
msgid "Content$Detective/Thriller"
|
||||||
msgstr ""
|
msgstr "Krimi/triller"
|
||||||
|
|
||||||
msgid "Content$Adventure/Western/War"
|
msgid "Content$Adventure/Western/War"
|
||||||
msgstr ""
|
msgstr "Seiklus/western/sõda"
|
||||||
|
|
||||||
msgid "Content$Science Fiction/Fantasy/Horror"
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
msgstr ""
|
msgstr "Scifi/fantaasia/õudus"
|
||||||
|
|
||||||
msgid "Content$Comedy"
|
msgid "Content$Comedy"
|
||||||
msgstr ""
|
msgstr "Komöödia"
|
||||||
|
|
||||||
msgid "Content$Soap/Melodrama/Folkloric"
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
msgstr ""
|
msgstr "Sari/Melodraama/pärimuslik"
|
||||||
|
|
||||||
msgid "Content$Romance"
|
msgid "Content$Romance"
|
||||||
msgstr ""
|
msgstr "Romanss"
|
||||||
|
|
||||||
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
msgstr ""
|
msgstr "Tõsine/klassikaline/religioosne/ajaloofilm/draama"
|
||||||
|
|
||||||
msgid "Content$Adult Movie/Drama"
|
msgid "Content$Adult Movie/Drama"
|
||||||
msgstr ""
|
msgstr "Täiskasvanutele/draama"
|
||||||
|
|
||||||
msgid "Content$News/Current Affairs"
|
msgid "Content$News/Current Affairs"
|
||||||
msgstr ""
|
msgstr "Uudised/päevakajaline"
|
||||||
|
|
||||||
msgid "Content$News/Weather Report"
|
msgid "Content$News/Weather Report"
|
||||||
msgstr ""
|
msgstr "Uudised/ilmateade"
|
||||||
|
|
||||||
msgid "Content$News Magazine"
|
msgid "Content$News Magazine"
|
||||||
msgstr ""
|
msgstr "Uudisteajakiri"
|
||||||
|
|
||||||
msgid "Content$Documentary"
|
msgid "Content$Documentary"
|
||||||
msgstr ""
|
msgstr "Dokumentaal"
|
||||||
|
|
||||||
msgid "Content$Discussion/Inverview/Debate"
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
msgstr ""
|
msgstr "Diskussioon/intervjuu/debatt"
|
||||||
|
|
||||||
msgid "Content$Show/Game Show"
|
msgid "Content$Show/Game Show"
|
||||||
msgstr ""
|
msgstr "Meelelahutus"
|
||||||
|
|
||||||
msgid "Content$Game Show/Quiz/Contest"
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
msgstr ""
|
msgstr "Sõumäng/mälumäng/võistlus"
|
||||||
|
|
||||||
msgid "Content$Variety Show"
|
msgid "Content$Variety Show"
|
||||||
msgstr ""
|
msgstr "Varietee"
|
||||||
|
|
||||||
msgid "Content$Talk Show"
|
msgid "Content$Talk Show"
|
||||||
msgstr ""
|
msgstr "Vestlussaade"
|
||||||
|
|
||||||
msgid "Content$Sports"
|
msgid "Content$Sports"
|
||||||
msgstr ""
|
msgstr "Sport"
|
||||||
|
|
||||||
msgid "Content$Special Event"
|
msgid "Content$Special Event"
|
||||||
msgstr ""
|
msgstr "Erisündmus"
|
||||||
|
|
||||||
msgid "Content$Sport Magazine"
|
msgid "Content$Sport Magazine"
|
||||||
msgstr ""
|
msgstr "Spordiajakiri"
|
||||||
|
|
||||||
msgid "Content$Football/Soccer"
|
msgid "Content$Football/Soccer"
|
||||||
msgstr ""
|
msgstr "Jalgpall"
|
||||||
|
|
||||||
msgid "Content$Tennis/Squash"
|
msgid "Content$Tennis/Squash"
|
||||||
msgstr ""
|
msgstr "Tennis/squash"
|
||||||
|
|
||||||
msgid "Content$Team Sports"
|
msgid "Content$Team Sports"
|
||||||
msgstr ""
|
msgstr "Meeskonnasport"
|
||||||
|
|
||||||
msgid "Content$Athletics"
|
msgid "Content$Athletics"
|
||||||
msgstr ""
|
msgstr "Kergejõustik"
|
||||||
|
|
||||||
msgid "Content$Motor Sport"
|
msgid "Content$Motor Sport"
|
||||||
msgstr ""
|
msgstr "Autosport"
|
||||||
|
|
||||||
msgid "Content$Water Sport"
|
msgid "Content$Water Sport"
|
||||||
msgstr ""
|
msgstr "Veesport"
|
||||||
|
|
||||||
msgid "Content$Winter Sports"
|
msgid "Content$Winter Sports"
|
||||||
msgstr ""
|
msgstr "Talvesport"
|
||||||
|
|
||||||
msgid "Content$Equestrian"
|
msgid "Content$Equestrian"
|
||||||
msgstr ""
|
msgstr "Ratsutamine"
|
||||||
|
|
||||||
msgid "Content$Martial Sports"
|
msgid "Content$Martial Sports"
|
||||||
msgstr ""
|
msgstr "Võitluskunst"
|
||||||
|
|
||||||
msgid "Content$Children's/Youth Programme"
|
msgid "Content$Children's/Youth Programme"
|
||||||
msgstr ""
|
msgstr "Laste- ja noortesaade"
|
||||||
|
|
||||||
msgid "Content$Pre-school Children's Programme"
|
msgid "Content$Pre-school Children's Programme"
|
||||||
msgstr ""
|
msgstr "Koolieelikutele"
|
||||||
|
|
||||||
msgid "Content$Entertainment Programme for 6 to 14"
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
msgstr ""
|
msgstr "Meelelahutus 6-14 aastastele"
|
||||||
|
|
||||||
msgid "Content$Entertainment Programme for 10 to 16"
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
msgstr ""
|
msgstr "Meelelahutus 10-16 aastastele"
|
||||||
|
|
||||||
msgid "Content$Informational/Educational/School Programme"
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
msgstr ""
|
msgstr "Õppe- ja haridussaade"
|
||||||
|
|
||||||
msgid "Content$Cartoons/Puppets"
|
msgid "Content$Cartoons/Puppets"
|
||||||
msgstr ""
|
msgstr "Joonisfilm/Nukufilm"
|
||||||
|
|
||||||
msgid "Content$Music/Ballet/Dance"
|
msgid "Content$Music/Ballet/Dance"
|
||||||
msgstr ""
|
msgstr "Muusika/ballett/tants"
|
||||||
|
|
||||||
msgid "Content$Rock/Pop"
|
msgid "Content$Rock/Pop"
|
||||||
msgstr ""
|
msgstr "Rock/pop"
|
||||||
|
|
||||||
msgid "Content$Serious/Classical Music"
|
msgid "Content$Serious/Classical Music"
|
||||||
msgstr ""
|
msgstr "Klassikaline muusika"
|
||||||
|
|
||||||
msgid "Content$Folk/Tradional Music"
|
msgid "Content$Folk/Tradional Music"
|
||||||
msgstr ""
|
msgstr "Folk/rahvamuusika"
|
||||||
|
|
||||||
msgid "Content$Jazz"
|
msgid "Content$Jazz"
|
||||||
msgstr ""
|
msgstr "Jazz"
|
||||||
|
|
||||||
msgid "Content$Musical/Opera"
|
msgid "Content$Musical/Opera"
|
||||||
msgstr ""
|
msgstr "Muusikal/ooper"
|
||||||
|
|
||||||
msgid "Content$Ballet"
|
msgid "Content$Ballet"
|
||||||
msgstr ""
|
msgstr "Ballett"
|
||||||
|
|
||||||
msgid "Content$Arts/Culture"
|
msgid "Content$Arts/Culture"
|
||||||
msgstr ""
|
msgstr "Kunst/kultuur"
|
||||||
|
|
||||||
msgid "Content$Performing Arts"
|
msgid "Content$Performing Arts"
|
||||||
msgstr ""
|
msgstr "Performance"
|
||||||
|
|
||||||
msgid "Content$Fine Arts"
|
msgid "Content$Fine Arts"
|
||||||
msgstr ""
|
msgstr "Kaunid kunstid"
|
||||||
|
|
||||||
msgid "Content$Religion"
|
msgid "Content$Religion"
|
||||||
msgstr ""
|
msgstr "Religioon"
|
||||||
|
|
||||||
msgid "Content$Popular Culture/Traditional Arts"
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
msgstr ""
|
msgstr "Rahvakultuur/traditsiooniline kunst"
|
||||||
|
|
||||||
msgid "Content$Literature"
|
msgid "Content$Literature"
|
||||||
msgstr ""
|
msgstr "Kirjandus"
|
||||||
|
|
||||||
msgid "Content$Film/Cinema"
|
msgid "Content$Film/Cinema"
|
||||||
msgstr ""
|
msgstr "Filmikunst"
|
||||||
|
|
||||||
msgid "Content$Experimental Film/Video"
|
msgid "Content$Experimental Film/Video"
|
||||||
msgstr ""
|
msgstr "Eksperimentaalfilm/video"
|
||||||
|
|
||||||
msgid "Content$Broadcasting/Press"
|
msgid "Content$Broadcasting/Press"
|
||||||
msgstr ""
|
msgstr "TV/raadio/ajakirjandus"
|
||||||
|
|
||||||
msgid "Content$New Media"
|
msgid "Content$New Media"
|
||||||
msgstr ""
|
msgstr "Uus meedia"
|
||||||
|
|
||||||
msgid "Content$Arts/Culture Magazine"
|
msgid "Content$Arts/Culture Magazine"
|
||||||
msgstr ""
|
msgstr "Kultuuriajakiri"
|
||||||
|
|
||||||
msgid "Content$Fashion"
|
msgid "Content$Fashion"
|
||||||
msgstr ""
|
msgstr "Mood"
|
||||||
|
|
||||||
msgid "Content$Social/Political/Economics"
|
msgid "Content$Social/Political/Economics"
|
||||||
msgstr ""
|
msgstr "Ühiskond/poliitika/majandus"
|
||||||
|
|
||||||
msgid "Content$Magazine/Report/Documentary"
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
msgstr ""
|
msgstr "Ajakiri/reportaaþ/dokumentaal"
|
||||||
|
|
||||||
msgid "Content$Economics/Social Advisory"
|
msgid "Content$Economics/Social Advisory"
|
||||||
msgstr ""
|
msgstr "Majandus/majandusnõuanne"
|
||||||
|
|
||||||
msgid "Content$Remarkable People"
|
msgid "Content$Remarkable People"
|
||||||
msgstr ""
|
msgstr "Tähelepanuväärsed isikud"
|
||||||
|
|
||||||
msgid "Content$Education/Science/Factual"
|
msgid "Content$Education/Science/Factual"
|
||||||
msgstr ""
|
msgstr "Haridus/teadus/faktid"
|
||||||
|
|
||||||
msgid "Content$Nature/Animals/Environment"
|
msgid "Content$Nature/Animals/Environment"
|
||||||
msgstr ""
|
msgstr "Loodus/loomad/keskkond"
|
||||||
|
|
||||||
msgid "Content$Technology/Natural Sciences"
|
msgid "Content$Technology/Natural Sciences"
|
||||||
msgstr ""
|
msgstr "Tehnoloogia/loodusteadus"
|
||||||
|
|
||||||
msgid "Content$Medicine/Physiology/Psychology"
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
msgstr ""
|
msgstr "Meditsiin/füsioloogia/psühholoogia"
|
||||||
|
|
||||||
msgid "Content$Foreign Countries/Expeditions"
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
msgstr ""
|
msgstr "Välisriigid/ekspeditsioon"
|
||||||
|
|
||||||
msgid "Content$Social/Spiritual Sciences"
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
msgstr ""
|
msgstr "Ühiskondlik/Hingeteadus"
|
||||||
|
|
||||||
msgid "Content$Further Education"
|
msgid "Content$Further Education"
|
||||||
msgstr ""
|
msgstr "Täiendõpe"
|
||||||
|
|
||||||
msgid "Content$Languages"
|
msgid "Content$Languages"
|
||||||
msgstr ""
|
msgstr "Keeled"
|
||||||
|
|
||||||
msgid "Content$Leisure/Hobbies"
|
msgid "Content$Leisure/Hobbies"
|
||||||
msgstr ""
|
msgstr "Vaba aeg/hobi"
|
||||||
|
|
||||||
msgid "Content$Tourism/Travel"
|
msgid "Content$Tourism/Travel"
|
||||||
msgstr ""
|
msgstr "Turism/reisimine"
|
||||||
|
|
||||||
msgid "Content$Handicraft"
|
msgid "Content$Handicraft"
|
||||||
msgstr ""
|
msgstr "Käsitöö"
|
||||||
|
|
||||||
msgid "Content$Motoring"
|
msgid "Content$Motoring"
|
||||||
msgstr ""
|
msgstr "Autondus"
|
||||||
|
|
||||||
msgid "Content$Fitness & Health"
|
msgid "Content$Fitness & Health"
|
||||||
msgstr ""
|
msgstr "Tervis"
|
||||||
|
|
||||||
msgid "Content$Cooking"
|
msgid "Content$Cooking"
|
||||||
msgstr ""
|
msgstr "Kokasaade"
|
||||||
|
|
||||||
msgid "Content$Advertisement/Shopping"
|
msgid "Content$Advertisement/Shopping"
|
||||||
msgstr ""
|
msgstr "Reklaam/teleturg"
|
||||||
|
|
||||||
msgid "Content$Gardening"
|
msgid "Content$Gardening"
|
||||||
msgstr ""
|
msgstr "Aiandus"
|
||||||
|
|
||||||
msgid "Content$Original Language"
|
msgid "Content$Original Language"
|
||||||
msgstr ""
|
msgstr "Originaalkeel"
|
||||||
|
|
||||||
msgid "Content$Black & White"
|
msgid "Content$Black & White"
|
||||||
msgstr ""
|
msgstr "Mustvalge"
|
||||||
|
|
||||||
msgid "Content$Unpublished"
|
msgid "Content$Unpublished"
|
||||||
msgstr ""
|
msgstr "Avaldamata"
|
||||||
|
|
||||||
msgid "Content$Live Broadcast"
|
msgid "Content$Live Broadcast"
|
||||||
msgstr ""
|
msgstr "Otseülekanne"
|
||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ParentalRating$from %d"
|
msgid "ParentalRating$from %d"
|
||||||
msgstr ""
|
msgstr "alates %d"
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Pealkiri puudub"
|
msgstr "Pealkiri puudub"
|
||||||
@ -583,6 +583,31 @@ msgstr "Kanal on taimeri kasutuses!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Kustutada kanal?"
|
msgstr "Kustutada kanal?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Taimeri redigeerimine"
|
msgstr "Taimeri redigeerimine"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "Eluiga"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fail"
|
msgstr "Fail"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Esimene päev"
|
msgstr "Esimene päev"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Taimer"
|
msgstr "Taimer"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr "endine"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Helitugevus käivitamisel"
|
msgstr "Helitugevus käivitamisel"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Hädaväljumine"
|
msgstr "Hädaväljumine"
|
||||||
|
|
||||||
|
36
po/fi_FI.po
36
po/fi_FI.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
|
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
|
||||||
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
||||||
"Language-Team: Finnish\n"
|
"Language-Team: Finnish\n"
|
||||||
@ -586,6 +586,31 @@ msgstr "Kanava on ajastimen k
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Poistetaanko kanava?"
|
msgstr "Poistetaanko kanava?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Muokkaa ajastinta"
|
msgstr "Muokkaa ajastinta"
|
||||||
|
|
||||||
@ -616,9 +641,15 @@ msgstr "Elinik
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Tiedosto"
|
msgstr "Tiedosto"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "1. päivä"
|
msgstr "1. päivä"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Ajastimet"
|
msgstr "Ajastimet"
|
||||||
|
|
||||||
@ -1047,6 +1078,9 @@ msgstr "edellinen"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Äänenvoimakkuus käynnistettäessä"
|
msgstr "Äänenvoimakkuus käynnistettäessä"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Käytä hätäsammutusta"
|
msgstr "Käytä hätäsammutusta"
|
||||||
|
|
||||||
|
36
po/fr_FR.po
36
po/fr_FR.po
@ -13,7 +13,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
|
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
|
||||||
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
|
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
|
||||||
"Language-Team: French\n"
|
"Language-Team: French\n"
|
||||||
@ -589,6 +589,31 @@ msgstr "Cette cha
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Supprimer la chaîne ?"
|
msgstr "Supprimer la chaîne ?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Changer la programmation"
|
msgstr "Changer la programmation"
|
||||||
|
|
||||||
@ -619,9 +644,15 @@ msgstr "Dur
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fichier"
|
msgstr "Fichier"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Premier jour"
|
msgstr "Premier jour"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Programmation"
|
msgstr "Programmation"
|
||||||
|
|
||||||
@ -1050,6 +1081,9 @@ msgstr "comme avant"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Volume initial"
|
msgstr "Volume initial"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Arrêt d'urgence"
|
msgstr "Arrêt d'urgence"
|
||||||
|
|
||||||
|
36
po/hr_HR.po
36
po/hr_HR.po
@ -9,7 +9,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
|
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
|
||||||
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
|
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
|
||||||
"Language-Team: Croatian\n"
|
"Language-Team: Croatian\n"
|
||||||
@ -585,6 +585,31 @@ msgstr "Program je trenutno zauzet tajmerom!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Obrisati program?"
|
msgstr "Obrisati program?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Ureðivanje tajmera"
|
msgstr "Ureðivanje tajmera"
|
||||||
|
|
||||||
@ -615,9 +640,15 @@ msgstr "Trajanje"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Datoteka"
|
msgstr "Datoteka"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Prvi dan"
|
msgstr "Prvi dan"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Tajmeri"
|
msgstr "Tajmeri"
|
||||||
|
|
||||||
@ -1046,6 +1077,9 @@ msgstr "kao prethodno"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Poèetna jaèina zvuka"
|
msgstr "Poèetna jaèina zvuka"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Izlaz u sluèaju nu¾de"
|
msgstr "Izlaz u sluèaju nu¾de"
|
||||||
|
|
||||||
|
36
po/hu_HU.po
36
po/hu_HU.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2007-12-01 21:42+0200\n"
|
"PO-Revision-Date: 2007-12-01 21:42+0200\n"
|
||||||
"Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
|
"Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
|
||||||
"Language-Team: Hungarian\n"
|
"Language-Team: Hungarian\n"
|
||||||
@ -586,6 +586,31 @@ msgstr "Az ad
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Csatorna törlése?"
|
msgstr "Csatorna törlése?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Idõzítõ megváltoztatása"
|
msgstr "Idõzítõ megváltoztatása"
|
||||||
|
|
||||||
@ -616,9 +641,15 @@ msgstr "
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "File"
|
msgstr "File"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Elsõ nap"
|
msgstr "Elsõ nap"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Idõzítõ"
|
msgstr "Idõzítõ"
|
||||||
|
|
||||||
@ -1047,6 +1078,9 @@ msgstr "ahogy az el
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Hangerõ a bekapcsolásnál"
|
msgstr "Hangerõ a bekapcsolásnál"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
198
po/it_IT.po
198
po/it_IT.po
@ -11,8 +11,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2009-11-28 22:50+0100\n"
|
"PO-Revision-Date: 2010-01-12 23:53+0100\n"
|
||||||
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
||||||
"Language-Team: Italian\n"
|
"Language-Team: Italian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -47,245 +47,245 @@ msgid "Starting EPG scan"
|
|||||||
msgstr "Inizio scansione EPG"
|
msgstr "Inizio scansione EPG"
|
||||||
|
|
||||||
msgid "Content$Movie/Drama"
|
msgid "Content$Movie/Drama"
|
||||||
msgstr ""
|
msgstr "Film/Dramma"
|
||||||
|
|
||||||
msgid "Content$Detective/Thriller"
|
msgid "Content$Detective/Thriller"
|
||||||
msgstr ""
|
msgstr "Investigativo/Giallo"
|
||||||
|
|
||||||
msgid "Content$Adventure/Western/War"
|
msgid "Content$Adventure/Western/War"
|
||||||
msgstr ""
|
msgstr "Avventura/Western/Guerra"
|
||||||
|
|
||||||
msgid "Content$Science Fiction/Fantasy/Horror"
|
msgid "Content$Science Fiction/Fantasy/Horror"
|
||||||
msgstr ""
|
msgstr "Finzione/Fantasia/Horror"
|
||||||
|
|
||||||
msgid "Content$Comedy"
|
msgid "Content$Comedy"
|
||||||
msgstr ""
|
msgstr "Commedia"
|
||||||
|
|
||||||
msgid "Content$Soap/Melodrama/Folkloric"
|
msgid "Content$Soap/Melodrama/Folkloric"
|
||||||
msgstr ""
|
msgstr "Telenovella/Melodramma/Folcloristico"
|
||||||
|
|
||||||
msgid "Content$Romance"
|
msgid "Content$Romance"
|
||||||
msgstr ""
|
msgstr "Romanzo"
|
||||||
|
|
||||||
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
msgid "Content$Serious/Classical/Religious/Historical Movie/Drama"
|
||||||
msgstr ""
|
msgstr "Serio/Classico/Religioso/Film storico/Dramma"
|
||||||
|
|
||||||
msgid "Content$Adult Movie/Drama"
|
msgid "Content$Adult Movie/Drama"
|
||||||
msgstr ""
|
msgstr "Film per adulti/Dramma"
|
||||||
|
|
||||||
msgid "Content$News/Current Affairs"
|
msgid "Content$News/Current Affairs"
|
||||||
msgstr ""
|
msgstr "Notizie/Ultima ora"
|
||||||
|
|
||||||
msgid "Content$News/Weather Report"
|
msgid "Content$News/Weather Report"
|
||||||
msgstr ""
|
msgstr "Notizie/Previsioni meteo"
|
||||||
|
|
||||||
msgid "Content$News Magazine"
|
msgid "Content$News Magazine"
|
||||||
msgstr ""
|
msgstr "Settimanale di attualità"
|
||||||
|
|
||||||
msgid "Content$Documentary"
|
msgid "Content$Documentary"
|
||||||
msgstr ""
|
msgstr "Documentario"
|
||||||
|
|
||||||
msgid "Content$Discussion/Inverview/Debate"
|
msgid "Content$Discussion/Inverview/Debate"
|
||||||
msgstr ""
|
msgstr "Discussione/Intervista/Dibattito"
|
||||||
|
|
||||||
msgid "Content$Show/Game Show"
|
msgid "Content$Show/Game Show"
|
||||||
msgstr ""
|
msgstr "Spettacolo/Gioco a premi"
|
||||||
|
|
||||||
msgid "Content$Game Show/Quiz/Contest"
|
msgid "Content$Game Show/Quiz/Contest"
|
||||||
msgstr ""
|
msgstr "Gioco a premi/Quiz/Gara"
|
||||||
|
|
||||||
msgid "Content$Variety Show"
|
msgid "Content$Variety Show"
|
||||||
msgstr ""
|
msgstr "Spettacolo di varietà"
|
||||||
|
|
||||||
msgid "Content$Talk Show"
|
msgid "Content$Talk Show"
|
||||||
msgstr ""
|
msgstr "Talk Show"
|
||||||
|
|
||||||
msgid "Content$Sports"
|
msgid "Content$Sports"
|
||||||
msgstr ""
|
msgstr "Sport"
|
||||||
|
|
||||||
msgid "Content$Special Event"
|
msgid "Content$Special Event"
|
||||||
msgstr ""
|
msgstr "Evento speciale"
|
||||||
|
|
||||||
msgid "Content$Sport Magazine"
|
msgid "Content$Sport Magazine"
|
||||||
msgstr ""
|
msgstr "Settimanale di sport"
|
||||||
|
|
||||||
msgid "Content$Football/Soccer"
|
msgid "Content$Football/Soccer"
|
||||||
msgstr ""
|
msgstr "Calcio"
|
||||||
|
|
||||||
msgid "Content$Tennis/Squash"
|
msgid "Content$Tennis/Squash"
|
||||||
msgstr ""
|
msgstr "Tennis/Squash"
|
||||||
|
|
||||||
msgid "Content$Team Sports"
|
msgid "Content$Team Sports"
|
||||||
msgstr ""
|
msgstr "Sport di squadra"
|
||||||
|
|
||||||
msgid "Content$Athletics"
|
msgid "Content$Athletics"
|
||||||
msgstr ""
|
msgstr "Atletica"
|
||||||
|
|
||||||
msgid "Content$Motor Sport"
|
msgid "Content$Motor Sport"
|
||||||
msgstr ""
|
msgstr "Sport motoristici"
|
||||||
|
|
||||||
msgid "Content$Water Sport"
|
msgid "Content$Water Sport"
|
||||||
msgstr ""
|
msgstr "Sport acquatici"
|
||||||
|
|
||||||
msgid "Content$Winter Sports"
|
msgid "Content$Winter Sports"
|
||||||
msgstr ""
|
msgstr "Sport invernali"
|
||||||
|
|
||||||
msgid "Content$Equestrian"
|
msgid "Content$Equestrian"
|
||||||
msgstr ""
|
msgstr "Equitazione"
|
||||||
|
|
||||||
msgid "Content$Martial Sports"
|
msgid "Content$Martial Sports"
|
||||||
msgstr ""
|
msgstr "Arti marziali"
|
||||||
|
|
||||||
msgid "Content$Children's/Youth Programme"
|
msgid "Content$Children's/Youth Programme"
|
||||||
msgstr ""
|
msgstr "Programmi per ragazzi/giovani"
|
||||||
|
|
||||||
msgid "Content$Pre-school Children's Programme"
|
msgid "Content$Pre-school Children's Programme"
|
||||||
msgstr ""
|
msgstr "Programmi per ragazzi prescolastici"
|
||||||
|
|
||||||
msgid "Content$Entertainment Programme for 6 to 14"
|
msgid "Content$Entertainment Programme for 6 to 14"
|
||||||
msgstr ""
|
msgstr "Programmi di intrattenimento da 6 a 14"
|
||||||
|
|
||||||
msgid "Content$Entertainment Programme for 10 to 16"
|
msgid "Content$Entertainment Programme for 10 to 16"
|
||||||
msgstr ""
|
msgstr "Programmi di intrattenimento da 10 a 16"
|
||||||
|
|
||||||
msgid "Content$Informational/Educational/School Programme"
|
msgid "Content$Informational/Educational/School Programme"
|
||||||
msgstr ""
|
msgstr "Informativo/Educativo/Programma scolastico"
|
||||||
|
|
||||||
msgid "Content$Cartoons/Puppets"
|
msgid "Content$Cartoons/Puppets"
|
||||||
msgstr ""
|
msgstr "Cartoni/Pupazzi"
|
||||||
|
|
||||||
msgid "Content$Music/Ballet/Dance"
|
msgid "Content$Music/Ballet/Dance"
|
||||||
msgstr ""
|
msgstr "Musica/Balletto/Danza"
|
||||||
|
|
||||||
msgid "Content$Rock/Pop"
|
msgid "Content$Rock/Pop"
|
||||||
msgstr ""
|
msgstr "Rock/Pop"
|
||||||
|
|
||||||
msgid "Content$Serious/Classical Music"
|
msgid "Content$Serious/Classical Music"
|
||||||
msgstr ""
|
msgstr "Musica Classica/Seria"
|
||||||
|
|
||||||
msgid "Content$Folk/Tradional Music"
|
msgid "Content$Folk/Tradional Music"
|
||||||
msgstr ""
|
msgstr "Musica Tradizionale/Folclore"
|
||||||
|
|
||||||
msgid "Content$Jazz"
|
msgid "Content$Jazz"
|
||||||
msgstr ""
|
msgstr "Jazz"
|
||||||
|
|
||||||
msgid "Content$Musical/Opera"
|
msgid "Content$Musical/Opera"
|
||||||
msgstr ""
|
msgstr "Musical/Opera"
|
||||||
|
|
||||||
msgid "Content$Ballet"
|
msgid "Content$Ballet"
|
||||||
msgstr ""
|
msgstr "Balletto"
|
||||||
|
|
||||||
msgid "Content$Arts/Culture"
|
msgid "Content$Arts/Culture"
|
||||||
msgstr ""
|
msgstr "Arte/Cultura"
|
||||||
|
|
||||||
msgid "Content$Performing Arts"
|
msgid "Content$Performing Arts"
|
||||||
msgstr ""
|
msgstr "Arti di rendimento"
|
||||||
|
|
||||||
msgid "Content$Fine Arts"
|
msgid "Content$Fine Arts"
|
||||||
msgstr ""
|
msgstr "Arti fine"
|
||||||
|
|
||||||
msgid "Content$Religion"
|
msgid "Content$Religion"
|
||||||
msgstr ""
|
msgstr "Religione"
|
||||||
|
|
||||||
msgid "Content$Popular Culture/Traditional Arts"
|
msgid "Content$Popular Culture/Traditional Arts"
|
||||||
msgstr ""
|
msgstr "Cultura popolare/Arti tradizionali"
|
||||||
|
|
||||||
msgid "Content$Literature"
|
msgid "Content$Literature"
|
||||||
msgstr ""
|
msgstr "Letteratura"
|
||||||
|
|
||||||
msgid "Content$Film/Cinema"
|
msgid "Content$Film/Cinema"
|
||||||
msgstr ""
|
msgstr "Film/Cinema"
|
||||||
|
|
||||||
msgid "Content$Experimental Film/Video"
|
msgid "Content$Experimental Film/Video"
|
||||||
msgstr ""
|
msgstr "Film sperimentale/Video"
|
||||||
|
|
||||||
msgid "Content$Broadcasting/Press"
|
msgid "Content$Broadcasting/Press"
|
||||||
msgstr ""
|
msgstr "Trasmissione/Stampa"
|
||||||
|
|
||||||
msgid "Content$New Media"
|
msgid "Content$New Media"
|
||||||
msgstr ""
|
msgstr "Nuovo programma"
|
||||||
|
|
||||||
msgid "Content$Arts/Culture Magazine"
|
msgid "Content$Arts/Culture Magazine"
|
||||||
msgstr ""
|
msgstr "Arte/Settimanale di cultura"
|
||||||
|
|
||||||
msgid "Content$Fashion"
|
msgid "Content$Fashion"
|
||||||
msgstr ""
|
msgstr "Moda"
|
||||||
|
|
||||||
msgid "Content$Social/Political/Economics"
|
msgid "Content$Social/Political/Economics"
|
||||||
msgstr ""
|
msgstr "Società/Politica/Economia"
|
||||||
|
|
||||||
msgid "Content$Magazine/Report/Documentary"
|
msgid "Content$Magazine/Report/Documentary"
|
||||||
msgstr ""
|
msgstr "Settimanale/Reportage/Documentario"
|
||||||
|
|
||||||
msgid "Content$Economics/Social Advisory"
|
msgid "Content$Economics/Social Advisory"
|
||||||
msgstr ""
|
msgstr "Economia/Consulenza sociale"
|
||||||
|
|
||||||
msgid "Content$Remarkable People"
|
msgid "Content$Remarkable People"
|
||||||
msgstr ""
|
msgstr "Personaggi importanti"
|
||||||
|
|
||||||
msgid "Content$Education/Science/Factual"
|
msgid "Content$Education/Science/Factual"
|
||||||
msgstr ""
|
msgstr "Educazione/Scienza/Fatti"
|
||||||
|
|
||||||
msgid "Content$Nature/Animals/Environment"
|
msgid "Content$Nature/Animals/Environment"
|
||||||
msgstr ""
|
msgstr "Natura/Animali/Ambiente"
|
||||||
|
|
||||||
msgid "Content$Technology/Natural Sciences"
|
msgid "Content$Technology/Natural Sciences"
|
||||||
msgstr ""
|
msgstr "Tecnologia/Scienze naturali"
|
||||||
|
|
||||||
msgid "Content$Medicine/Physiology/Psychology"
|
msgid "Content$Medicine/Physiology/Psychology"
|
||||||
msgstr ""
|
msgstr "Medicina/Filosofia/Psicologia"
|
||||||
|
|
||||||
msgid "Content$Foreign Countries/Expeditions"
|
msgid "Content$Foreign Countries/Expeditions"
|
||||||
msgstr ""
|
msgstr "Paesi esteri/Spedizioni"
|
||||||
|
|
||||||
msgid "Content$Social/Spiritual Sciences"
|
msgid "Content$Social/Spiritual Sciences"
|
||||||
msgstr ""
|
msgstr "Società/Scienze spirituali"
|
||||||
|
|
||||||
msgid "Content$Further Education"
|
msgid "Content$Further Education"
|
||||||
msgstr ""
|
msgstr "Altra educazione"
|
||||||
|
|
||||||
msgid "Content$Languages"
|
msgid "Content$Languages"
|
||||||
msgstr ""
|
msgstr "Lingue"
|
||||||
|
|
||||||
msgid "Content$Leisure/Hobbies"
|
msgid "Content$Leisure/Hobbies"
|
||||||
msgstr ""
|
msgstr "Tempo libero/Hobby"
|
||||||
|
|
||||||
msgid "Content$Tourism/Travel"
|
msgid "Content$Tourism/Travel"
|
||||||
msgstr ""
|
msgstr "Turismo/Viaggi"
|
||||||
|
|
||||||
msgid "Content$Handicraft"
|
msgid "Content$Handicraft"
|
||||||
msgstr ""
|
msgstr "Artigianato"
|
||||||
|
|
||||||
msgid "Content$Motoring"
|
msgid "Content$Motoring"
|
||||||
msgstr ""
|
msgstr "Motori"
|
||||||
|
|
||||||
msgid "Content$Fitness & Health"
|
msgid "Content$Fitness & Health"
|
||||||
msgstr ""
|
msgstr "Culturismo & Salute"
|
||||||
|
|
||||||
msgid "Content$Cooking"
|
msgid "Content$Cooking"
|
||||||
msgstr ""
|
msgstr "Cucina"
|
||||||
|
|
||||||
msgid "Content$Advertisement/Shopping"
|
msgid "Content$Advertisement/Shopping"
|
||||||
msgstr ""
|
msgstr "Pubblicità/Acquisti"
|
||||||
|
|
||||||
msgid "Content$Gardening"
|
msgid "Content$Gardening"
|
||||||
msgstr ""
|
msgstr "Giardinaggio"
|
||||||
|
|
||||||
msgid "Content$Original Language"
|
msgid "Content$Original Language"
|
||||||
msgstr ""
|
msgstr "Lingua madre"
|
||||||
|
|
||||||
msgid "Content$Black & White"
|
msgid "Content$Black & White"
|
||||||
msgstr ""
|
msgstr "Bianco & Nero"
|
||||||
|
|
||||||
msgid "Content$Unpublished"
|
msgid "Content$Unpublished"
|
||||||
msgstr ""
|
msgstr "Non pubblicato"
|
||||||
|
|
||||||
msgid "Content$Live Broadcast"
|
msgid "Content$Live Broadcast"
|
||||||
msgstr ""
|
msgstr "Trasmissione dal vivo"
|
||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "ParentalRating$from %d"
|
msgid "ParentalRating$from %d"
|
||||||
msgstr ""
|
msgstr "da %d"
|
||||||
|
|
||||||
msgid "No title"
|
msgid "No title"
|
||||||
msgstr "Senza titolo"
|
msgstr "Senza titolo"
|
||||||
@ -590,6 +590,31 @@ msgstr "Canale occupato da un timer!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Eliminare il canale?"
|
msgstr "Eliminare il canale?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Modifica timer"
|
msgstr "Modifica timer"
|
||||||
|
|
||||||
@ -620,9 +645,15 @@ msgstr "Scadenza"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Nome"
|
msgstr "Nome"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "1° giorno"
|
msgstr "1° giorno"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timer"
|
msgstr "Timer"
|
||||||
|
|
||||||
@ -1051,6 +1082,9 @@ msgstr "come prima"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Volume iniziale"
|
msgstr "Volume iniziale"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Uscita di emergenza"
|
msgstr "Uscita di emergenza"
|
||||||
|
|
||||||
|
36
po/lt_LT.po
36
po/lt_LT.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.9\n"
|
"Project-Id-Version: VDR 1.7.9\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2009-10-17 14:19+0200\n"
|
"PO-Revision-Date: 2009-10-17 14:19+0200\n"
|
||||||
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
||||||
"Language-Team: Lithuanian\n"
|
"Language-Team: Lithuanian\n"
|
||||||
@ -583,6 +583,31 @@ msgstr "Kanalą šiuo metu naudoja laikmačio procesas!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Ištrinti kanalą?"
|
msgstr "Ištrinti kanalą?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Koreguoti laikmatį"
|
msgstr "Koreguoti laikmatį"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "Galiojimas"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Failas"
|
msgstr "Failas"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Pirma diena"
|
msgstr "Pirma diena"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Laikmačiai"
|
msgstr "Laikmačiai"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr "kaip anksčiau"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Garsas įjungimo metu"
|
msgstr "Garsas įjungimo metu"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Avarinis išėjimas"
|
msgstr "Avarinis išėjimas"
|
||||||
|
|
||||||
|
36
po/nl_NL.po
36
po/nl_NL.po
@ -11,7 +11,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
|
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
|
||||||
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
|
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
@ -587,6 +587,31 @@ msgstr "Kanaal wordt gebruikt door een timer!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Kanaal verwijderen?"
|
msgstr "Kanaal verwijderen?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Timer veranderen"
|
msgstr "Timer veranderen"
|
||||||
|
|
||||||
@ -617,9 +642,15 @@ msgstr "Bewaarduur"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Bestandnaam"
|
msgstr "Bestandnaam"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Eerste dag"
|
msgstr "Eerste dag"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timers"
|
msgstr "Timers"
|
||||||
|
|
||||||
@ -1048,6 +1079,9 @@ msgstr "zoals eerder"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Opstartvolume"
|
msgstr "Opstartvolume"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Nooduitgang"
|
msgstr "Nooduitgang"
|
||||||
|
|
||||||
|
36
po/nn_NO.po
36
po/nn_NO.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
|
||||||
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
|
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
|
||||||
"Language-Team: Norwegian\n"
|
"Language-Team: Norwegian\n"
|
||||||
@ -584,6 +584,31 @@ msgstr "Kanalen er i bruk av en timer!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Slette kanal?"
|
msgstr "Slette kanal?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Editer timer"
|
msgstr "Editer timer"
|
||||||
|
|
||||||
@ -614,9 +639,15 @@ msgstr "Levetid"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Filnavn"
|
msgstr "Filnavn"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Første dag"
|
msgstr "Første dag"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timere"
|
msgstr "Timere"
|
||||||
|
|
||||||
@ -1045,6 +1076,9 @@ msgstr ""
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
36
po/pl_PL.po
36
po/pl_PL.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
|
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
|
||||||
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
|
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
|
||||||
"Language-Team: Polish\n"
|
"Language-Team: Polish\n"
|
||||||
@ -584,6 +584,31 @@ msgstr "Kana
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Usun±æ kana³?"
|
msgstr "Usun±æ kana³?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Edycja timera"
|
msgstr "Edycja timera"
|
||||||
|
|
||||||
@ -614,9 +639,15 @@ msgstr "Czas
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Plik"
|
msgstr "Plik"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Pierwszy dzieñ"
|
msgstr "Pierwszy dzieñ"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timery"
|
msgstr "Timery"
|
||||||
|
|
||||||
@ -1045,6 +1076,9 @@ msgstr "jak ostatnio"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Pocz±tkowa g³o¶no¶æ"
|
msgstr "Pocz±tkowa g³o¶no¶æ"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Wyj¶cie awaryjne"
|
msgstr "Wyj¶cie awaryjne"
|
||||||
|
|
||||||
|
36
po/pt_PT.po
36
po/pt_PT.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-18 17:04+0100\n"
|
"PO-Revision-Date: 2008-03-18 17:04+0100\n"
|
||||||
"Last-Translator: anonymous\n"
|
"Last-Translator: anonymous\n"
|
||||||
"Language-Team: Portuguese\n"
|
"Language-Team: Portuguese\n"
|
||||||
@ -583,6 +583,31 @@ msgstr "Canal a ser utilizador por uma grava
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Apagar o canal?"
|
msgstr "Apagar o canal?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Editar gavação programada"
|
msgstr "Editar gavação programada"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "Dura
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Ficheiro"
|
msgstr "Ficheiro"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Primeiro dia"
|
msgstr "Primeiro dia"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Gravações programadas"
|
msgstr "Gravações programadas"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr "Como estava"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Volume inicial"
|
msgstr "Volume inicial"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Saída de emergência"
|
msgstr "Saída de emergência"
|
||||||
|
|
||||||
|
36
po/ro_RO.po
36
po/ro_RO.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-25 00:39+0100\n"
|
"PO-Revision-Date: 2008-02-25 00:39+0100\n"
|
||||||
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
|
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
|
||||||
"Language-Team: Romanian\n"
|
"Language-Team: Romanian\n"
|
||||||
@ -586,6 +586,31 @@ msgstr "Canalul este utilizat de un timer!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "ªterg canalul?"
|
msgstr "ªterg canalul?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Modificare timer"
|
msgstr "Modificare timer"
|
||||||
|
|
||||||
@ -616,9 +641,15 @@ msgstr "Timp de p
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fiºier"
|
msgstr "Fiºier"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Prima zi"
|
msgstr "Prima zi"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timer-e"
|
msgstr "Timer-e"
|
||||||
|
|
||||||
@ -1047,6 +1078,9 @@ msgstr "ca mai
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Volumul la pornire"
|
msgstr "Volumul la pornire"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Oprire de urgenþã"
|
msgstr "Oprire de urgenþã"
|
||||||
|
|
||||||
|
36
po/ru_RU.po
36
po/ru_RU.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
|
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
|
||||||
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
@ -584,6 +584,31 @@ msgstr "
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "ÃÔÐÛØâì ÚÐÝÐÛ?"
|
msgstr "ÃÔÐÛØâì ÚÐÝÐÛ?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "ÃáâÐÝÞÒÚÐ âÐÙÜÕàÐ"
|
msgstr "ÃáâÐÝÞÒÚÐ âÐÙÜÕàÐ"
|
||||||
|
|
||||||
@ -614,9 +639,15 @@ msgstr "
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "ÄÐÙÛ"
|
msgstr "ÄÐÙÛ"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "¿ÕàÒëÙ ÔÕÝì"
|
msgstr "¿ÕàÒëÙ ÔÕÝì"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "ÂÐÙÜÕàë"
|
msgstr "ÂÐÙÜÕàë"
|
||||||
|
|
||||||
@ -1045,6 +1076,9 @@ msgstr "
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "³àÞÜÚÞáâì ßàØ ÒÚÛîçÕÝØØ"
|
msgstr "³àÞÜÚÞáâì ßàØ ÒÚÛîçÕÝØØ"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "°ÒÐàØÙÝëÙ ÒëåÞÔ"
|
msgstr "°ÒÐàØÙÝëÙ ÒëåÞÔ"
|
||||||
|
|
||||||
|
36
po/sk_SK.po
36
po/sk_SK.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2009-09-30 12:50+0100\n"
|
"PO-Revision-Date: 2009-09-30 12:50+0100\n"
|
||||||
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
||||||
"Language-Team: Slovak\n"
|
"Language-Team: Slovak\n"
|
||||||
@ -584,6 +584,31 @@ msgstr "Pl
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Odstráni» kanál?"
|
msgstr "Odstráni» kanál?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Úprava plánu nahrávania"
|
msgstr "Úprava plánu nahrávania"
|
||||||
|
|
||||||
@ -614,9 +639,15 @@ msgstr "
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Súbor"
|
msgstr "Súbor"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Prvý deò"
|
msgstr "Prvý deò"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Plány nahrávania"
|
msgstr "Plány nahrávania"
|
||||||
|
|
||||||
@ -1045,6 +1076,9 @@ msgstr "ako naposledy"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Hlasitos» po spustení"
|
msgstr "Hlasitos» po spustení"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Núdzové ukonèenie"
|
msgstr "Núdzové ukonèenie"
|
||||||
|
|
||||||
|
36
po/sl_SI.po
36
po/sl_SI.po
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
|
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
|
||||||
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
|
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
|
||||||
"Language-Team: Slovenian\n"
|
"Language-Team: Slovenian\n"
|
||||||
@ -584,6 +584,31 @@ msgstr "Kanal je zavzet s terminom za snemanje!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Izbri¹i kanal?"
|
msgstr "Izbri¹i kanal?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Uredi termin"
|
msgstr "Uredi termin"
|
||||||
|
|
||||||
@ -614,9 +639,15 @@ msgstr "Veljavnost"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Datoteka"
|
msgstr "Datoteka"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Prvi dan"
|
msgstr "Prvi dan"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Termini"
|
msgstr "Termini"
|
||||||
|
|
||||||
@ -1045,6 +1076,9 @@ msgstr "kot prej"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Privzeta glasnost"
|
msgstr "Privzeta glasnost"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Izhod v sili"
|
msgstr "Izhod v sili"
|
||||||
|
|
||||||
|
36
po/sv_SE.po
36
po/sv_SE.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
|
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
|
||||||
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
|
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
|
||||||
"Language-Team: Swedish\n"
|
"Language-Team: Swedish\n"
|
||||||
@ -586,6 +586,31 @@ msgstr "Kanalen anv
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Ta bort kanalen?"
|
msgstr "Ta bort kanalen?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Ändra timer"
|
msgstr "Ändra timer"
|
||||||
|
|
||||||
@ -616,9 +641,15 @@ msgstr "Livstid"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Filnamn"
|
msgstr "Filnamn"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Första dag"
|
msgstr "Första dag"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Timers"
|
msgstr "Timers"
|
||||||
|
|
||||||
@ -1047,6 +1078,9 @@ msgstr "som f
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Ljudstyrka vid uppstart"
|
msgstr "Ljudstyrka vid uppstart"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Oförutsedd avslutning"
|
msgstr "Oförutsedd avslutning"
|
||||||
|
|
||||||
|
36
po/tr_TR.po
36
po/tr_TR.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
|
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
|
||||||
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
|
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
|
||||||
"Language-Team: Turkish\n"
|
"Language-Team: Turkish\n"
|
||||||
@ -583,6 +583,31 @@ msgstr "Kanal zamanlay
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Kanalý sil?"
|
msgstr "Kanalý sil?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Zamanlayýcýyý ayarla"
|
msgstr "Zamanlayýcýyý ayarla"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Kütük"
|
msgstr "Kütük"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Ýlk gün"
|
msgstr "Ýlk gün"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Zamanlayýcý"
|
msgstr "Zamanlayýcý"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr "
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Açýlýþdaki ses"
|
msgstr "Açýlýþdaki ses"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Acil cýkýþ"
|
msgstr "Acil cýkýþ"
|
||||||
|
|
||||||
|
36
po/uk_UA.po
36
po/uk_UA.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.7.7\n"
|
"Project-Id-Version: VDR 1.7.7\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2009-05-31 13:17+0200\n"
|
"PO-Revision-Date: 2009-05-31 13:17+0200\n"
|
||||||
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
|
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
|
||||||
"Language-Team: Ukrainian\n"
|
"Language-Team: Ukrainian\n"
|
||||||
@ -583,6 +583,31 @@ msgstr "Канал зайнятий таймером!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "Видалити канал?"
|
msgstr "Видалити канал?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "Налаштування таймера"
|
msgstr "Налаштування таймера"
|
||||||
|
|
||||||
@ -613,9 +638,15 @@ msgstr "Строк зберігання"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Файл"
|
msgstr "Файл"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "Перший день"
|
msgstr "Перший день"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "Таймери"
|
msgstr "Таймери"
|
||||||
|
|
||||||
@ -1044,6 +1075,9 @@ msgstr "як раніше"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "Гучність при включенні"
|
msgstr "Гучність при включенні"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "Аварійний вихід"
|
msgstr "Аварійний вихід"
|
||||||
|
|
||||||
|
36
po/zh_CN.po
36
po/zh_CN.po
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: VDR 1.6.0\n"
|
"Project-Id-Version: VDR 1.6.0\n"
|
||||||
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
|
||||||
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
|
"POT-Creation-Date: 2010-01-17 16:18+0100\n"
|
||||||
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
|
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
|
||||||
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
|
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
|
||||||
"Language-Team: Chinese\n"
|
"Language-Team: Chinese\n"
|
||||||
@ -586,6 +586,31 @@ msgstr "频道正在录像!"
|
|||||||
msgid "Delete channel?"
|
msgid "Delete channel?"
|
||||||
msgstr "是否删除频道?"
|
msgstr "是否删除频道?"
|
||||||
|
|
||||||
|
msgid "Edit folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "New folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sub folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Folder name already exists!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Folder name must not contain '%c'!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Button$Select"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder and all sub folders?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Delete folder?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Edit timer"
|
msgid "Edit timer"
|
||||||
msgstr "编辑计时器"
|
msgstr "编辑计时器"
|
||||||
|
|
||||||
@ -616,9 +641,15 @@ msgstr "终生"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "文件"
|
msgstr "文件"
|
||||||
|
|
||||||
|
msgid "Button$Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "First day"
|
msgid "First day"
|
||||||
msgstr "第一天"
|
msgstr "第一天"
|
||||||
|
|
||||||
|
msgid "Select folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Timers"
|
msgid "Timers"
|
||||||
msgstr "录像中列表"
|
msgstr "录像中列表"
|
||||||
|
|
||||||
@ -1047,6 +1078,9 @@ msgstr "之前"
|
|||||||
msgid "Setup.Miscellaneous$Initial volume"
|
msgid "Setup.Miscellaneous$Initial volume"
|
||||||
msgstr "初始化声音"
|
msgstr "初始化声音"
|
||||||
|
|
||||||
|
msgid "Setup.Miscellaneous$Channels wrap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Setup.Miscellaneous$Emergency exit"
|
msgid "Setup.Miscellaneous$Emergency exit"
|
||||||
msgstr "突发事件退出"
|
msgstr "突发事件退出"
|
||||||
|
|
||||||
|
75
receiver.c
75
receiver.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: receiver.c 2.1 2010/01/01 15:38:48 kls Exp $
|
* $Id: receiver.c 2.2 2010/01/30 10:25:38 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "receiver.h"
|
#include "receiver.h"
|
||||||
@ -12,28 +12,26 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
|
#ifdef LEGACY_CRECEIVER
|
||||||
cReceiver::cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pids1, const int *Pids2, const int *Pids3)
|
cReceiver::cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pids1, const int *Pids2, const int *Pids3)
|
||||||
{
|
{
|
||||||
device = NULL;
|
device = NULL;
|
||||||
channelID = ChannelID;
|
channelID = ChannelID;
|
||||||
priority = Priority;
|
priority = Priority;
|
||||||
numPids = 0;
|
numPids = 0;
|
||||||
if (Pid)
|
AddPid(Pid);
|
||||||
pids[numPids++] = Pid;
|
AddPids(Pids1);
|
||||||
if (Pids1) {
|
AddPids(Pids2);
|
||||||
while (*Pids1 && numPids < MAXRECEIVEPIDS)
|
AddPids(Pids3);
|
||||||
pids[numPids++] = *Pids1++;
|
}
|
||||||
}
|
#endif
|
||||||
if (Pids2) {
|
|
||||||
while (*Pids2 && numPids < MAXRECEIVEPIDS)
|
cReceiver::cReceiver(const cChannel *Channel, int Priority)
|
||||||
pids[numPids++] = *Pids2++;
|
{
|
||||||
}
|
device = NULL;
|
||||||
if (Pids3) {
|
priority = Priority;
|
||||||
while (*Pids3 && numPids < MAXRECEIVEPIDS)
|
numPids = 0;
|
||||||
pids[numPids++] = *Pids3++;
|
SetPids(Channel);
|
||||||
}
|
|
||||||
if (numPids >= MAXRECEIVEPIDS)
|
|
||||||
dsyslog("too many PIDs in cReceiver");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cReceiver::~cReceiver()
|
cReceiver::~cReceiver()
|
||||||
@ -46,6 +44,49 @@ cReceiver::~cReceiver()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cReceiver::AddPid(int Pid)
|
||||||
|
{
|
||||||
|
if (Pid) {
|
||||||
|
if (numPids < MAXRECEIVEPIDS)
|
||||||
|
pids[numPids++] = Pid;
|
||||||
|
else {
|
||||||
|
dsyslog("too many PIDs in cReceiver (Pid = %d)", Pid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cReceiver::AddPids(const int *Pids)
|
||||||
|
{
|
||||||
|
if (Pids) {
|
||||||
|
while (*Pids) {
|
||||||
|
if (!AddPid(*Pids++))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cReceiver::AddPids(int Pid1, int Pid2, int Pid3, int Pid4, int Pid5, int Pid6, int Pid7, int Pid8, int Pid9)
|
||||||
|
{
|
||||||
|
return AddPid(Pid1) && AddPid(Pid2) && AddPid(Pid3) && AddPid(Pid4) && AddPid(Pid5) && AddPid(Pid6) && AddPid(Pid7) && AddPid(Pid8) && AddPid(Pid9);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cReceiver::SetPids(const cChannel *Channel)
|
||||||
|
{
|
||||||
|
numPids = 0;
|
||||||
|
if (Channel) {
|
||||||
|
channelID = Channel->GetChannelID();
|
||||||
|
return AddPid(Channel->Vpid()) &&
|
||||||
|
(Channel->Ppid() == Channel->Vpid() || AddPid(Channel->Ppid())) &&
|
||||||
|
AddPids(Channel->Apids()) &&
|
||||||
|
(!Setup.UseDolbyDigital || AddPids(Channel->Dpids())) &&
|
||||||
|
AddPids(Channel->Spids());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool cReceiver::WantsPid(int Pid)
|
bool cReceiver::WantsPid(int Pid)
|
||||||
{
|
{
|
||||||
if (Pid) {
|
if (Pid) {
|
||||||
|
37
receiver.h
37
receiver.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: receiver.h 2.0 2007/01/05 11:00:36 kls Exp $
|
* $Id: receiver.h 2.1 2010/01/30 10:25:19 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __RECEIVER_H
|
#ifndef __RECEIVER_H
|
||||||
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#define MAXRECEIVEPIDS 64 // the maximum number of PIDs per receiver
|
#define MAXRECEIVEPIDS 64 // the maximum number of PIDs per receiver
|
||||||
|
|
||||||
|
#define LEGACY_CRECEIVER // Code enclosed with this macro is deprecated and may be removed in a future version
|
||||||
|
|
||||||
class cReceiver {
|
class cReceiver {
|
||||||
friend class cDevice;
|
friend class cDevice;
|
||||||
private:
|
private:
|
||||||
@ -38,20 +40,35 @@ protected:
|
|||||||
///< will be delivered only ONCE, so the cReceiver must make sure that
|
///< will be delivered only ONCE, so the cReceiver must make sure that
|
||||||
///< it will be able to buffer the data if necessary.
|
///< it will be able to buffer the data if necessary.
|
||||||
public:
|
public:
|
||||||
|
#ifdef LEGACY_CRECEIVER
|
||||||
cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pids1 = NULL, const int *Pids2 = NULL, const int *Pids3 = NULL);
|
cReceiver(tChannelID ChannelID, int Priority, int Pid, const int *Pids1 = NULL, const int *Pids2 = NULL, const int *Pids3 = NULL);
|
||||||
///< Creates a new receiver for the channel with the given ChannelID with
|
#endif
|
||||||
///< the given Priority. Pid is a single PID (typically the video PID), while
|
cReceiver(const cChannel *Channel = NULL, int Priority = -1);
|
||||||
///< Pids1...Pids3 are pointers to zero terminated lists of PIDs.
|
///< Creates a new receiver for the given Channel with the given Priority.
|
||||||
///< If any of these PIDs are 0, they will be silently ignored.
|
///< If Channel is not NULL, its pids set by a call to SetPids().
|
||||||
///< The total number of non-zero PIDs must not exceed MAXRECEIVEPIDS.
|
///< Otherwise pids can be added to the receiver by separate calls to the AddPid[s]
|
||||||
|
///< functions.
|
||||||
|
///< The total number of PIDs added to a receiver must not exceed MAXRECEIVEPIDS.
|
||||||
///< Priority may be any value in the range -99..99. Negative values indicate
|
///< Priority may be any value in the range -99..99. Negative values indicate
|
||||||
///< that this cReceiver may be detached at any time (without blocking the
|
///< that this cReceiver may be detached at any time (without blocking the
|
||||||
///< cDevice it is attached to).
|
///< cDevice it is attached to).
|
||||||
///< The ChannelID is necessary to allow the device that will be used for this
|
|
||||||
///< receiver to detect and store whether the channel can be decrypted in case
|
|
||||||
///< this is an encrypted channel. If the channel is not encrypted or this
|
|
||||||
///< detection is not wanted, an invalid tChannelID may be given.
|
|
||||||
virtual ~cReceiver();
|
virtual ~cReceiver();
|
||||||
|
bool AddPid(int Pid);
|
||||||
|
///< Adds the given Pid to the list of PIDs of this receiver.
|
||||||
|
bool AddPids(const int *Pids);
|
||||||
|
///< Adds the given izero terminated list of Pids to the list of PIDs of this
|
||||||
|
///< receiver.
|
||||||
|
bool AddPids(int Pid1, int Pid2, int Pid3 = 0, int Pid4 = 0, int Pid5 = 0, int Pid6 = 0, int Pid7 = 0, int Pid8 = 0, int Pid9 = 0);
|
||||||
|
///< Adds the given Pids to the list of PIDs of this receiver.
|
||||||
|
bool SetPids(const cChannel *Channel);
|
||||||
|
///< Sets the PIDs of this receiver to those of the given Channel,
|
||||||
|
///< replacing and previously stored PIDs. If Channel is NULL, all
|
||||||
|
///< PIDs will be cleared. Parameters in the Setup may control whether
|
||||||
|
///< certain types of PIDs (like Dolby Digital, for instance) are
|
||||||
|
///< actually set. The Channel's ID is stored and can later be retrieved
|
||||||
|
///< through ChannelID(). The ChannelID is necessary to allow the device
|
||||||
|
///< that will be used for this receiver to detect and store whether the
|
||||||
|
///< channel can be decrypted in case this is an encrypted channel.
|
||||||
tChannelID ChannelID(void) { return channelID; }
|
tChannelID ChannelID(void) { return channelID; }
|
||||||
bool IsAttached(void) { return device != NULL; }
|
bool IsAttached(void) { return device != NULL; }
|
||||||
///< Returns true if this receiver is (still) attached to a device.
|
///< Returns true if this receiver is (still) attached to a device.
|
||||||
|
20
recorder.c
20
recorder.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recorder.c 2.7 2009/12/06 11:34:41 kls Exp $
|
* $Id: recorder.c 2.8 2010/01/29 16:37:22 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recorder.h"
|
#include "recorder.h"
|
||||||
@ -21,8 +21,8 @@
|
|||||||
|
|
||||||
// --- cRecorder -------------------------------------------------------------
|
// --- cRecorder -------------------------------------------------------------
|
||||||
|
|
||||||
cRecorder::cRecorder(const char *FileName, tChannelID ChannelID, int Priority, int VPid, const int *APids, const int *DPids, const int *SPids)
|
cRecorder::cRecorder(const char *FileName, const cChannel *Channel, int Priority)
|
||||||
:cReceiver(ChannelID, Priority, VPid, APids, Setup.UseDolbyDigital ? DPids : NULL, SPids)
|
:cReceiver(Channel, Priority)
|
||||||
,cThread("recording")
|
,cThread("recording")
|
||||||
,recordingInfo(FileName)
|
,recordingInfo(FileName)
|
||||||
{
|
{
|
||||||
@ -32,15 +32,15 @@ cRecorder::cRecorder(const char *FileName, tChannelID ChannelID, int Priority, i
|
|||||||
|
|
||||||
ringBuffer = new cRingBufferLinear(RECORDERBUFSIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE, true, "Recorder");
|
ringBuffer = new cRingBufferLinear(RECORDERBUFSIZE, MIN_TS_PACKETS_FOR_FRAME_DETECTOR * TS_SIZE, true, "Recorder");
|
||||||
ringBuffer->SetTimeouts(0, 100);
|
ringBuffer->SetTimeouts(0, 100);
|
||||||
cChannel *Channel = Channels.GetByChannelID(ChannelID);
|
|
||||||
int Pid = VPid;
|
int Pid = Channel->Vpid();
|
||||||
int Type = Channel ? Channel->Vtype() : 0;
|
int Type = Channel->Vtype();
|
||||||
if (!Pid && APids) {
|
if (!Pid && Channel->Apid(0)) {
|
||||||
Pid = APids[0];
|
Pid = Channel->Apid(0);
|
||||||
Type = 0x04;
|
Type = 0x04;
|
||||||
}
|
}
|
||||||
if (!Pid && DPids) {
|
if (!Pid && Channel->Dpid(0)) {
|
||||||
Pid = DPids[0];
|
Pid = Channel->Dpid(0);
|
||||||
Type = 0x06;
|
Type = 0x06;
|
||||||
}
|
}
|
||||||
frameDetector = new cFrameDetector(Pid, Type);
|
frameDetector = new cFrameDetector(Pid, Type);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recorder.h 2.1 2009/01/06 10:44:58 kls Exp $
|
* $Id: recorder.h 2.2 2010/01/29 16:32:32 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __RECORDER_H
|
#ifndef __RECORDER_H
|
||||||
@ -34,9 +34,9 @@ protected:
|
|||||||
virtual void Receive(uchar *Data, int Length);
|
virtual void Receive(uchar *Data, int Length);
|
||||||
virtual void Action(void);
|
virtual void Action(void);
|
||||||
public:
|
public:
|
||||||
cRecorder(const char *FileName, tChannelID ChannelID, int Priority, int VPid, const int *APids, const int *DPids, const int *SPids);
|
cRecorder(const char *FileName, const cChannel *Channel, int Priority);
|
||||||
// Creates a new recorder for the channel with the given ChannelID and
|
// Creates a new recorder for the given Channel and
|
||||||
// the given Priority that will record the given PIDs into the file FileName.
|
// the given Priority that will record into the file FileName.
|
||||||
virtual ~cRecorder();
|
virtual ~cRecorder();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
26
recording.c
26
recording.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.c 2.21 2010/01/02 13:46:05 kls Exp $
|
* $Id: recording.c 2.22 2010/01/16 11:18:30 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recording.h"
|
#include "recording.h"
|
||||||
@ -524,8 +524,8 @@ bool cRecordingInfo::Write(void) const
|
|||||||
|
|
||||||
struct tCharExchange { char a; char b; };
|
struct tCharExchange { char a; char b; };
|
||||||
tCharExchange CharExchange[] = {
|
tCharExchange CharExchange[] = {
|
||||||
{ '~', '/' },
|
{ FOLDERDELIMCHAR, '/' },
|
||||||
{ '/', '~' },
|
{ '/', FOLDERDELIMCHAR },
|
||||||
{ ' ', '_' },
|
{ ' ', '_' },
|
||||||
// backwards compatibility:
|
// backwards compatibility:
|
||||||
{ '\'', '\'' },
|
{ '\'', '\'' },
|
||||||
@ -546,10 +546,10 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
switch (*p) {
|
switch (*p) {
|
||||||
// characters that can be mapped to other characters:
|
// characters that can be mapped to other characters:
|
||||||
case ' ': *p = '_'; break;
|
case ' ': *p = '_'; break;
|
||||||
case '~': *p = '/'; break;
|
case FOLDERDELIMCHAR: *p = '/'; break;
|
||||||
// characters that have to be encoded:
|
// characters that have to be encoded:
|
||||||
default:
|
default:
|
||||||
if (strchr(InvalidChars, *p) || *p == '.' && (!*(p + 1) || *(p + 1) == '~')) { // Windows can't handle '.' at the end of file/directory names
|
if (strchr(InvalidChars, *p) || *p == '.' && (!*(p + 1) || *(p + 1) == FOLDERDELIMCHAR)) { // Windows can't handle '.' at the end of file/directory names
|
||||||
int l = p - s;
|
int l = p - s;
|
||||||
s = (char *)realloc(s, strlen(s) + 10);
|
s = (char *)realloc(s, strlen(s) + 10);
|
||||||
p = s + l;
|
p = s + l;
|
||||||
@ -565,7 +565,7 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
switch (*p) {
|
switch (*p) {
|
||||||
// mapped characters:
|
// mapped characters:
|
||||||
case '_': *p = ' '; break;
|
case '_': *p = ' '; break;
|
||||||
case '/': *p = '~'; break;
|
case '/': *p = FOLDERDELIMCHAR; break;
|
||||||
// encoded characters:
|
// encoded characters:
|
||||||
case '#': {
|
case '#': {
|
||||||
if (strlen(p) > 2 && isxdigit(*(p + 1)) && isxdigit(*(p + 2))) {
|
if (strlen(p) > 2 && isxdigit(*(p + 1)) && isxdigit(*(p + 2))) {
|
||||||
@ -635,7 +635,7 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
|
|||||||
// avoid blanks at the end:
|
// avoid blanks at the end:
|
||||||
int l = strlen(name);
|
int l = strlen(name);
|
||||||
while (l-- > 2) {
|
while (l-- > 2) {
|
||||||
if (name[l] == ' ' && name[l - 1] != '~')
|
if (name[l] == ' ' && name[l - 1] != FOLDERDELIMCHAR)
|
||||||
name[l] = 0;
|
name[l] = 0;
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
@ -853,7 +853,7 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
|
|||||||
struct tm tm_r;
|
struct tm tm_r;
|
||||||
struct tm *t = localtime_r(&start, &tm_r);
|
struct tm *t = localtime_r(&start, &tm_r);
|
||||||
char *s;
|
char *s;
|
||||||
if (Level > 0 && (s = strrchr(name, '~')) != NULL)
|
if (Level > 0 && (s = strrchr(name, FOLDERDELIMCHAR)) != NULL)
|
||||||
s++;
|
s++;
|
||||||
else
|
else
|
||||||
s = name;
|
s = name;
|
||||||
@ -867,18 +867,18 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
|
|||||||
New,
|
New,
|
||||||
Delimiter,
|
Delimiter,
|
||||||
s));
|
s));
|
||||||
// let's not display a trailing '~':
|
// let's not display a trailing FOLDERDELIMCHAR:
|
||||||
if (!NewIndicator)
|
if (!NewIndicator)
|
||||||
stripspace(titleBuffer);
|
stripspace(titleBuffer);
|
||||||
s = &titleBuffer[strlen(titleBuffer) - 1];
|
s = &titleBuffer[strlen(titleBuffer) - 1];
|
||||||
if (*s == '~')
|
if (*s == FOLDERDELIMCHAR)
|
||||||
*s = 0;
|
*s = 0;
|
||||||
}
|
}
|
||||||
else if (Level < HierarchyLevels()) {
|
else if (Level < HierarchyLevels()) {
|
||||||
const char *s = name;
|
const char *s = name;
|
||||||
const char *p = s;
|
const char *p = s;
|
||||||
while (*++s) {
|
while (*++s) {
|
||||||
if (*s == '~') {
|
if (*s == FOLDERDELIMCHAR) {
|
||||||
if (Level--)
|
if (Level--)
|
||||||
p = s + 1;
|
p = s + 1;
|
||||||
else
|
else
|
||||||
@ -911,7 +911,7 @@ int cRecording::HierarchyLevels(void) const
|
|||||||
const char *s = name;
|
const char *s = name;
|
||||||
int level = 0;
|
int level = 0;
|
||||||
while (*++s) {
|
while (*++s) {
|
||||||
if (*s == '~')
|
if (*s == FOLDERDELIMCHAR)
|
||||||
level++;
|
level++;
|
||||||
}
|
}
|
||||||
return level;
|
return level;
|
||||||
@ -919,7 +919,7 @@ int cRecording::HierarchyLevels(void) const
|
|||||||
|
|
||||||
bool cRecording::IsEdited(void) const
|
bool cRecording::IsEdited(void) const
|
||||||
{
|
{
|
||||||
const char *s = strrchr(name, '~');
|
const char *s = strrchr(name, FOLDERDELIMCHAR);
|
||||||
s = !s ? name : s + 1;
|
s = !s ? name : s + 1;
|
||||||
return *s == '%';
|
return *s == '%';
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.h 2.12 2010/01/02 12:10:07 kls Exp $
|
* $Id: recording.h 2.13 2010/01/16 11:16:20 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __RECORDING_H
|
#ifndef __RECORDING_H
|
||||||
@ -18,6 +18,8 @@
|
|||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
|
#define FOLDERDELIMCHAR '~'
|
||||||
|
|
||||||
extern bool VfatFileSystem;
|
extern bool VfatFileSystem;
|
||||||
extern int InstanceId;
|
extern int InstanceId;
|
||||||
|
|
||||||
|
21
remux.c
21
remux.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: remux.c 2.37 2009/12/29 15:56:33 kls Exp $
|
* $Id: remux.c 2.41 2010/01/30 10:43:12 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "remux.h"
|
#include "remux.h"
|
||||||
@ -144,7 +144,7 @@ void TsSetTeiOnBrokenPackets(uchar *p, int l)
|
|||||||
|
|
||||||
// --- cPatPmtGenerator ------------------------------------------------------
|
// --- cPatPmtGenerator ------------------------------------------------------
|
||||||
|
|
||||||
cPatPmtGenerator::cPatPmtGenerator(cChannel *Channel)
|
cPatPmtGenerator::cPatPmtGenerator(const cChannel *Channel)
|
||||||
{
|
{
|
||||||
numPmtPackets = 0;
|
numPmtPackets = 0;
|
||||||
patCounter = pmtCounter = 0;
|
patCounter = pmtCounter = 0;
|
||||||
@ -243,7 +243,7 @@ int cPatPmtGenerator::MakeCRC(uchar *Target, const uchar *Data, int Length)
|
|||||||
#define P_PMT_PID 0x0084 // pseudo PMT pid
|
#define P_PMT_PID 0x0084 // pseudo PMT pid
|
||||||
#define MAXPID 0x2000 // the maximum possible number of pids
|
#define MAXPID 0x2000 // the maximum possible number of pids
|
||||||
|
|
||||||
void cPatPmtGenerator::GeneratePmtPid(cChannel *Channel)
|
void cPatPmtGenerator::GeneratePmtPid(const cChannel *Channel)
|
||||||
{
|
{
|
||||||
bool Used[MAXPID] = { false };
|
bool Used[MAXPID] = { false };
|
||||||
#define SETPID(p) { if ((p) >= 0 && (p) < MAXPID) Used[p] = true; }
|
#define SETPID(p) { if ((p) >= 0 && (p) < MAXPID) Used[p] = true; }
|
||||||
@ -287,7 +287,7 @@ void cPatPmtGenerator::GeneratePat(void)
|
|||||||
IncVersion(patVersion);
|
IncVersion(patVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cPatPmtGenerator::GeneratePmt(cChannel *Channel)
|
void cPatPmtGenerator::GeneratePmt(const cChannel *Channel)
|
||||||
{
|
{
|
||||||
// generate the complete PMT section:
|
// generate the complete PMT section:
|
||||||
uchar buf[MAX_SECTION_SIZE];
|
uchar buf[MAX_SECTION_SIZE];
|
||||||
@ -295,7 +295,7 @@ void cPatPmtGenerator::GeneratePmt(cChannel *Channel)
|
|||||||
numPmtPackets = 0;
|
numPmtPackets = 0;
|
||||||
if (Channel) {
|
if (Channel) {
|
||||||
int Vpid = Channel->Vpid();
|
int Vpid = Channel->Vpid();
|
||||||
int Ppid = 0x1FFF; // no PCR pid
|
int Ppid = Channel->Ppid();
|
||||||
uchar *p = buf;
|
uchar *p = buf;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
p[i++] = 0x02; // table id
|
p[i++] = 0x02; // table id
|
||||||
@ -364,7 +364,7 @@ void cPatPmtGenerator::SetVersions(int PatVersion, int PmtVersion)
|
|||||||
pmtVersion = PmtVersion & 0x1F;
|
pmtVersion = PmtVersion & 0x1F;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cPatPmtGenerator::SetChannel(cChannel *Channel)
|
void cPatPmtGenerator::SetChannel(const cChannel *Channel)
|
||||||
{
|
{
|
||||||
if (Channel) {
|
if (Channel) {
|
||||||
GeneratePmtPid(Channel);
|
GeneratePmtPid(Channel);
|
||||||
@ -402,6 +402,7 @@ void cPatPmtParser::Reset(void)
|
|||||||
patVersion = pmtVersion = -1;
|
patVersion = pmtVersion = -1;
|
||||||
pmtPid = -1;
|
pmtPid = -1;
|
||||||
vpid = vtype = 0;
|
vpid = vtype = 0;
|
||||||
|
ppid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cPatPmtParser::ParsePat(const uchar *Data, int Length)
|
void cPatPmtParser::ParsePat(const uchar *Data, int Length)
|
||||||
@ -486,6 +487,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
int NumDpids = 0;
|
int NumDpids = 0;
|
||||||
int NumSpids = 0;
|
int NumSpids = 0;
|
||||||
vpid = vtype = 0;
|
vpid = vtype = 0;
|
||||||
|
ppid = 0;
|
||||||
apids[0] = 0;
|
apids[0] = 0;
|
||||||
dpids[0] = 0;
|
dpids[0] = 0;
|
||||||
spids[0] = 0;
|
spids[0] = 0;
|
||||||
@ -500,6 +502,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length)
|
|||||||
case 0x1B: // MPEG4
|
case 0x1B: // MPEG4
|
||||||
vpid = stream.getPid();
|
vpid = stream.getPid();
|
||||||
vtype = stream.getStreamType();
|
vtype = stream.getStreamType();
|
||||||
|
ppid = Pmt.getPCRPid();
|
||||||
break;
|
break;
|
||||||
case 0x03: // STREAMTYPE_11172_AUDIO
|
case 0x03: // STREAMTYPE_11172_AUDIO
|
||||||
case 0x04: // STREAMTYPE_13818_AUDIO
|
case 0x04: // STREAMTYPE_13818_AUDIO
|
||||||
@ -842,10 +845,12 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
|
|||||||
// determine frame info:
|
// determine frame info:
|
||||||
if (isVideo) {
|
if (isVideo) {
|
||||||
if (Delta % 3600 == 0)
|
if (Delta % 3600 == 0)
|
||||||
frameDuration = 3600; // PAL, 25 fps
|
frameDuration = 3600; // PAL, 25 fps, exact timing
|
||||||
|
else if (abs(Delta % 3600) == 3599 || abs(Delta % 3600) == 1)
|
||||||
|
frameDuration = 3600; // PAL, 25 fps, timing with jitter
|
||||||
else if (Delta % 3003 == 0)
|
else if (Delta % 3003 == 0)
|
||||||
frameDuration = 3003; // NTSC, 29.97 fps
|
frameDuration = 3003; // NTSC, 29.97 fps
|
||||||
else if (Delta == 1800) {
|
else if (abs(Delta - 1800) <= 1) {
|
||||||
frameDuration = 3600; // PAL, 25 fps
|
frameDuration = 3600; // PAL, 25 fps
|
||||||
framesPerPayloadUnit = -2;
|
framesPerPayloadUnit = -2;
|
||||||
}
|
}
|
||||||
|
14
remux.h
14
remux.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: remux.h 2.23 2009/12/29 15:53:54 kls Exp $
|
* $Id: remux.h 2.24 2010/01/29 16:51:26 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __REMUX_H
|
#ifndef __REMUX_H
|
||||||
@ -172,16 +172,16 @@ protected:
|
|||||||
int MakeSubtitlingDescriptor(uchar *Target, const char *Language, uchar SubtitlingType, uint16_t CompositionPageId, uint16_t AncillaryPageId);
|
int MakeSubtitlingDescriptor(uchar *Target, const char *Language, uchar SubtitlingType, uint16_t CompositionPageId, uint16_t AncillaryPageId);
|
||||||
int MakeLanguageDescriptor(uchar *Target, const char *Language);
|
int MakeLanguageDescriptor(uchar *Target, const char *Language);
|
||||||
int MakeCRC(uchar *Target, const uchar *Data, int Length);
|
int MakeCRC(uchar *Target, const uchar *Data, int Length);
|
||||||
void GeneratePmtPid(cChannel *Channel);
|
void GeneratePmtPid(const cChannel *Channel);
|
||||||
///< Generates a PMT pid that doesn't collide with any of the actual
|
///< Generates a PMT pid that doesn't collide with any of the actual
|
||||||
///< pids of the Channel.
|
///< pids of the Channel.
|
||||||
void GeneratePat(void);
|
void GeneratePat(void);
|
||||||
///< Generates a PAT section for later use with GetPat().
|
///< Generates a PAT section for later use with GetPat().
|
||||||
void GeneratePmt(cChannel *Channel);
|
void GeneratePmt(const cChannel *Channel);
|
||||||
///< Generates a PMT section for the given Channel, for later use
|
///< Generates a PMT section for the given Channel, for later use
|
||||||
///< with GetPmt().
|
///< with GetPmt().
|
||||||
public:
|
public:
|
||||||
cPatPmtGenerator(cChannel *Channel = NULL);
|
cPatPmtGenerator(const cChannel *Channel = NULL);
|
||||||
void SetVersions(int PatVersion, int PmtVersion);
|
void SetVersions(int PatVersion, int PmtVersion);
|
||||||
///< Sets the version numbers for the generated PAT and PMT, in case
|
///< Sets the version numbers for the generated PAT and PMT, in case
|
||||||
///< this generator is used to, e.g., continue a previously interrupted
|
///< this generator is used to, e.g., continue a previously interrupted
|
||||||
@ -191,7 +191,7 @@ public:
|
|||||||
///< higher bits will automatically be cleared.
|
///< higher bits will automatically be cleared.
|
||||||
///< SetVersions() needs to be called before SetChannel() in order to
|
///< SetVersions() needs to be called before SetChannel() in order to
|
||||||
///< have an effect from the very start.
|
///< have an effect from the very start.
|
||||||
void SetChannel(cChannel *Channel);
|
void SetChannel(const cChannel *Channel);
|
||||||
///< Sets the Channel for which the PAT/PMT shall be generated.
|
///< Sets the Channel for which the PAT/PMT shall be generated.
|
||||||
uchar *GetPat(void);
|
uchar *GetPat(void);
|
||||||
///< Returns a pointer to the PAT section, which consists of exactly
|
///< Returns a pointer to the PAT section, which consists of exactly
|
||||||
@ -213,6 +213,7 @@ private:
|
|||||||
int pmtVersion;
|
int pmtVersion;
|
||||||
int pmtPid;
|
int pmtPid;
|
||||||
int vpid;
|
int vpid;
|
||||||
|
int ppid;
|
||||||
int vtype;
|
int vtype;
|
||||||
int apids[MAXAPIDS + 1]; // list is zero-terminated
|
int apids[MAXAPIDS + 1]; // list is zero-terminated
|
||||||
int atypes[MAXAPIDS + 1]; // list is zero-terminated
|
int atypes[MAXAPIDS + 1]; // list is zero-terminated
|
||||||
@ -252,6 +253,9 @@ public:
|
|||||||
int Vpid(void) const { return vpid; }
|
int Vpid(void) const { return vpid; }
|
||||||
///< Returns the video pid as defined by the current PMT, or 0 if no video
|
///< Returns the video pid as defined by the current PMT, or 0 if no video
|
||||||
///< pid has been detected, yet.
|
///< pid has been detected, yet.
|
||||||
|
int Ppid(void) const { return ppid; }
|
||||||
|
///< Returns the PCR pid as defined by the current PMT, or 0 if no PCR
|
||||||
|
///< pid has been detected, yet.
|
||||||
int Vtype(void) const { return vtype; }
|
int Vtype(void) const { return vtype; }
|
||||||
///< Returns the video stream type as defined by the current PMT, or 0 if no video
|
///< Returns the video stream type as defined by the current PMT, or 0 if no video
|
||||||
///< stream type has been detected, yet.
|
///< stream type has been detected, yet.
|
||||||
|
@ -20,10 +20,20 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: runvdr 2.0 2006/05/14 16:02:05 kls Exp $
|
# $Id: runvdr 2.1 2010/01/17 12:39:27 kls Exp $
|
||||||
|
|
||||||
VDRPRG="./vdr"
|
VDRPRG="./vdr"
|
||||||
VDRCMD="$VDRPRG -w 60 $*"
|
|
||||||
|
VDROPTIONS="-w 60"
|
||||||
|
# For other options see manpage vdr.1
|
||||||
|
|
||||||
|
VDRPLUGINS=""
|
||||||
|
# You will need to select your output device plugin if you want
|
||||||
|
# to use VDR to watch video. For instance, for a "Full Featured"
|
||||||
|
# DVB card that would be
|
||||||
|
# VDRPLUGINS="-P dvbsddevice"
|
||||||
|
|
||||||
|
VDRCMD="$VDRPRG $VDROPTIONS $VDRPLUGINS $*"
|
||||||
|
|
||||||
KILL="/usr/bin/killall -q -TERM"
|
KILL="/usr/bin/killall -q -TERM"
|
||||||
|
|
4
svdrp.c
4
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* graphical interface that sits on top of an SVDRP connection.
|
||||||
*
|
*
|
||||||
* $Id: svdrp.c 2.7 2010/01/03 15:41:26 kls Exp $
|
* $Id: svdrp.c 2.8 2010/01/17 12:23:31 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -79,7 +79,7 @@ bool cSocket::Open(void)
|
|||||||
struct sockaddr_in name;
|
struct sockaddr_in name;
|
||||||
name.sin_family = AF_INET;
|
name.sin_family = AF_INET;
|
||||||
name.sin_port = htons(port);
|
name.sin_port = htons(port);
|
||||||
name.sin_addr.s_addr = htonl(INADDR_ANY);
|
name.sin_addr.s_addr = SVDRPhosts.LocalhostOnly() ? htonl(INADDR_LOOPBACK) : htonl(INADDR_ANY);
|
||||||
if (bind(sock, (struct sockaddr *)&name, sizeof(name)) < 0) {
|
if (bind(sock, (struct sockaddr *)&name, sizeof(name)) < 0) {
|
||||||
LOG_ERROR;
|
LOG_ERROR;
|
||||||
Close();
|
Close();
|
||||||
|
4
timers.c
4
timers.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: timers.c 2.3 2009/08/09 12:43:20 kls Exp $
|
* $Id: timers.c 2.4 2010/01/16 11:18:53 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
@ -301,7 +301,7 @@ bool cTimer::Parse(const char *s)
|
|||||||
//TODO add more plausibility checks
|
//TODO add more plausibility checks
|
||||||
result = ParseDay(daybuffer, day, weekdays);
|
result = ParseDay(daybuffer, day, weekdays);
|
||||||
if (VfatFileSystem) {
|
if (VfatFileSystem) {
|
||||||
char *p = strrchr(filebuffer, '~');
|
char *p = strrchr(filebuffer, FOLDERDELIMCHAR);
|
||||||
if (p)
|
if (p)
|
||||||
p++;
|
p++;
|
||||||
else
|
else
|
||||||
|
12
transfer.c
12
transfer.c
@ -4,17 +4,17 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: transfer.c 2.4 2009/12/06 14:22:23 kls Exp $
|
* $Id: transfer.c 2.5 2010/01/30 11:10:25 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "transfer.h"
|
#include "transfer.h"
|
||||||
|
|
||||||
// --- cTransfer -------------------------------------------------------------
|
// --- cTransfer -------------------------------------------------------------
|
||||||
|
|
||||||
cTransfer::cTransfer(tChannelID ChannelID, int VPid, const int *APids, const int *DPids, const int *SPids)
|
cTransfer::cTransfer(const cChannel *Channel)
|
||||||
:cReceiver(ChannelID, -1, VPid, APids, Setup.UseDolbyDigital ? DPids : NULL, SPids)
|
:cReceiver(Channel)
|
||||||
{
|
{
|
||||||
patPmtGenerator.SetChannel(Channels.GetByChannelID(ChannelID));
|
patPmtGenerator.SetChannel(Channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
cTransfer::~cTransfer()
|
cTransfer::~cTransfer()
|
||||||
@ -55,8 +55,8 @@ void cTransfer::Receive(uchar *Data, int Length)
|
|||||||
|
|
||||||
cDevice *cTransferControl::receiverDevice = NULL;
|
cDevice *cTransferControl::receiverDevice = NULL;
|
||||||
|
|
||||||
cTransferControl::cTransferControl(cDevice *ReceiverDevice, tChannelID ChannelID, int VPid, const int *APids, const int *DPids, const int *SPids)
|
cTransferControl::cTransferControl(cDevice *ReceiverDevice, const cChannel *Channel)
|
||||||
:cControl(transfer = new cTransfer(ChannelID, VPid, APids, DPids, SPids), true)
|
:cControl(transfer = new cTransfer(Channel), true)
|
||||||
{
|
{
|
||||||
ReceiverDevice->AttachReceiver(transfer);
|
ReceiverDevice->AttachReceiver(transfer);
|
||||||
receiverDevice = ReceiverDevice;
|
receiverDevice = ReceiverDevice;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: transfer.h 2.1 2008/05/25 12:44:49 kls Exp $
|
* $Id: transfer.h 2.2 2010/01/29 16:38:09 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TRANSFER_H
|
#ifndef __TRANSFER_H
|
||||||
@ -21,7 +21,7 @@ protected:
|
|||||||
virtual void Activate(bool On);
|
virtual void Activate(bool On);
|
||||||
virtual void Receive(uchar *Data, int Length);
|
virtual void Receive(uchar *Data, int Length);
|
||||||
public:
|
public:
|
||||||
cTransfer(tChannelID ChannelID, int VPid, const int *APids, const int *DPids, const int *SPids);
|
cTransfer(const cChannel *Channel);
|
||||||
virtual ~cTransfer();
|
virtual ~cTransfer();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ private:
|
|||||||
cTransfer *transfer;
|
cTransfer *transfer;
|
||||||
static cDevice *receiverDevice;
|
static cDevice *receiverDevice;
|
||||||
public:
|
public:
|
||||||
cTransferControl(cDevice *ReceiverDevice, tChannelID ChannelID, int VPid, const int *APids, const int *DPids, const int *SPids);
|
cTransferControl(cDevice *ReceiverDevice, const cChannel *Channel);
|
||||||
~cTransferControl();
|
~cTransferControl();
|
||||||
virtual void Hide(void) {}
|
virtual void Hide(void) {}
|
||||||
static cDevice *ReceiverDevice(void) { return receiverDevice; }
|
static cDevice *ReceiverDevice(void) { return receiverDevice; }
|
||||||
|
60
vdr.5
60
vdr.5
@ -8,7 +8,7 @@
|
|||||||
.\" License as specified in the file COPYING that comes with the
|
.\" License as specified in the file COPYING that comes with the
|
||||||
.\" vdr distribution.
|
.\" vdr distribution.
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: vdr.5 2.11 2010/01/03 13:37:07 kls Exp $
|
.\" $Id: vdr.5 2.13 2010/01/31 12:59:50 kls Exp $
|
||||||
.\"
|
.\"
|
||||||
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
|
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
@ -489,6 +489,46 @@ Note that the color keys will only execute their macro function
|
|||||||
in "normal viewing" mode (i.e. when no other menu or player is active). The
|
in "normal viewing" mode (i.e. when no other menu or player is active). The
|
||||||
\fIUser1\fR...\fIUser9\fR keys will always execute their macro function.
|
\fIUser1\fR...\fIUser9\fR keys will always execute their macro function.
|
||||||
There may be up to 15 keys in such a key sequence.
|
There may be up to 15 keys in such a key sequence.
|
||||||
|
.SS FOLDERS
|
||||||
|
The file \fIfolders.conf\fR contains the definitions of folders that can be used
|
||||||
|
in the "Edit timer" menu. Each line contains one folder definition. Leading whitespace
|
||||||
|
and everything after and including a '#' is ignored. A line ending with '{'
|
||||||
|
defines a sub folder (i.e. a folder that contains other folders), and a line
|
||||||
|
consisting of only '}' ends the definition of a sub folder.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
Daily {
|
||||||
|
.br
|
||||||
|
News
|
||||||
|
.br
|
||||||
|
Soaps
|
||||||
|
.br
|
||||||
|
}
|
||||||
|
.br
|
||||||
|
Archive {
|
||||||
|
.br
|
||||||
|
Movies
|
||||||
|
.br
|
||||||
|
Sports
|
||||||
|
.br
|
||||||
|
Sci-Fi {
|
||||||
|
.br
|
||||||
|
Star Trek
|
||||||
|
.br
|
||||||
|
U.F.O.
|
||||||
|
.br
|
||||||
|
}
|
||||||
|
.br
|
||||||
|
}
|
||||||
|
.br
|
||||||
|
Comedy
|
||||||
|
.br
|
||||||
|
Science
|
||||||
|
|
||||||
|
Note that these folder definitions are only used to set the file name under which
|
||||||
|
a timer will store its recording. Changing these definitions in any way has no
|
||||||
|
effect on existing timers or recordings.
|
||||||
.SS COMMANDS
|
.SS COMMANDS
|
||||||
The file \fIcommands.conf\fR contains the definitions of commands that can
|
The file \fIcommands.conf\fR contains the definitions of commands that can
|
||||||
be executed from the \fBvdr\fR main menu's "Commands" option.
|
be executed from the \fBvdr\fR main menu's "Commands" option.
|
||||||
@ -506,6 +546,24 @@ to make sure they are not executed inadvertently.
|
|||||||
|
|
||||||
Everything following (and including) a '#' character is considered to be comment.
|
Everything following (and including) a '#' character is considered to be comment.
|
||||||
|
|
||||||
|
You can have nested layers of command menus by surrounding a sequence of
|
||||||
|
commands with '{'...'}' and giving it a title, as in
|
||||||
|
|
||||||
|
My Commands {
|
||||||
|
.br
|
||||||
|
First list {
|
||||||
|
Do something: some command
|
||||||
|
Do something else: another command
|
||||||
|
}
|
||||||
|
Second list {
|
||||||
|
Even more: yet another command
|
||||||
|
So much more: and yet another one
|
||||||
|
}
|
||||||
|
.br
|
||||||
|
}
|
||||||
|
|
||||||
|
Command lists can be nested to any depth.
|
||||||
|
|
||||||
By default the menu entries in the "Commands" menu will be numbered '1'...'9'
|
By default the menu entries in the "Commands" menu will be numbered '1'...'9'
|
||||||
to make them selectable by pressing the corresponding number key. If you want
|
to make them selectable by pressing the corresponding number key. If you want
|
||||||
to use your own numbering scheme (maybe to skip certain numbers), just precede
|
to use your own numbering scheme (maybe to skip certain numbers), just precede
|
||||||
|
7
vdr.c
7
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.tvdr.de
|
* The project's page is at http://www.tvdr.de
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 2.14 2010/01/02 11:52:40 kls Exp $
|
* $Id: vdr.c 2.16 2010/01/31 11:14:40 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -582,11 +582,12 @@ int main(int argc, char *argv[])
|
|||||||
Diseqcs.Load(AddDirectory(ConfigDirectory, "diseqc.conf"), true, Setup.DiSEqC);
|
Diseqcs.Load(AddDirectory(ConfigDirectory, "diseqc.conf"), true, Setup.DiSEqC);
|
||||||
Channels.Load(AddDirectory(ConfigDirectory, "channels.conf"), false, true);
|
Channels.Load(AddDirectory(ConfigDirectory, "channels.conf"), false, true);
|
||||||
Timers.Load(AddDirectory(ConfigDirectory, "timers.conf"));
|
Timers.Load(AddDirectory(ConfigDirectory, "timers.conf"));
|
||||||
Commands.Load(AddDirectory(ConfigDirectory, "commands.conf"), true);
|
Commands.Load(AddDirectory(ConfigDirectory, "commands.conf"));
|
||||||
RecordingCommands.Load(AddDirectory(ConfigDirectory, "reccmds.conf"), true);
|
RecordingCommands.Load(AddDirectory(ConfigDirectory, "reccmds.conf"));
|
||||||
SVDRPhosts.Load(AddDirectory(ConfigDirectory, "svdrphosts.conf"), true);
|
SVDRPhosts.Load(AddDirectory(ConfigDirectory, "svdrphosts.conf"), true);
|
||||||
Keys.Load(AddDirectory(ConfigDirectory, "remote.conf"));
|
Keys.Load(AddDirectory(ConfigDirectory, "remote.conf"));
|
||||||
KeyMacros.Load(AddDirectory(ConfigDirectory, "keymacros.conf"), true);
|
KeyMacros.Load(AddDirectory(ConfigDirectory, "keymacros.conf"), true);
|
||||||
|
Folders.Load(AddDirectory(ConfigDirectory, "folders.conf"));
|
||||||
|
|
||||||
if (!*cFont::GetFontFileName(Setup.FontOsd)) {
|
if (!*cFont::GetFontFileName(Setup.FontOsd)) {
|
||||||
const char *msg = "no fonts available - OSD will not show any text!";
|
const char *msg = "no fonts available - OSD will not show any text!";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user