mirror of
https://projects.vdr-developer.org/git/vdr-plugin-tvguide.git
synced 2023-10-05 15:01:48 +02:00
added possibility to choose folder for instant recording
This commit is contained in:
parent
780e17395f
commit
706cf4d8e5
2
HISTORY
2
HISTORY
@ -52,3 +52,5 @@ VDR Plugin 'tvguide' Revision History
|
||||
- changed channel jump logic
|
||||
- red button also available in detail view
|
||||
- page scrolling with keys left and right in detail view
|
||||
- added possibility to choose folder for instant recording, possible
|
||||
folders are read from VDRs folders list
|
||||
|
4
config.c
4
config.c
@ -60,6 +60,7 @@ cTvguideConfig::cTvguideConfig() {
|
||||
numAdditionalEPGPictures = 9;
|
||||
epgImageWidthLarge = 525;
|
||||
epgImageHeightLarge = 400;
|
||||
recMenuAskFolder = 0;
|
||||
fontIndex = 0;
|
||||
fontNameDefault = "VDRSymbols Sans:Book";
|
||||
FontButtonDelta = 0;
|
||||
@ -287,7 +288,8 @@ bool cTvguideConfig::SetupParse(const char *Name, const char *Value) {
|
||||
else if (strcmp(Name, "displayChannelName") == 0) displayChannelName = atoi(Value);
|
||||
else if (strcmp(Name, "channelHeaderWidthPercent") == 0) channelHeaderWidthPercent = atoi(Value);
|
||||
else if (strcmp(Name, "channelHeaderHeightPercent") == 0) channelHeaderHeightPercent = atoi(Value);
|
||||
else if (strcmp(Name, "footerHeight") == 0) footerHeight = atoi(Value);
|
||||
else if (strcmp(Name, "footerHeight") == 0) footerHeight = atoi(Value);
|
||||
else if (strcmp(Name, "recMenuAskFolder") == 0) recMenuAskFolder = atoi(Value);
|
||||
else if (strcmp(Name, "fontIndex") == 0) fontIndex = atoi(Value);
|
||||
else if (strcmp(Name, "FontButtonDelta") == 0) FontButtonDelta = atoi(Value);
|
||||
else if (strcmp(Name, "FontDetailViewDelta") == 0) FontDetailViewDelta = atoi(Value);
|
||||
|
1
config.h
1
config.h
@ -64,6 +64,7 @@ class cTvguideConfig {
|
||||
int epgImageHeightLarge;
|
||||
cString epgImagePath;
|
||||
cString iconPath;
|
||||
int recMenuAskFolder;
|
||||
int fontIndex;
|
||||
const char *fontNameDefault;
|
||||
int FontButtonDelta;
|
||||
|
11
po/de_DE.po
11
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: 2013-07-12 16:08+0200\n"
|
||||
"POT-Creation-Date: 2013-07-18 17:18+0200\n"
|
||||
"PO-Revision-Date: 2012-08-25 17:49+0200\n"
|
||||
"Last-Translator: Horst\n"
|
||||
"Language-Team: \n"
|
||||
@ -90,6 +90,12 @@ msgstr "In Aufnahmen suchen"
|
||||
msgid "Check for Timer Conflicts"
|
||||
msgstr "Auf Timerkoflikte prüfen"
|
||||
|
||||
msgid "Set Folder for"
|
||||
msgstr "Verzeichnis festlegen für"
|
||||
|
||||
msgid "root video folder"
|
||||
msgstr "Video Hauptverzeichnis"
|
||||
|
||||
msgid "Timer created"
|
||||
msgstr "Timer angelegt"
|
||||
|
||||
@ -429,6 +435,9 @@ msgstr "Sehr großer Sprung (Tasten 4 / 6) in Stunden"
|
||||
msgid "Time Format (12h/24h)"
|
||||
msgstr "Zeitformat (12h/24h)"
|
||||
|
||||
msgid "Use folders for instant records"
|
||||
msgstr "Bei Sofortaufnahmen Verzeichnisse benutzen"
|
||||
|
||||
msgid "Display Reruns in detailed EPG View"
|
||||
msgstr "Wiederholungen in der detailierten EPG Ansicht anzeigen"
|
||||
|
||||
|
@ -30,10 +30,15 @@ void cRecManager::SetEPGSearchPlugin(void) {
|
||||
}
|
||||
}
|
||||
|
||||
cTimer *cRecManager::createTimer(const cEvent *event) {
|
||||
cTimer *cRecManager::createTimer(const cEvent *event, std::string path) {
|
||||
cTimer *timer = new cTimer(event);
|
||||
Timers.Add(timer);
|
||||
Timers.SetModified();
|
||||
if (path.size() > 0) {
|
||||
std::replace(path.begin(), path.end(), '/', '~');
|
||||
cString newFileName = cString::sprintf("%s~%s", path.c_str(), timer->File());
|
||||
timer->SetFile(*newFileName);
|
||||
}
|
||||
isyslog("timer %s added (active)", *timer->ToDescr());
|
||||
return timer;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ public:
|
||||
cRecManager (void);
|
||||
void SetEPGSearchPlugin(void);
|
||||
bool EpgSearchAvailable(void) {return epgSearchAvailable;};
|
||||
cTimer *createTimer(const cEvent *event);
|
||||
cTimer *createTimer(const cEvent *event, std::string path);
|
||||
void DeleteTimer(const cEvent *event);
|
||||
void DeleteTimer(int timerID);
|
||||
void SaveTimer(cTimer *timer, cRecMenu *menu);
|
||||
|
@ -10,6 +10,7 @@ enum eRecMenuState {
|
||||
rmsContinue,
|
||||
rmsClose,
|
||||
rmsInstantRecord,
|
||||
rmsInstantRecordFolder,
|
||||
rmsIgnoreTimerConflict,
|
||||
rmsDeleteTimerConflictMenu,
|
||||
rmsEditTimerConflictMenu,
|
||||
@ -101,6 +102,7 @@ public:
|
||||
int GetWidth(void);
|
||||
void SetPixmaps(void);
|
||||
void Draw(void);
|
||||
cString GetStringValue(void) { return text; };
|
||||
eRecMenuState ProcessKey(eKeys Key);
|
||||
};
|
||||
|
||||
|
@ -7,6 +7,7 @@ cRecMenuManager::cRecMenuManager(void) {
|
||||
recManager = new cRecManager();
|
||||
recManager->SetEPGSearchPlugin();
|
||||
instantRecord = false;
|
||||
folderChoosen = false;
|
||||
currentConflict = -1;
|
||||
templateID = -1;
|
||||
timer = NULL;
|
||||
@ -27,6 +28,7 @@ void cRecMenuManager::Start(const cEvent *event) {
|
||||
active = true;
|
||||
activeMenuBuffer = NULL;
|
||||
instantRecord = false;
|
||||
folderChoosen = false;
|
||||
currentConflict = -1;
|
||||
templateID = -1;
|
||||
timer = NULL;
|
||||
@ -76,13 +78,26 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
|
||||
//Creating timer for active Event
|
||||
//if no conflict, confirm and exit
|
||||
instantRecord = true;
|
||||
cString folder = "";
|
||||
if (folderChoosen) {
|
||||
int activeItem = activeMenu->GetActive(false);
|
||||
if (activeItem > 0)
|
||||
folder = activeMenu->GetStringValue(activeItem);
|
||||
}
|
||||
delete activeMenu;
|
||||
cTimer *timer = recManager->createTimer(event);
|
||||
cTimer *timer = recManager->createTimer(event, *folder);
|
||||
if (!displayTimerConflict(timer)) {
|
||||
activeMenu = new cRecMenuConfirmTimer(event);
|
||||
activeMenu->Display();
|
||||
}
|
||||
break; }
|
||||
case rmsInstantRecordFolder:
|
||||
//Asking for Folder
|
||||
folderChoosen = true;
|
||||
delete activeMenu;
|
||||
activeMenu = new cRecMenuAskFolder(event);
|
||||
activeMenu->Display();
|
||||
break;
|
||||
case rmsIgnoreTimerConflict:
|
||||
//Confirming created Timer
|
||||
if (instantRecord) {
|
||||
@ -385,7 +400,7 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
|
||||
break;}
|
||||
case rmsSearchRecord: {
|
||||
const cEvent *ev = activeMenu->GetEventValue(activeMenu->GetActive(false));
|
||||
cTimer *timer = recManager->createTimer(ev);
|
||||
cTimer *timer = recManager->createTimer(ev, "");
|
||||
activeMenuBuffer = activeMenu;
|
||||
activeMenuBuffer->Hide();
|
||||
activeMenu = new cRecMenuSearchConfirmTimer(ev);
|
||||
|
@ -12,6 +12,7 @@ private:
|
||||
std::vector<TVGuideTimerConflict> conflictList;
|
||||
std::vector<TVGuideEPGSearchTemplate> epgSearchTemplates;
|
||||
bool instantRecord;
|
||||
bool folderChoosen;
|
||||
int currentConflict;
|
||||
int templateID;
|
||||
bool searchWithOptions;
|
||||
|
68
recmenus.c
68
recmenus.c
@ -5,7 +5,10 @@ class cRecMenuMain : public cRecMenu {
|
||||
public:
|
||||
cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switchTimerActive) {
|
||||
if (!timerActive) {
|
||||
AddMenuItem(new cRecMenuItemButton(tr("Instant Record"), rmsInstantRecord, true));
|
||||
eRecMenuState action = (tvguideConfig.recMenuAskFolder)
|
||||
?rmsInstantRecordFolder
|
||||
:rmsInstantRecord;
|
||||
AddMenuItem(new cRecMenuItemButton(tr("Instant Record"), action, true));
|
||||
} else {
|
||||
AddMenuItem(new cRecMenuItemButton(tr("Delete Timer"), rmsDeleteTimer, true));
|
||||
AddMenuItem(new cRecMenuItemButton(tr("Edit Timer"), rmsEditTimer, false));
|
||||
@ -37,6 +40,69 @@ public:
|
||||
virtual ~cRecMenuMain(void) {};
|
||||
};
|
||||
|
||||
// --- cRecMenuAskFolder ---------------------------------------------------------
|
||||
class cRecMenuAskFolder: public cRecMenu {
|
||||
private:
|
||||
std::vector<cString> folders;
|
||||
void 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
public:
|
||||
cRecMenuAskFolder(const cEvent *event) {
|
||||
SetWidthPercent(80);
|
||||
cString message = tr("Set Folder for");
|
||||
cString headerText = cString::sprintf("%s\n\"%s\"", *message, event->Title());
|
||||
cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*headerText);
|
||||
infoItem->CalculateHeight(width - 2 * border);
|
||||
SetHeader(infoItem);
|
||||
|
||||
AddMenuItemScroll(new cRecMenuItemButton(tr("root video folder"), rmsInstantRecord, true, false));
|
||||
|
||||
readFolders(NULL, "");
|
||||
int numFolders = folders.size();
|
||||
for (int i=0; i < numFolders; i++) {
|
||||
AddMenuItemScroll(new cRecMenuItemButton(*folders[i], rmsInstantRecord, false, false));
|
||||
if (!CheckHeight())
|
||||
break;
|
||||
}
|
||||
|
||||
CalculateHeight();
|
||||
CreatePixmap();
|
||||
Arrange();
|
||||
};
|
||||
cRecMenuItem *GetMenuItem(int number) {
|
||||
if (number == 0) {
|
||||
cRecMenuItem *result = new cRecMenuItemButton(tr("root video folder"), rmsInstantRecord, false, false);
|
||||
return result;
|
||||
} else if ((number > 0) && (number < folders.size()+1)) {
|
||||
cRecMenuItem *result = new cRecMenuItemButton(*folders[number-1], rmsInstantRecord, false, false);
|
||||
return result;
|
||||
}
|
||||
return NULL;
|
||||
};
|
||||
|
||||
int GetTotalNumMenuItems(void) {
|
||||
return folders.size()+1;
|
||||
};
|
||||
|
||||
virtual ~cRecMenuAskFolder(void) {};
|
||||
};
|
||||
|
||||
|
||||
// --- cRecMenuConfirmTimer ---------------------------------------------------------
|
||||
class cRecMenuConfirmTimer: public cRecMenu {
|
||||
public:
|
||||
|
3
setup.c
3
setup.c
@ -82,6 +82,7 @@ void cTvguideSetup::Store(void) {
|
||||
SetupStore("channelHeaderWidthPercent", tvguideConfig.channelHeaderWidthPercent);
|
||||
SetupStore("channelHeaderHeightPercent", tvguideConfig.channelHeaderHeightPercent);
|
||||
SetupStore("footerHeight", tvguideConfig.footerHeight);
|
||||
SetupStore("recMenuAskFolder", tvguideConfig.recMenuAskFolder);
|
||||
SetupStore("fontIndex", tvguideConfig.fontIndex);
|
||||
SetupStore("FontButtonDelta", tvguideConfig.FontButtonDelta);
|
||||
SetupStore("FontDetailViewDelta", tvguideConfig.FontDetailViewDelta);
|
||||
@ -167,7 +168,7 @@ void cMenuSetupGeneral::Set(void) {
|
||||
Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpTvguideConfig->bigStepHours, 1, 12));
|
||||
Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpTvguideConfig->hugeStepHours, 13, 48));
|
||||
Add(new cMenuEditStraItem(tr("Time Format (12h/24h)"), &tmpTvguideConfig->timeFormat, 2, timeFormatItems));
|
||||
|
||||
Add(new cMenuEditBoolItem(tr("Use folders for instant records"), &tmpTvguideConfig->recMenuAskFolder));
|
||||
Add(new cMenuEditBoolItem(tr("Display Reruns in detailed EPG View"), &tmpTvguideConfig->displayRerunsDetailEPGView));
|
||||
if (tmpTvguideConfig->displayRerunsDetailEPGView) {
|
||||
Add(new cMenuEditIntItem(cString::sprintf("%s%s", indent, tr("Number of reruns to display")), &tmpTvguideConfig->numReruns, 1, 10));
|
||||
|
Loading…
Reference in New Issue
Block a user