1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

The "Edit timer" menu can now set the folder for the recording from a list of folders stored in "folders.conf"

This commit is contained in:
Klaus Schmidinger 2010-01-17 12:08:03 +01:00
parent 61c1df7004
commit a503c6ab3f
38 changed files with 1385 additions and 55 deletions

View File

@ -6276,7 +6276,9 @@ Video Disk Recorder Revision History
- Fixed plugin arguments corruption with glibc 2.11 on x86_64 (thanks to
Anssi Hannula).
2010-01-10: Version 1.7.12
2010-01-17: 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".

17
MANUAL
View File

@ -474,6 +474,23 @@ Version 1.6
A timer can also be programmed by pressing the "Red" key on the "Schedule",
"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
Select "Setup" from the "VDR" menu to enter the setup menu. From there you can

146
config.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 2.6 2009/12/05 15:30:30 kls Exp $
* $Id: config.c 2.7 2010/01/16 14:27:29 kls Exp $
*/
#include "config.h"
@ -123,6 +123,150 @@ bool cSVDRPhost::Accepts(in_addr_t Address)
return (Address & mask) == (addr.s_addr & mask);
}
// --- cNestedItem -----------------------------------------------------------
cNestedItem::cNestedItem(const char *Text, bool WithSubItems)
{
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)) {
if ((p = strchr(s, '{')) != NULL) {
*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;
}
cNestedItemList Folders;
// --- cCommands -------------------------------------------------------------
cCommands Commands;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 2.17 2010/01/08 15:21:44 kls Exp $
* $Id: config.h 2.18 2010/01/16 13:33:10 kls Exp $
*/
#ifndef __CONFIG_H
@ -158,6 +158,34 @@ public:
}
};
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 cCommands : public cConfig<cCommand> {};
class cSVDRPhosts : public cConfig<cSVDRPhost> {
@ -165,6 +193,7 @@ public:
bool Acceptable(in_addr_t Address);
};
extern cNestedItemList Folders;
extern cCommands Commands;
extern cCommands RecordingCommands;
extern cSVDRPhosts SVDRPhosts;

301
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 2.10 2009/12/06 11:29:05 kls Exp $
* $Id: menu.c 2.11 2010/01/17 12:08:03 kls Exp $
*/
#include "menu.h"
@ -623,11 +623,276 @@ eOSState cMenuText::ProcessKey(eKeys Key)
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(cTimer *Timer, bool New)
:cOsdMenu(tr("Edit timer"), 12)
{
file = NULL;
firstday = NULL;
timer = Timer;
addIfConfirmed = New;
@ -644,9 +909,10 @@ cMenuEditTimer::cMenuEditTimer(cTimer *Timer, bool New)
Add(new cMenuEditBitItem( tr("VPS"), &data.flags, tfVps));
Add(new cMenuEditIntItem( tr("Priority"), &data.priority, 0, MAXPRIORITY));
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();
}
SetHelpKeys();
Timers.IncBeingEdited();
}
@ -657,6 +923,11 @@ cMenuEditTimer::~cMenuEditTimer()
Timers.DecBeingEdited();
}
void cMenuEditTimer::SetHelpKeys(void)
{
SetHelp(tr("Button$Folder"));
}
void cMenuEditTimer::SetFirstDayItem(void)
{
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 state = cOsdMenu::ProcessKey(Key);
@ -699,13 +990,15 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key)
}
}
return osBack;
case kRed:
case kRed: return AddSubMenu(new cMenuFolder(tr("Select folder"), &Folders, data.file));
case kGreen:
case kYellow:
case kBlue: return osContinue;
default: break;
}
}
else if (state == osEnd && HasSubMenu())
state = SetFolder();
if (Key != kNone)
SetFirstDayItem();
return state;
@ -1921,7 +2214,7 @@ void cMenuRecordings::Set(bool Refresh)
Clear();
Recordings.Sort();
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);
if (*Item->Text() && (!LastItem || strcmp(Item->Text(), LastItemText) != 0)) {
Add(Item);

27
menu.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.h 1.91 2008/02/10 16:01:53 kls Exp $
* $Id: menu.h 2.1 2010/01/17 11:21:42 kls Exp $
*/
#ifndef __MENU_H
@ -31,14 +31,39 @@ public:
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 {
private:
cTimer *timer;
cTimer data;
int channel;
bool addIfConfirmed;
cMenuEditStrItem *file;
cMenuEditDateItem *firstday;
eOSState SetFolder(void);
void SetFirstDayItem(void);
void SetHelpKeys(void);
public:
cMenuEditTimer(cTimer *Timer, bool New = false);
virtual ~cMenuEditTimer();

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* 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"
@ -41,7 +41,7 @@ cOsdItem::~cOsdItem()
void cOsdItem::SetText(const char *Text, bool Copy)
{
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)

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: osdbase.h 1.17 2007/11/03 14:50:52 kls Exp $
* $Id: osdbase.h 2.1 2010/01/16 14:25:31 kls Exp $
*/
#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 SetHasHotkeys(bool HasHotkeys = true);
virtual void Clear(void);
const char *Title(void) { return title; }
bool SelectableItem(int idx);
void SetCurrent(cOsdItem *Item);
void RefreshCurrent(void);
@ -116,6 +117,7 @@ protected:
eOSState AddSubMenu(cOsdMenu *SubMenu);
eOSState CloseSubMenu();
bool HasSubMenu(void) { return subMenu; }
cOsdMenu *SubMenu(void) { return subMenu; }
void SetStatus(const char *s);
void SetTitle(const char *Title);
void SetHelp(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);

View File

@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Catalanian\n"
@ -586,6 +586,31 @@ msgstr "Canal en
msgid "Delete channel?"
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"
msgstr "Editar temporitzador"
@ -616,9 +641,15 @@ msgstr "Durada"
msgid "File"
msgstr "Arxiu"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Primer dia"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Temporitzadors"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\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"
"Language-Team: Czech\n"
@ -584,6 +584,31 @@ msgstr "Kan
msgid "Delete channel?"
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"
msgstr "Editace èasovaèe"
@ -614,9 +639,15 @@ msgstr "
msgid "File"
msgstr "Soubor"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "První den"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Èasovaèe"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish\n"
@ -583,6 +583,31 @@ msgstr "Kanal anvendes af en timer!"
msgid "Delete channel?"
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"
msgstr "Rediger timer"
@ -613,9 +638,15 @@ msgstr "Levetid"
msgid "File"
msgstr "Fil"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Første dag"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Timere"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2010-01-03 15:10+0100\n"
"PO-Revision-Date: 2007-11-25 15:19+0200\n"
"POT-Creation-Date: 2010-01-17 13:05+0100\n"
"PO-Revision-Date: 2010-01-16 16:46+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
@ -583,6 +583,31 @@ msgstr "Kanal wird von einem Timer benutzt!"
msgid "Delete channel?"
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"
msgstr "Timer editieren"
@ -613,9 +638,15 @@ msgstr "Lebensdauer"
msgid "File"
msgstr "Datei"
msgid "Button$Folder"
msgstr "Verzeichnis"
msgid "First day"
msgstr "Erster Tag"
msgid "Select folder"
msgstr "Verzeichnis wählen"
msgid "Timers"
msgstr "Timer"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek\n"
@ -583,6 +583,31 @@ msgstr "
msgid "Delete channel?"
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"
msgstr "Ôñïðïðïßçóç ÷ñïíïðñïãñáììáôéóìïý"
@ -613,9 +638,15 @@ msgstr "
msgid "File"
msgstr "Áñ÷åßï"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Ðñþôç ìÝñá"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "×ñïíïðñïãñáììáôéóìïß"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Spanish\n"
@ -584,6 +584,31 @@ msgstr "
msgid "Delete channel?"
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"
msgstr "Modificar programación"
@ -614,9 +639,15 @@ msgstr "Duraci
msgid "File"
msgstr "Fichero"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Primer día"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Programar grabaciones"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian\n"
@ -583,6 +583,31 @@ msgstr "Kanal on taimeri kasutuses!"
msgid "Delete channel?"
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"
msgstr "Taimeri redigeerimine"
@ -613,9 +638,15 @@ msgstr "Eluiga"
msgid "File"
msgstr "Fail"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Esimene päev"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Taimer"

View File

@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish\n"
@ -586,6 +586,31 @@ msgstr "Kanava on ajastimen k
msgid "Delete channel?"
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"
msgstr "Muokkaa ajastinta"
@ -616,9 +641,15 @@ msgstr "Elinik
msgid "File"
msgstr "Tiedosto"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "1. päivä"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Ajastimet"

View File

@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
"Language-Team: French\n"
@ -589,6 +589,31 @@ msgstr "Cette cha
msgid "Delete channel?"
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"
msgstr "Changer la programmation"
@ -619,9 +644,15 @@ msgstr "Dur
msgid "File"
msgstr "Fichier"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Premier jour"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Programmation"

View File

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian\n"
@ -585,6 +585,31 @@ msgstr "Program je trenutno zauzet tajmerom!"
msgid "Delete channel?"
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"
msgstr "Ureðivanje tajmera"
@ -615,9 +640,15 @@ msgstr "Trajanje"
msgid "File"
msgstr "Datoteka"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Prvi dan"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Tajmeri"

View File

@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2007-12-01 21:42+0200\n"
"Last-Translator: István Füley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian\n"
@ -586,6 +586,31 @@ msgstr "Az ad
msgid "Delete channel?"
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"
msgstr "Idõzítõ megváltoztatása"
@ -616,9 +641,15 @@ msgstr "
msgid "File"
msgstr "File"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Elsõ nap"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Idõzítõ"

View File

@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2009-11-28 22:50+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian\n"
@ -590,6 +590,31 @@ msgstr "Canale occupato da un timer!"
msgid "Delete channel?"
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"
msgstr "Modifica timer"
@ -620,9 +645,15 @@ msgstr "Scadenza"
msgid "File"
msgstr "Nome"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "1° giorno"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Timer"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.9\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 13:05+0100\n"
"PO-Revision-Date: 2009-10-17 14:19+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian\n"
@ -583,6 +583,31 @@ msgstr "Kanalą šiuo metu naudoja laikmačio procesas!"
msgid "Delete channel?"
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"
msgstr "Koreguoti laikmatį"
@ -613,9 +638,15 @@ msgstr "Galiojimas"
msgid "File"
msgstr "Failas"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Pirma diena"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Laikmačiai"

View File

@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
"Language-Team: Dutch\n"
@ -587,6 +587,31 @@ msgstr "Kanaal wordt gebruikt door een timer!"
msgid "Delete channel?"
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"
msgstr "Timer veranderen"
@ -617,9 +642,15 @@ msgstr "Bewaarduur"
msgid "File"
msgstr "Bestandnaam"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Eerste dag"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Timers"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian\n"
@ -584,6 +584,31 @@ msgstr "Kanalen er i bruk av en timer!"
msgid "Delete channel?"
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"
msgstr "Editer timer"
@ -614,9 +639,15 @@ msgstr "Levetid"
msgid "File"
msgstr "Filnavn"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Første dag"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Timere"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish\n"
@ -584,6 +584,31 @@ msgstr "Kana
msgid "Delete channel?"
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"
msgstr "Edycja timera"
@ -614,9 +639,15 @@ msgstr "Czas
msgid "File"
msgstr "Plik"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Pierwszy dzieñ"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Timery"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-03-18 17:04+0100\n"
"Last-Translator: anonymous\n"
"Language-Team: Portuguese\n"
@ -583,6 +583,31 @@ msgstr "Canal a ser utilizador por uma grava
msgid "Delete channel?"
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"
msgstr "Editar gavação programada"
@ -613,9 +638,15 @@ msgstr "Dura
msgid "File"
msgstr "Ficheiro"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Primeiro dia"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Gravações programadas"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-02-25 00:39+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian\n"
@ -586,6 +586,31 @@ msgstr "Canalul este utilizat de un timer!"
msgid "Delete channel?"
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"
msgstr "Modificare timer"
@ -616,9 +641,15 @@ msgstr "Timp de p
msgid "File"
msgstr "Fiºier"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Prima zi"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Timer-e"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: Russian\n"
@ -584,6 +584,31 @@ msgstr "
msgid "Delete channel?"
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"
msgstr "ÃáâÐÝÞÒÚÐ âÐÙÜÕàÐ"
@ -614,9 +639,15 @@ msgstr "
msgid "File"
msgstr "ÄÐÙÛ"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "¿ÕàÒëÙ ÔÕÝì"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "ÂÐÙÜÕàë"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2009-09-30 12:50+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak\n"
@ -584,6 +584,31 @@ msgstr "Pl
msgid "Delete channel?"
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"
msgstr "Úprava plánu nahrávania"
@ -614,9 +639,15 @@ msgstr "
msgid "File"
msgstr "Súbor"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Prvý deò"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Plány nahrávania"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian\n"
@ -584,6 +584,31 @@ msgstr "Kanal je zavzet s terminom za snemanje!"
msgid "Delete channel?"
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"
msgstr "Uredi termin"
@ -614,9 +639,15 @@ msgstr "Veljavnost"
msgid "File"
msgstr "Datoteka"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Prvi dan"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Termini"

View File

@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
"Language-Team: Swedish\n"
@ -586,6 +586,31 @@ msgstr "Kanalen anv
msgid "Delete channel?"
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"
msgstr "Ändra timer"
@ -616,9 +641,15 @@ msgstr "Livstid"
msgid "File"
msgstr "Filnamn"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Första dag"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Timers"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish\n"
@ -583,6 +583,31 @@ msgstr "Kanal zamanlay
msgid "Delete channel?"
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"
msgstr "Zamanlayýcýyý ayarla"
@ -613,9 +638,15 @@ msgstr "
msgid "File"
msgstr "Kütük"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Ýlk gün"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Zamanlayýcý"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.7\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 13:05+0100\n"
"PO-Revision-Date: 2009-05-31 13:17+0200\n"
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
"Language-Team: Ukrainian\n"
@ -583,6 +583,31 @@ msgstr "Канал зайнятий таймером!"
msgid "Delete channel?"
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"
msgstr "Налаштування таймера"
@ -613,9 +638,15 @@ msgstr "Строк зберігання"
msgid "File"
msgstr "Файл"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "Перший день"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "Таймери"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\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 13:05+0100\n"
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
"Language-Team: Chinese\n"
@ -586,6 +586,31 @@ msgstr "频道正在录像!"
msgid "Delete channel?"
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"
msgstr "编辑计时器"
@ -616,9 +641,15 @@ msgstr "终生"
msgid "File"
msgstr "文件"
msgid "Button$Folder"
msgstr ""
msgid "First day"
msgstr "第一天"
msgid "Select folder"
msgstr ""
msgid "Timers"
msgstr "录像中列表"

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* 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"
@ -524,8 +524,8 @@ bool cRecordingInfo::Write(void) const
struct tCharExchange { char a; char b; };
tCharExchange CharExchange[] = {
{ '~', '/' },
{ '/', '~' },
{ FOLDERDELIMCHAR, '/' },
{ '/', FOLDERDELIMCHAR },
{ ' ', '_' },
// backwards compatibility:
{ '\'', '\'' },
@ -546,10 +546,10 @@ char *ExchangeChars(char *s, bool ToFileSystem)
switch (*p) {
// characters that can be mapped to other characters:
case ' ': *p = '_'; break;
case '~': *p = '/'; break;
case FOLDERDELIMCHAR: *p = '/'; break;
// characters that have to be encoded:
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;
s = (char *)realloc(s, strlen(s) + 10);
p = s + l;
@ -565,7 +565,7 @@ char *ExchangeChars(char *s, bool ToFileSystem)
switch (*p) {
// mapped characters:
case '_': *p = ' '; break;
case '/': *p = '~'; break;
case '/': *p = FOLDERDELIMCHAR; break;
// encoded characters:
case '#': {
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:
int l = strlen(name);
while (l-- > 2) {
if (name[l] == ' ' && name[l - 1] != '~')
if (name[l] == ' ' && name[l - 1] != FOLDERDELIMCHAR)
name[l] = 0;
else
break;
@ -853,7 +853,7 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
struct tm tm_r;
struct tm *t = localtime_r(&start, &tm_r);
char *s;
if (Level > 0 && (s = strrchr(name, '~')) != NULL)
if (Level > 0 && (s = strrchr(name, FOLDERDELIMCHAR)) != NULL)
s++;
else
s = name;
@ -867,18 +867,18 @@ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) cons
New,
Delimiter,
s));
// let's not display a trailing '~':
// let's not display a trailing FOLDERDELIMCHAR:
if (!NewIndicator)
stripspace(titleBuffer);
s = &titleBuffer[strlen(titleBuffer) - 1];
if (*s == '~')
if (*s == FOLDERDELIMCHAR)
*s = 0;
}
else if (Level < HierarchyLevels()) {
const char *s = name;
const char *p = s;
while (*++s) {
if (*s == '~') {
if (*s == FOLDERDELIMCHAR) {
if (Level--)
p = s + 1;
else
@ -911,7 +911,7 @@ int cRecording::HierarchyLevels(void) const
const char *s = name;
int level = 0;
while (*++s) {
if (*s == '~')
if (*s == FOLDERDELIMCHAR)
level++;
}
return level;
@ -919,7 +919,7 @@ int cRecording::HierarchyLevels(void) const
bool cRecording::IsEdited(void) const
{
const char *s = strrchr(name, '~');
const char *s = strrchr(name, FOLDERDELIMCHAR);
s = !s ? name : s + 1;
return *s == '%';
}

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* 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
@ -18,6 +18,8 @@
#include "timers.h"
#include "tools.h"
#define FOLDERDELIMCHAR '~'
extern bool VfatFileSystem;
extern int InstanceId;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* 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"
@ -301,7 +301,7 @@ bool cTimer::Parse(const char *s)
//TODO add more plausibility checks
result = ParseDay(daybuffer, day, weekdays);
if (VfatFileSystem) {
char *p = strrchr(filebuffer, '~');
char *p = strrchr(filebuffer, FOLDERDELIMCHAR);
if (p)
p++;
else

42
vdr.5
View File

@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
.\" $Id: vdr.5 2.11 2010/01/03 13:37:07 kls Exp $
.\" $Id: vdr.5 2.12 2010/01/16 15:45:28 kls Exp $
.\"
.TH vdr 5 "10 Feb 2008" "1.6" "Video Disk Recorder Files"
.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
\fIUser1\fR...\fIUser9\fR keys will always execute their macro function.
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
The file \fIcommands.conf\fR contains the definitions of commands that can
be executed from the \fBvdr\fR main menu's "Commands" option.

3
vdr.c
View File

@ -22,7 +22,7 @@
*
* 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.15 2010/01/16 15:11:13 kls Exp $
*/
#include <getopt.h>
@ -587,6 +587,7 @@ int main(int argc, char *argv[])
SVDRPhosts.Load(AddDirectory(ConfigDirectory, "svdrphosts.conf"), true);
Keys.Load(AddDirectory(ConfigDirectory, "remote.conf"));
KeyMacros.Load(AddDirectory(ConfigDirectory, "keymacros.conf"), true);
Folders.Load(AddDirectory(ConfigDirectory, "folders.conf"));
if (!*cFont::GetFontFileName(Setup.FontOsd)) {
const char *msg = "no fonts available - OSD will not show any text!";