diff --git a/HISTORY b/HISTORY index 25096a7e..d6b0d109 100644 --- a/HISTORY +++ b/HISTORY @@ -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". diff --git a/MANUAL b/MANUAL index 7382a8de..8cf7639c 100644 --- a/MANUAL +++ b/MANUAL @@ -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 diff --git a/config.c b/config.c index 61de0f53..1605902d 100644 --- a/config.c +++ b/config.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.c 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 : 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; + 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; + else if (!On && subItems) { + delete subItems; + subItems = NULL; + } +} + +// --- cNestedItemList ------------------------------------------------------- + +cNestedItemList::cNestedItemList(void) +{ + fileName = NULL; +} + +cNestedItemList::~cNestedItemList() +{ + free(fileName); +} + +bool cNestedItemList::Parse(FILE *f, cList *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 *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::Clear(); +} + +bool cNestedItemList::Load(const char *FileName) +{ + cList::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; diff --git a/config.h b/config.h index 547b49ba..651e9ae7 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 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 *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 *SubItems(void) { return subItems; } + void AddSubItem(cNestedItem *Item); + void SetText(const char *Text); + void SetSubItems(bool On); + }; + +class cNestedItemList : public cList { +private: + char *fileName; + bool Parse(FILE *f, cList *List, int &Line); + bool Write(FILE *f, cList *List, int Indent = 0); +public: + cNestedItemList(void); + virtual ~cNestedItemList(); + void Clear(void); + bool Load(const char *FileName); + bool Save(void); + }; + class cCommands : public cConfig {}; class cSVDRPhosts : public cConfig { @@ -165,6 +193,7 @@ public: bool Acceptable(in_addr_t Address); }; +extern cNestedItemList Folders; extern cCommands Commands; extern cCommands RecordingCommands; extern cSVDRPhosts SVDRPhosts; diff --git a/menu.c b/menu.c index b0077a0d..f37ee25e 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 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 *list; + cNestedItem *folder; + char name[PATH_MAX]; + int subFolder; + eOSState Confirm(void); +public: + cMenuEditFolder(const char *Dir, cList *List, cNestedItem *Folder = NULL); + cString GetFolder(void); + virtual eOSState ProcessKey(eKeys Key); + }; + +cMenuEditFolder::cMenuEditFolder(const char *Dir, cList *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 *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); diff --git a/menu.h b/menu.h index 1d478d9b..d428a8dd 100644 --- a/menu.h +++ b/menu.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.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 *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 *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(); diff --git a/osdbase.c b/osdbase.c index 9b59c050..0cdedb23 100644 --- a/osdbase.c +++ b/osdbase.c @@ -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) diff --git a/osdbase.h b/osdbase.h index b62b071b..91c5ff73 100644 --- a/osdbase.h +++ b/osdbase.h @@ -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); diff --git a/po/ca_ES.po b/po/ca_ES.po index 14f3c218..ff78d0e4 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 6394008e..25efb50f 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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: Vladimr Brta , Ji Dobr \n" "Language-Team: Czech\n" @@ -584,6 +584,31 @@ msgstr "Kan msgid "Delete channel?" msgstr "Smazat kanl?" +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 asovae" @@ -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 "asovae" diff --git a/po/da_DK.po b/po/da_DK.po index faa3632d..41ca40f0 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "Frste dag" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Timere" diff --git a/po/de_DE.po b/po/de_DE.po index ff25a334..480ff610 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 lschen?" +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 "Auswhlen" + +msgid "Delete folder and all sub folders?" +msgstr "Verzeichnis und alle Unterverzeichnisse lschen?" + +msgid "Delete folder?" +msgstr "Verzeichnis lschen?" + 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 whlen" + msgid "Timers" msgstr "Timer" diff --git a/po/el_GR.po b/po/el_GR.po index 2c310abc..ff04e274 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "" diff --git a/po/es_ES.po b/po/es_ES.po index 6cb029ca..bb57d3f7 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 programacin" @@ -614,9 +639,15 @@ msgstr "Duraci msgid "File" msgstr "Fichero" +msgid "Button$Folder" +msgstr "" + msgid "First day" msgstr "Primer da" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Programar grabaciones" diff --git a/po/et_EE.po b/po/et_EE.po index 1a0a8f11..37d42fae 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 pev" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Taimer" diff --git a/po/fi_FI.po b/po/fi_FI.po index 410bd67f..012e2f38 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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. piv" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Ajastimet" diff --git a/po/fr_FR.po b/po/fr_FR.po index 9f2768a8..25d13e19 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \n" "Language-Team: French\n" @@ -589,6 +589,31 @@ msgstr "Cette cha msgid "Delete channel?" msgstr "Supprimer la chane ?" +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" diff --git a/po/hr_HR.po b/po/hr_HR.po index 7d923afe..74cd6397 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "Ureivanje 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" diff --git a/po/hu_HU.po b/po/hu_HU.po index 1517920e..5238da22 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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: Istvn Fley \n" "Language-Team: Hungarian\n" @@ -586,6 +586,31 @@ msgstr "Az ad msgid "Delete channel?" msgstr "Csatorna trlse?" +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 "Idzt megvltoztatsa" @@ -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 "Idzt" diff --git a/po/it_IT.po b/po/it_IT.po index 1a403add..625f9d8e 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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" diff --git a/po/lt_LT.po b/po/lt_LT.po index dd367546..19075d7e 100644 --- a/po/lt_LT.po +++ b/po/lt_LT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.9\n" "Report-Msgid-Bugs-To: \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 \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" diff --git a/po/nl_NL.po b/po/nl_NL.po index 3634438f..1bb8b50d 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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" diff --git a/po/nn_NO.po b/po/nn_NO.po index 56975a56..99950ea7 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "Frste dag" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Timere" diff --git a/po/pl_PL.po b/po/pl_PL.po index 0143db86..b22a508a 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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" diff --git a/po/pt_PT.po b/po/pt_PT.po index e863f8c7..07163ec5 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 gavao 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 "Gravaes programadas" diff --git a/po/ro_RO.po b/po/ro_RO.po index 79a2690f..43ab3ad3 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "Fiier" +msgid "Button$Folder" +msgstr "" + msgid "First day" msgstr "Prima zi" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Timer-e" diff --git a/po/ru_RU.po b/po/ru_RU.po index eb71a20d..3bd68e5e 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "" diff --git a/po/sk_SK.po b/po/sk_SK.po index 5068882c..eb2e2b40 100644 --- a/po/sk_SK.po +++ b/po/sk_SK.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \n" "Language-Team: Slovak\n" @@ -584,6 +584,31 @@ msgstr "Pl msgid "Delete channel?" msgstr "Odstrni kanl?" +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 plnu nahrvania" @@ -614,9 +639,15 @@ msgstr " msgid "File" msgstr "Sbor" +msgid "Button$Folder" +msgstr "" + msgid "First day" msgstr "Prv de" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Plny nahrvania" diff --git a/po/sl_SI.po b/po/sl_SI.po index 7b3b05f2..25738654 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \n" "Language-Team: Slovenian\n" @@ -584,6 +584,31 @@ msgstr "Kanal je zavzet s terminom za snemanje!" msgid "Delete channel?" msgstr "Izbrii 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" diff --git a/po/sv_SE.po b/po/sv_SE.po index 17a1da6c..b958e4b7 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "Frsta dag" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Timers" diff --git a/po/tr_TR.po b/po/tr_TR.po index e921986e..d0997a72 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 Yolgeen \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 "Zamanlaycy ayarla" @@ -613,9 +638,15 @@ msgstr " msgid "File" msgstr "Ktk" +msgid "Button$Folder" +msgstr "" + msgid "First day" msgstr "lk gn" +msgid "Select folder" +msgstr "" + msgid "Timers" msgstr "Zamanlayc" diff --git a/po/uk_UA.po b/po/uk_UA.po index 17c83716..a84196c7 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.7.7\n" "Report-Msgid-Bugs-To: \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 \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 "Таймери" diff --git a/po/zh_CN.po b/po/zh_CN.po index 1f6eaacd..0921d90e 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.6.0\n" "Report-Msgid-Bugs-To: \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 \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 "录像中列表" diff --git a/recording.c b/recording.c index 41ad47aa..ef78c40d 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 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 == '%'; } diff --git a/recording.h b/recording.h index 663d66d2..ac52ada2 100644 --- a/recording.h +++ b/recording.h @@ -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; diff --git a/timers.c b/timers.c index a684bb4a..246fd868 100644 --- a/timers.c +++ b/timers.c @@ -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 diff --git a/vdr.5 b/vdr.5 index 875a7ded..f77ca7c9 100644 --- a/vdr.5 +++ b/vdr.5 @@ -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. diff --git a/vdr.c b/vdr.c index e1bfc16a..38a29544 100644 --- a/vdr.c +++ b/vdr.c @@ -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 @@ -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!";