summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY3
-rw-r--r--config.c4
-rw-r--r--config.h7
-rw-r--r--po/ca_ES.po26
-rwxr-xr-xpo/de_DE.po25
-rw-r--r--po/ru_RU.po26
-rw-r--r--po/sk_SK.po26
-rw-r--r--recmanager.c26
-rw-r--r--recmenuitem.c44
-rw-r--r--recmenuitem.h5
-rw-r--r--recmenus.c87
-rw-r--r--recmenus.h3
-rw-r--r--setup.c16
-rw-r--r--setup.h2
-rw-r--r--tools.c41
-rw-r--r--tools.h1
16 files changed, 224 insertions, 118 deletions
diff --git a/HISTORY b/HISTORY
index aa75877..980da6c 100644
--- a/HISTORY
+++ b/HISTORY
@@ -118,3 +118,6 @@ Version 1.1.0
- set blue key favorite mode as new default
Version 1.2.0
+
+- changed video directory choosage behaviour: added possibility to use
+ a fixed recording dir which also supports epgsearch variables
diff --git a/config.c b/config.c
index 84004f0..56db8bd 100644
--- a/config.c
+++ b/config.c
@@ -45,6 +45,8 @@ cTvguideConfig::cTvguideConfig() {
epgImageWidthLarge = 525;
epgImageHeightLarge = 400;
recMenuAskFolder = 0;
+ instRecFolderMode = eFolderRoot;
+ instRecFixedFolder = "";
favWhatsOnNow = 1;
favWhatsOnNext = 1;
favUseTime1 = 0;
@@ -278,6 +280,8 @@ bool cTvguideConfig::SetupParse(const char *Name, const char *Value) {
else if (strcmp(Name, "channelHeaderHeightPercent") == 0) channelHeaderHeightPercent = atoi(Value);
else if (strcmp(Name, "footerHeightPercent") == 0) footerHeightPercent = atoi(Value);
else if (strcmp(Name, "recMenuAskFolder") == 0) recMenuAskFolder = atoi(Value);
+ else if (strcmp(Name, "instRecFolderMode") == 0) instRecFolderMode = atoi(Value);
+ else if (strcmp(Name, "instRecFixedFolder") == 0) instRecFixedFolder = Value;
else if (strcmp(Name, "favWhatsOnNow") == 0) favWhatsOnNow = atoi(Value);
else if (strcmp(Name, "favWhatsOnNext") == 0) favWhatsOnNext = atoi(Value);
else if (strcmp(Name, "favUseTime1") == 0) favUseTime1 = atoi(Value);
diff --git a/config.h b/config.h
index 6d3c33d..6b96244 100644
--- a/config.h
+++ b/config.h
@@ -37,6 +37,11 @@ enum eBlueKeyMode {
eBlueKeyFavorites
};
+enum eInstRecFolderMode {
+ eFolderRoot = 0,
+ eFolderSelect,
+ eFolderFixed
+};
class cTvguideConfig {
private:
@@ -94,6 +99,8 @@ class cTvguideConfig {
cString iconPathDefault;
cString epgImagePathDefault;
int recMenuAskFolder;
+ int instRecFolderMode;
+ std::string instRecFixedFolder;
int favWhatsOnNow;
int favWhatsOnNext;
int favUseTime1;
diff --git a/po/ca_ES.po b/po/ca_ES.po
index ac2712a..e52bad9 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2014-01-26 09:25+0100\n"
+"POT-Creation-Date: 2014-02-06 17:17+0100\n"
"PO-Revision-Date: 2013-09-21 17:49+0200\n"
"Last-Translator: My friend <Sampep> Thanks David <Gabychan> <gbonich@gmail.com>\n"
"Language-Team: \n"
@@ -234,7 +234,10 @@ msgstr "Inici temporitzador"
msgid "Timer stop time"
msgstr "Final temporitzador"
-msgid "Folder"
+msgid "Timer File"
+msgstr ""
+
+msgid "New Folder"
msgstr ""
msgid "Save"
@@ -339,6 +342,9 @@ msgstr ""
msgid "Series Recording"
msgstr ""
+msgid "Folder"
+msgstr ""
+
msgid "Use VPS"
msgstr ""
@@ -759,8 +765,17 @@ msgstr "Mida de la Font petita - Menú Cerca & Enregistra"
msgid "Search & Recording Menu Header Font Size"
msgstr ""
-msgid "Use folders for instant records"
-msgstr "Utilitza carpetes per gravacions a l'instant"
+msgid "Always use root video folder"
+msgstr ""
+
+msgid "Select from folder list"
+msgstr ""
+
+msgid "Use fixed folder"
+msgstr ""
+
+msgid "Folder for instant Recordings"
+msgstr ""
msgid "Use Remotetimers"
msgstr "Utilitza temporitzadors remots"
@@ -822,6 +837,9 @@ msgstr ""
msgid "Recording Menus Icon Cache"
msgstr ""
+#~ msgid "Use folders for instant records"
+#~ msgstr "Utilitza carpetes per gravacions a l'instant"
+
#~ msgid "Height of status header (Perc. of osd height)"
#~ msgstr "Alçada capçalera d'estat (% alçada OSD)"
diff --git a/po/de_DE.po b/po/de_DE.po
index c4e4ede..588f7bb 100755
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2014-01-26 09:25+0100\n"
+"POT-Creation-Date: 2014-02-06 17:17+0100\n"
"PO-Revision-Date: 2012-08-25 17:49+0200\n"
"Last-Translator: Horst\n"
"Language-Team: \n"
@@ -231,8 +231,11 @@ msgstr "Timer Start Zeit"
msgid "Timer stop time"
msgstr "Timer Stop Zeit"
-msgid "Folder"
-msgstr "Verzeichnis"
+msgid "Timer File"
+msgstr "Timer Datei"
+
+msgid "New Folder"
+msgstr "Neues Verzeichnis"
msgid "Save"
msgstr "Speichern"
@@ -336,6 +339,9 @@ msgstr "Zeit nach Ende in Minuten"
msgid "Series Recording"
msgstr "Serienaufnahme"
+msgid "Folder"
+msgstr "Verzeichnis"
+
msgid "Use VPS"
msgstr "VPS benutzen"
@@ -756,8 +762,17 @@ msgstr "Suchen & Aufnehmen Menu kleine Schriftgröße"
msgid "Search & Recording Menu Header Font Size"
msgstr "Suchen & Aufnehmen Menu Header Schriftgröße"
-msgid "Use folders for instant records"
-msgstr "Bei Sofortaufnahmen Verzeichnisse benutzen"
+msgid "Always use root video folder"
+msgstr "Immer root video Verzeichnis benutzen"
+
+msgid "Select from folder list"
+msgstr "Verzeichnis aus Liste auswählen"
+
+msgid "Use fixed folder"
+msgstr "Festes Verzeichnis benutzen"
+
+msgid "Folder for instant Recordings"
+msgstr "Verzeichnis für Sofortaufnahmen"
msgid "Use Remotetimers"
msgstr "RemoteTimers benutzen"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index af062ff..ad03f64 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 1.0.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2014-01-26 09:25+0100\n"
+"POT-Creation-Date: 2014-02-06 17:17+0100\n"
"PO-Revision-Date: 2013-09-25 17:49+0400\n"
"Last-Translator: AmiD, ilya\n"
"Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n"
@@ -231,7 +231,10 @@ msgstr "Время c"
msgid "Timer stop time"
msgstr "Время до"
-msgid "Folder"
+msgid "Timer File"
+msgstr ""
+
+msgid "New Folder"
msgstr ""
msgid "Save"
@@ -336,6 +339,9 @@ msgstr ""
msgid "Series Recording"
msgstr ""
+msgid "Folder"
+msgstr ""
+
msgid "Use VPS"
msgstr ""
@@ -756,8 +762,17 @@ msgstr "Размер маленького шрифта меню Поиск & З
msgid "Search & Recording Menu Header Font Size"
msgstr ""
-msgid "Use folders for instant records"
-msgstr "Использовать директории для быстрой записи"
+msgid "Always use root video folder"
+msgstr ""
+
+msgid "Select from folder list"
+msgstr ""
+
+msgid "Use fixed folder"
+msgstr ""
+
+msgid "Folder for instant Recordings"
+msgstr ""
msgid "Use Remotetimers"
msgstr "RemoteTimers benutzen"
@@ -819,6 +834,9 @@ msgstr ""
msgid "Recording Menus Icon Cache"
msgstr ""
+#~ msgid "Use folders for instant records"
+#~ msgstr "Использовать директории для быстрой записи"
+
#~ msgid "Height of status header (Perc. of osd height)"
#~ msgstr "Высота верхней панели (% от высоты OSD)"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index 005100a..83e44b7 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 1.1.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2014-01-26 09:25+0100\n"
+"POT-Creation-Date: 2014-02-06 17:17+0100\n"
"PO-Revision-Date: 2013-09-15 00:12+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: \n"
@@ -231,7 +231,10 @@ msgstr "Pln zana"
msgid "Timer stop time"
msgstr "Pln kon"
-msgid "Folder"
+msgid "Timer File"
+msgstr ""
+
+msgid "New Folder"
msgstr ""
msgid "Save"
@@ -336,6 +339,9 @@ msgstr ""
msgid "Series Recording"
msgstr ""
+msgid "Folder"
+msgstr ""
+
msgid "Use VPS"
msgstr ""
@@ -756,8 +762,17 @@ msgstr "Hada & Nahra menu mal psmo"
msgid "Search & Recording Menu Header Font Size"
msgstr ""
-msgid "Use folders for instant records"
-msgstr "Poui adresre pre okamit nahrvky"
+msgid "Always use root video folder"
+msgstr ""
+
+msgid "Select from folder list"
+msgstr ""
+
+msgid "Use fixed folder"
+msgstr ""
+
+msgid "Folder for instant Recordings"
+msgstr ""
msgid "Use Remotetimers"
msgstr "Poui vzdialen plnova"
@@ -819,6 +834,9 @@ msgstr ""
msgid "Recording Menus Icon Cache"
msgstr ""
+#~ msgid "Use folders for instant records"
+#~ msgstr "Poui adresre pre okamit nahrvky"
+
#~ msgid "Height of status header (Perc. of osd height)"
#~ msgstr "Vka stavovej hlaviky (% z OSD vky)"
diff --git a/recmanager.c b/recmanager.c
index 055a750..3dec771 100644
--- a/recmanager.c
+++ b/recmanager.c
@@ -114,6 +114,28 @@ cTimer *cRecManager::createRemoteTimer(const cEvent *event, std::string path) {
}
void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string path) {
+ if (tvguideConfig.instRecFolderMode == eFolderFixed) {
+ Epgsearch_services_v1_2 *epgSearch = new Epgsearch_services_v1_2;
+ std::string recDir = tvguideConfig.instRecFixedFolder;
+ std::replace(recDir.begin(), recDir.end(), '/', '~');
+ if (strchr(recDir.c_str(), '%') != NULL) {
+ if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
+ std::string newFileName = epgSearch->handler->Evaluate(recDir, event);
+ if (strchr(newFileName.c_str(), '%') == NULL) // only set directory to new value if all categories could have been replaced
+ timer->SetFile(newFileName.c_str());
+ else
+ esyslog("tvguide: timer path not set because replacing variable was not successfull: %s", newFileName.c_str());
+ }
+ } else {
+ cString newFileName;
+ if (recDir.size() > 0) {
+ newFileName = cString::sprintf("%s~%s", recDir.c_str(), timer->File());
+ timer->SetFile(*newFileName);
+ }
+ }
+ return;
+ }
+ //Set choosen path
cString newFileName;
if (path.size() > 0) {
std::replace(path.begin(), path.end(), '/', '~');
@@ -121,10 +143,6 @@ void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string p
} else {
newFileName = event->Title();
}
-
- if ( !isempty(event->ShortText()) && ((event->Duration() / 60 ) < 70) ) //Add Dir only for Series
- newFileName = cString::sprintf("%s~%s", *newFileName, event->ShortText());
-
timer->SetFile(*newFileName);
}
diff --git a/recmenuitem.c b/recmenuitem.c
index c186de0..6527751 100644
--- a/recmenuitem.c
+++ b/recmenuitem.c
@@ -593,18 +593,20 @@ cRecMenuItemSelectDirectory::cRecMenuItemSelectDirectory(cString text,
std::string originalFolder,
bool active,
char *callback,
- eRecMenuState action) {
+ eRecMenuState action,
+ bool isSearchTimer) {
selectable = true;
this->text = text;
this->originalFolder = originalFolder;
- seriesFolder = "";
this->active = active;
this->callback = callback;
this->action = action;
height = 3 * font->Height() / 2;
pixmapVal = NULL;
folders.push_back(tr("root video folder"));
- ReadFolders(NULL, "");
+ if (isSearchTimer && tvguideConfig.instRecFixedFolder.size() > 0)
+ folders.push_back(tvguideConfig.instRecFixedFolder);
+ ReadRecordingDirectories(&folders, NULL, "");
numValues = folders.size();
this->currentVal = GetInitial();
}
@@ -694,33 +696,9 @@ void cRecMenuItemSelectDirectory::SetCallback(void) {
std::string newFolder = folders[currentVal];
if (!newFolder.compare(tr("root video folder")))
newFolder = "";
- if (seriesFolder.size() > 0) {
- if (newFolder.size() > 0)
- newFolder = *cString::sprintf("%s/%s", folders[currentVal].c_str(), seriesFolder.c_str());
- else
- newFolder = seriesFolder;
- }
strncpy(callback, newFolder.c_str(), TEXTINPUTLENGTH);
}
-void cRecMenuItemSelectDirectory::ReadFolders(cList<cNestedItem> *rootFolders, cString path) {
- cList<cNestedItem> *foldersLevel = NULL;
- if (rootFolders) {
- foldersLevel = rootFolders;
- } else {
- foldersLevel = &Folders;
- }
- for (cNestedItem *folder = foldersLevel->First(); folder; folder = foldersLevel->Next(folder)) {
- cString strFolder = cString::sprintf("%s%s", *path, folder->Text());
- folders.push_back(*strFolder);
- cList<cNestedItem> *subItems = folder->SubItems();
- if (subItems) {
- cString newPath = cString::sprintf("%s%s/", *path, folder->Text());
- ReadFolders(subItems, newPath);
- }
- }
-}
-
int cRecMenuItemSelectDirectory::GetInitial(void) {
if (originalFolder.size() == 0)
return 0;
@@ -729,18 +707,6 @@ int cRecMenuItemSelectDirectory::GetInitial(void) {
return i;
}
}
- size_t found = originalFolder.find_last_of('/');
- if (found != std::string::npos) {
- std::string folderSet = originalFolder.substr(0, found);
- seriesFolder = originalFolder.substr(found + 1);
- for (int i=0; i < numValues; i++) {
- if (!folders[i].compare(folderSet)) {
- return i;
- }
- }
- } else {
- seriesFolder = originalFolder;
- }
return 0;
}
diff --git a/recmenuitem.h b/recmenuitem.h
index 47b6d01..6084d56 100644
--- a/recmenuitem.h
+++ b/recmenuitem.h
@@ -272,14 +272,12 @@ class cRecMenuItemSelectDirectory : public cRecMenuItem {
private:
cString text;
std::string originalFolder;
- std::string seriesFolder;
std::vector<std::string> folders;
int currentVal;
char *callback;
int numValues;
cPixmap *pixmapVal;
void DrawValue(void);
- void ReadFolders(cList<cNestedItem> *rootFolders, cString path);
int GetInitial(void);
void SetCallback(void);
public:
@@ -287,7 +285,8 @@ public:
std::string originalFolder,
bool active = false,
char *callback = NULL,
- eRecMenuState action = rmsNotConsumed);
+ eRecMenuState action = rmsNotConsumed,
+ bool isSearchTimer = false);
virtual ~cRecMenuItemSelectDirectory(void);
void SetPixmaps(void);
void Hide(void);
diff --git a/recmenus.c b/recmenus.c
index 9a8fa41..b90fed7 100644
--- a/recmenus.c
+++ b/recmenus.c
@@ -5,11 +5,10 @@
// --- cRecMenuMain ---------------------------------------------------------
cRecMenuMain::cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switchTimerActive) {
- eRecMenuState action;
+ eRecMenuState action = rmsInstantRecord;
if (!timerActive) {
- action = (tvguideConfig.recMenuAskFolder)
- ?rmsInstantRecordFolder
- :rmsInstantRecord;
+ if (tvguideConfig.instRecFolderMode == eFolderSelect)
+ action = rmsInstantRecordFolder;
AddMenuItem(new cRecMenuItemButton(tr("Instant Record"), action, true, false, false, true));
} else {
AddMenuItem(new cRecMenuItemButton(tr("Delete Timer"), rmsDeleteTimer, true, false, false, true));
@@ -23,9 +22,10 @@ cRecMenuMain::cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switc
AddMenuItem(new cRecMenuItemButton(tr("Manage Search Timers"), rmsSearchTimers, false, false, false, true));
}
- action = (tvguideConfig.recMenuAskFolder)
- ?rmsSeriesTimerFolder
- :rmsSeriesTimer;
+ if (tvguideConfig.instRecFolderMode == eFolderSelect)
+ action = rmsSeriesTimerFolder;
+ else
+ action = rmsSeriesTimer;
AddMenuItem(new cRecMenuItemButton(tr("Create Series Timer"), action, false, false, false, true));
if (epgSearchAvailable) {
@@ -67,10 +67,10 @@ cRecMenuAskFolder::cRecMenuAskFolder(const cEvent *event, eRecMenuState nextActi
AddMenuItemInitial(new cRecMenuItemButton(tr("root video folder"), nextAction, true, false, true));
- readFolders(NULL, "");
+ ReadRecordingDirectories(&folders, NULL, "");
int numFolders = folders.size();
for (int i=0; i < numFolders; i++) {
- if (!AddMenuItemInitial(new cRecMenuItemButton(*folders[i], nextAction, false, false, true)))
+ if (!AddMenuItemInitial(new cRecMenuItemButton(folders[i].c_str(), nextAction, false, false, true)))
break;
}
@@ -79,30 +79,12 @@ cRecMenuAskFolder::cRecMenuAskFolder(const cEvent *event, eRecMenuState nextActi
Arrange();
}
-void cRecMenuAskFolder::readFolders(cList<cNestedItem> *rootFolders, cString path) {
- cList<cNestedItem> *foldersLevel = NULL;
- if (rootFolders) {
- foldersLevel = rootFolders;
- } else {
- foldersLevel = &Folders;
- }
- for (cNestedItem *folder = foldersLevel->First(); folder; folder = foldersLevel->Next(folder)) {
- cString strFolder = cString::sprintf("%s%s", *path, folder->Text());
- folders.push_back(strFolder);
- cList<cNestedItem> *subItems = folder->SubItems();
- if (subItems) {
- cString newPath = cString::sprintf("%s%s/", *path, folder->Text());
- readFolders(subItems, newPath);
- }
- }
-}
-
cRecMenuItem *cRecMenuAskFolder::GetMenuItem(int number) {
if (number == 0) {
cRecMenuItem *result = new cRecMenuItemButton(tr("root video folder"), rmsInstantRecord, false, false, true);
return result;
} else if ((number > 0) && (number < folders.size()+1)) {
- cRecMenuItem *result = new cRecMenuItemButton(*folders[number-1], rmsInstantRecord, false, false, true);
+ cRecMenuItem *result = new cRecMenuItemButton(folders[number-1].c_str(), rmsInstantRecord, false, false, true);
return result;
}
return NULL;
@@ -116,7 +98,7 @@ std::string cRecMenuAskFolder::GetFolder(void) {
std::string folder = "";
int folderActive = GetActive();
if (folderActive > 0 && folderActive < folders.size() + 1)
- folder = *folders[folderActive - 1];
+ folder = folders[folderActive - 1];
return folder;
}
@@ -410,7 +392,7 @@ cRecMenuEditTimer::cRecMenuEditTimer(cTimer *timer, eRecMenuState nextState) {
cString infoText = cString::sprintf("%s:\n %s, %s", tr("Edit Timer"), *title, *channelName);
cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText, true);
infoItem->CalculateHeight(width - 2 * border);
- AddMenuItem(infoItem);
+ AddMenuItemInitial(infoItem);
timerActive = false;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
@@ -431,18 +413,22 @@ cRecMenuEditTimer::cRecMenuEditTimer(cTimer *timer, eRecMenuState nextState) {
lifetime = timer->Lifetime();
strncpy(folder, GetDirectoryFromTimer(timer->File()).c_str(), TEXTINPUTLENGTH);
- AddMenuItem(new cRecMenuItemBool(tr("Timer Active"), timerActive, false, true, &timerActive));
- AddMenuItem(new cRecMenuItemInt(tr("Priority"), prio, 0, MAXPRIORITY, false, &prio));
- AddMenuItem(new cRecMenuItemInt(tr("Lifetime"), lifetime, 0, MAXLIFETIME, false, &lifetime));
- AddMenuItem(new cRecMenuItemDay(tr("Day"), day, false, &day));
- AddMenuItem(new cRecMenuItemTime(tr("Timer start time"), start, false, &start));
- AddMenuItem(new cRecMenuItemTime(tr("Timer stop time"), stop, false, &stop));
- AddMenuItem(new cRecMenuItemSelectDirectory(tr("Folder"), std::string(folder), false, folder));
+ AddMenuItemInitial(new cRecMenuItemBool(tr("Timer Active"), timerActive, false, true, &timerActive));
+ AddMenuItemInitial(new cRecMenuItemInt(tr("Priority"), prio, 0, MAXPRIORITY, false, &prio));
+ AddMenuItemInitial(new cRecMenuItemInt(tr("Lifetime"), lifetime, 0, MAXLIFETIME, false, &lifetime));
+ AddMenuItemInitial(new cRecMenuItemDay(tr("Day"), day, false, &day));
+ AddMenuItemInitial(new cRecMenuItemTime(tr("Timer start time"), start, false, &start));
+ AddMenuItemInitial(new cRecMenuItemTime(tr("Timer stop time"), stop, false, &stop));
+ cString fileInfo = cString::sprintf("%s:\n%s", tr("Timer File"), timer->File());
+ cRecMenuItemInfo *fileInfoItem = new cRecMenuItemInfo(*fileInfo, false);
+ fileInfoItem->CalculateHeight(width - 2 * border);
+ AddMenuItemInitial(fileInfoItem);
+ AddMenuItemInitial(new cRecMenuItemSelectDirectory(tr("New Folder"), std::string(folder), false, folder));
if (nextState == rmsTimelineTimerSave) {
- AddMenuItem(new cRecMenuItemButton(tr("Delete Timer"), rmsTimelineTimerDelete, false, false));
- AddMenuItem(new cRecMenuItemButtonYesNo(tr("Save"), tr("Cancel"), nextState, rmsTimeline, false));
+ AddMenuItemInitial(new cRecMenuItemButton(tr("Delete Timer"), rmsTimelineTimerDelete, false, false));
+ AddMenuItemInitial(new cRecMenuItemButtonYesNo(tr("Save"), tr("Cancel"), nextState, rmsTimeline, false));
} else {
- AddMenuItem(new cRecMenuItemButtonYesNo(tr("Save"), tr("Cancel"), nextState, rmsClose, false));
+ AddMenuItemInitial(new cRecMenuItemButtonYesNo(tr("Save"), tr("Cancel"), nextState, rmsClose, false));
}
CalculateHeight();
CreatePixmap();
@@ -466,14 +452,16 @@ cTimer cRecMenuEditTimer::GetTimer(void) {
t.SetLifetime(lifetime);
std::string newFolder(folder);
std::string newFile = originalTimer->File();
- if (newFolder.size() > 0) {
- size_t found = newFile.find_last_of('~');
- if (found != std::string::npos) {
- std::string fileName = newFile.substr(found+1);
- newFile = *cString::sprintf("%s/%s", newFolder.c_str(), fileName.c_str());
- } else {
- newFile = *cString::sprintf("%s/%s", newFolder.c_str(), newFile.c_str());
- }
+ size_t found = newFile.find_last_of('~');
+ if (found != std::string::npos) {
+ std::string fileName = newFile.substr(found+1);
+ if (newFolder.size() > 0)
+ newFile = *cString::sprintf("%s~%s", newFolder.c_str(), fileName.c_str());
+ else
+ newFile = fileName;
+ } else {
+ if (newFolder.size() > 0)
+ newFile = *cString::sprintf("%s~%s", newFolder.c_str(), newFile.c_str());
}
std::replace(newFile.begin(), newFile.end(), '/', '~');
t.SetFile(newFile.c_str());
@@ -712,7 +700,6 @@ cRecMenuSearchTimerEdit::cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer
lifetime = searchTimer.Lifetime();
useEpisode = searchTimer.UseEpisode();
std::string dir = searchTimer.Directory();
- std::replace(dir.begin(), dir.end(), '~', '/');
strncpy(directory, dir.c_str(), TEXTINPUTLENGTH);
marginStart = searchTimer.MarginStart();
marginStop = searchTimer.MarginStop();
@@ -790,7 +777,7 @@ void cRecMenuSearchTimerEdit::InitMenuItems(void) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Time margin for start in minutes"), marginStart, 0, 30, false, &marginStart, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemInt(tr("Time margin for stop in minutes"), marginStop, 0, 30, false, &marginStop, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Series Recording"), useEpisode, false, false, &useEpisode, rmsSearchTimerSave));
- mainMenuItems.push_back(new cRecMenuItemSelectDirectory(tr("Folder"), std::string(directory), false, directory, rmsSearchTimerSave));
+ mainMenuItems.push_back(new cRecMenuItemSelectDirectory(tr("Folder"), std::string(directory), false, directory, rmsSearchTimerSave, true));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use VPS"), useVPS, false, false, &useVPS, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Avoid Repeats"), avoidRepeats, true, false, &avoidRepeats, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use in Favorites"), useInFavorites, false, false, &useInFavorites, rmsSearchTimerSave));
diff --git a/recmenus.h b/recmenus.h
index 4a7eefd..547eee3 100644
--- a/recmenus.h
+++ b/recmenus.h
@@ -25,9 +25,8 @@ public:
// --- cRecMenuAskFolder ---------------------------------------------------------
class cRecMenuAskFolder: public cRecMenu {
private:
- std::vector<cString> folders;
+ std::vector<std::string> folders;
eRecMenuState NextAction;
- void readFolders(cList<cNestedItem> *rootFolders, cString path);
public:
cRecMenuAskFolder(const cEvent *event, eRecMenuState nextAction);
cRecMenuItem *GetMenuItem(int number);
diff --git a/setup.c b/setup.c
index 4298aab..0ecb205 100644
--- a/setup.c
+++ b/setup.c
@@ -102,6 +102,8 @@ void cTvguideSetup::Store(void) {
SetupStore("channelHeaderHeightPercent", tvguideConfig.channelHeaderHeightPercent);
SetupStore("footerHeightPercent", tvguideConfig.footerHeightPercent);
SetupStore("recMenuAskFolder", tvguideConfig.recMenuAskFolder);
+ SetupStore("instRecFolderMode", tvguideConfig.instRecFolderMode);
+ SetupStore("instRecFixedFolder", tvguideConfig.instRecFixedFolder.c_str());
SetupStore("favWhatsOnNow", tvguideConfig.favWhatsOnNow);
SetupStore("favWhatsOnNext", tvguideConfig.favWhatsOnNext);
SetupStore("favUseTime1", tvguideConfig.favUseTime1);
@@ -371,6 +373,10 @@ cMenuSetupFavorites::cMenuSetupFavorites(cTvguideConfig* data) : cMenuSetupSubM
strn0cpy(description2, data->descUser2.c_str(), sizeof(description2));
strn0cpy(description3, data->descUser3.c_str(), sizeof(description3));
strn0cpy(description4, data->descUser4.c_str(), sizeof(description4));
+ recFolderMode[0] = tr("Always use root video folder");
+ recFolderMode[1] = tr("Select from folder list");
+ recFolderMode[2] = tr("Use fixed folder");
+ strn0cpy(fixedFolder, data->instRecFixedFolder.c_str(), sizeof(fixedFolder));
Set();
}
@@ -378,7 +384,10 @@ void cMenuSetupFavorites::Set(void) {
int currentItem = Current();
Clear();
- Add(new cMenuEditBoolItem(tr("Use folders for instant records"), &tmpTvguideConfig->recMenuAskFolder));
+ Add(new cMenuEditStraItem(tr("Folder for instant Recordings"), &tmpTvguideConfig->instRecFolderMode, 3, recFolderMode));
+ if (tmpTvguideConfig->instRecFolderMode == eFolderFixed) {
+ Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Folder")), fixedFolder, sizeof(fixedFolder), trVDR(FileNameChars)));
+ }
if (pRemoteTimers)
Add(new cMenuEditBoolItem(tr("Use Remotetimers"), &tmpTvguideConfig->useRemoteTimers));
@@ -421,18 +430,21 @@ eOSState cMenuSetupFavorites::ProcessKey(eKeys Key) {
int tmpFavUseTime3 = tmpTvguideConfig->favUseTime3;
int tmpFavUseTime4 = tmpTvguideConfig->favUseTime4;
int tmpFavLimitChannels = tmpTvguideConfig->favLimitChannels;
+ int tmpFolderMode = tmpTvguideConfig->instRecFolderMode;
eOSState state = cOsdMenu::ProcessKey(Key);
if (Key == kOk) {
tmpTvguideConfig->descUser1 = description1;
tmpTvguideConfig->descUser2 = description2;
tmpTvguideConfig->descUser3 = description3;
tmpTvguideConfig->descUser4 = description4;
+ tmpTvguideConfig->instRecFixedFolder = fixedFolder;
} else if ((Key == kLeft)||(Key == kRight)) {
if ((tmpFavUseTime1 != tmpTvguideConfig->favUseTime1) ||
(tmpFavUseTime2 != tmpTvguideConfig->favUseTime2) ||
(tmpFavUseTime3 != tmpTvguideConfig->favUseTime3) ||
(tmpFavUseTime4 != tmpTvguideConfig->favUseTime4) ||
- (tmpFavLimitChannels != tmpTvguideConfig->favLimitChannels) )
+ (tmpFavLimitChannels != tmpTvguideConfig->favLimitChannels) ||
+ (tmpFolderMode != tmpTvguideConfig->instRecFolderMode) )
Set();
}
return state;
diff --git a/setup.h b/setup.h
index 3555097..f7f8b2c 100644
--- a/setup.h
+++ b/setup.h
@@ -67,6 +67,8 @@ class cMenuSetupFavorites : public cMenuSetupSubMenu {
char description2[256];
char description3[256];
char description4[256];
+ const char * recFolderMode[3];
+ char fixedFolder[256];
void Set(void);
virtual eOSState ProcessKey(eKeys Key);
public:
diff --git a/tools.c b/tools.c
index 18adeba..2607332 100644
--- a/tools.c
+++ b/tools.c
@@ -7,6 +7,8 @@
#include <stdlib.h>
#include <stdio.h>
#include <vdr/osd.h>
+#include <vdr/plugin.h>
+#include "services/epgsearch.h"
#include "tools.h"
@@ -61,11 +63,48 @@ std::string GetDirectoryFromTimer(std::string file) {
size_t found = file.find_last_of('~');
if (found != std::string::npos) {
dir = file.substr(0, found);
- std::replace(dir.begin(), dir.end(), '~', '/');
}
return dir;
}
+/****************************************************************************************
+* GetDirectoryFromTimer
+****************************************************************************************/
+void ReadRecordingDirectories(std::vector<std::string> *folders, cList<cNestedItem> *rootFolders, cString path) {
+ cPlugin *epgSearchPlugin = NULL;
+ epgSearchPlugin = cPluginManager::GetPlugin("epgsearch");
+ if (epgSearchPlugin) {
+ Epgsearch_services_v1_0 *epgSearch = new Epgsearch_services_v1_0;
+ if (epgSearchPlugin->Service("Epgsearch-services-v1.0", epgSearch)) {
+ std::set<std::string> epgSearchDirs = epgSearch->handler->DirectoryList();
+ std::set<std::string>::iterator it;
+ for (it = epgSearchDirs.begin(); it != epgSearchDirs.end(); it++) {
+ std::string newFolder = *it;
+ std::replace(newFolder.begin(), newFolder.end(), '/', '~');
+ folders->push_back(newFolder);
+ }
+ }
+ } else {
+ cList<cNestedItem> *foldersLevel = NULL;
+ if (rootFolders) {
+ foldersLevel = rootFolders;
+ } else {
+ foldersLevel = &Folders;
+ }
+ for (cNestedItem *folder = foldersLevel->First(); folder; folder = foldersLevel->Next(folder)) {
+ std::string strFolder = *cString::sprintf("%s%s", *path, folder->Text());
+ std::replace(strFolder.begin(), strFolder.end(), '/', '~');
+ folders->push_back(strFolder);
+ cList<cNestedItem> *subItems = folder->SubItems();
+ if (subItems) {
+ std::string strFolder2 = *cString::sprintf("%s%s", *path, folder->Text());
+ std::replace(strFolder2.begin(), strFolder2.end(), '/', '~');
+ ReadRecordingDirectories(folders, subItems, strFolder2.c_str());
+ }
+ }
+ }
+}
+
/****************************************************************************************
* DrawRoundedCorners
diff --git a/tools.h b/tools.h
index e9feaa5..f401ea4 100644
--- a/tools.h
+++ b/tools.h
@@ -9,6 +9,7 @@
std::string CutText(std::string text, int width, const cFont *font);
std::string StrToLowerCase(std::string str);
std::string GetDirectoryFromTimer(std::string file);
+void ReadRecordingDirectories(std::vector<std::string> *folders, cList<cNestedItem> *rootFolders, cString path);
void DrawRoundedCorners(cPixmap *p, int posX, int posY, int width, int height, int radius, int borderWidth, tColor borderColor);
class splitstring : public std::string {