Added possibility to search for reruns in case of a timer conflict

This commit is contained in:
louis 2013-12-29 18:13:45 +01:00
parent 06ed8b3567
commit eede61ade5
102 changed files with 722 additions and 235 deletions

View File

@ -96,3 +96,4 @@ Version 1.1.0
- Rounded Corners for color buttons (Closes Ticket 1475) - Rounded Corners for color buttons (Closes Ticket 1475)
- Fixed some issues with text backgrounds in flat themes (closes - Fixed some issues with text backgrounds in flat themes (closes
Tickets 1480 and 1486) Tickets 1480 and 1486)
- Added possibility to search for reruns in case of a timer conflict

View File

@ -59,7 +59,7 @@ endif
### The object files (add further files here): ### The object files (add further files here):
OBJS = $(PLUGIN).o channelcolumn.o channelgroup.o channelgroups.o channeljump.o config.o detailview.o dummygrid.o epggrid.o fontmanager.o footer.o geometrymanager.o grid.o headergrid.o imagecache.o imageloader.o imagemagickwrapper.o imagescaler.o osdmanager.o recmanager.o recmenu.o recmenuitem.o recmenumanager.o recmenus.o setup.o statusheader.o styledpixmap.o switchtimer.o timeline.o timer.o tools.o tvguideosd.o OBJS = $(PLUGIN).o channelcolumn.o channelgroup.o channelgroups.o channeljump.o config.o detailview.o dummygrid.o epggrid.o fontmanager.o footer.o geometrymanager.o grid.o headergrid.o imagecache.o imageloader.o imagemagickwrapper.o imagescaler.o osdmanager.o recmanager.o recmenu.o recmenuitem.o recmenumanager.o recmenus.o setup.o statusheader.o styledpixmap.o switchtimer.o timeline.o timer.o timerconflict.o tools.o tvguideosd.o
### The main target: ### The main target:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
icons/recmenuicons/no.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
icons/recmenuicons/yes.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View File

@ -2,10 +2,10 @@
#include <sstream> #include <sstream>
#include <map> #include <map>
#include <vdr/channels.h> #include <vdr/channels.h>
#include "imagecache.h"
#include "config.h" #include "config.h"
#include "imagescaler.h" #include "imagescaler.h"
#include "tools.h" #include "tools.h"
#include "imagecache.h"
cImageCache::cImageCache() : cImageMagickWrapper() { cImageCache::cImageCache() : cImageMagickWrapper() {
tempStaticLogo = NULL; tempStaticLogo = NULL;
@ -372,6 +372,27 @@ cImage *cImageCache::GetLogo(const cChannel *channel) {
return NULL; return NULL;
} }
cImage *cImageCache::GetIcon(std::string name, int width, int height) {
std::stringstream iconName;
iconName << name << width << "x" << height;
std::map<std::string, cImage*>::iterator hit = iconCache.find(iconName.str());
if (hit != iconCache.end()) {
return (cImage*)hit->second;
} else {
std::stringstream iconPath;
iconPath << "recmenuicons/" << name;
bool success = LoadIcon(iconPath.str());
if (success) {
cImage *image = CreateImage(width, height);
iconCache.insert(std::pair<std::string, cImage*>(iconName.str(), image));
hit = iconCache.find(iconName.str());
if (hit != iconCache.end()) {
return (cImage*)hit->second;
}
}
}
return NULL;
}
void cImageCache::InsertIntoOsdElementCache(eOsdElementType type, int width, int height) { void cImageCache::InsertIntoOsdElementCache(eOsdElementType type, int width, int height) {
cImage *image = CreateImage(width, height, false); cImage *image = CreateImage(width, height, false);
@ -578,7 +599,7 @@ std::string cImageCache::GetCacheSize(eCacheType type) {
sizeByte += img->Width() * img->Height() * sizeof(tColor); sizeByte += img->Width() * img->Height() * sizeof(tColor);
} }
numImages = osdElementCache.size(); numImages = osdElementCache.size();
} else if ((type == ctGrid) || (type == ctLogo) || (type == ctChannelGroup)) { } else if ((type == ctGrid) || (type == ctLogo) || (type == ctChannelGroup) || (type == ctIcon)) {
std::map<std::string, cImage*> *cache; std::map<std::string, cImage*> *cache;
if (type == ctGrid) if (type == ctGrid)
cache = &gridCache; cache = &gridCache;
@ -586,6 +607,8 @@ std::string cImageCache::GetCacheSize(eCacheType type) {
cache = &logoCache; cache = &logoCache;
else if (type == ctChannelGroup) else if (type == ctChannelGroup)
cache = &groupsCache; cache = &groupsCache;
else if (type == ctIcon)
cache = &iconCache;
for(std::map<std::string, cImage*>::const_iterator it = cache->begin(); it != cache->end(); it++) { for(std::map<std::string, cImage*>::const_iterator it = cache->begin(); it != cache->end(); it++) {
cImage *img = (cImage*)it->second; cImage *img = (cImage*)it->second;
@ -622,6 +645,12 @@ void cImageCache::Clear(void) {
delete img; delete img;
} }
logoCache.clear(); logoCache.clear();
for(std::map<std::string, cImage*>::const_iterator it = iconCache.begin(); it != iconCache.end(); it++) {
cImage *img = (cImage*)it->second;
delete img;
}
iconCache.clear();
if (tempStaticLogo) if (tempStaticLogo)
delete tempStaticLogo; delete tempStaticLogo;

View File

@ -12,6 +12,7 @@ enum eCacheType {
ctGrid, ctGrid,
ctLogo, ctLogo,
ctChannelGroup, ctChannelGroup,
ctIcon,
}; };
enum eOsdElementType { enum eOsdElementType {
@ -41,6 +42,7 @@ public:
cImage *GetGrid(int width, int height, bool active); cImage *GetGrid(int width, int height, bool active);
cImage *GetChannelGroup(int width, int height); cImage *GetChannelGroup(int width, int height);
cImage *GetLogo(const cChannel *channel); cImage *GetLogo(const cChannel *channel);
cImage *GetIcon(std::string name, int width, int height);
std::string GetCacheSize(eCacheType type); std::string GetCacheSize(eCacheType type);
void Clear(void); void Clear(void);
private: private:
@ -68,6 +70,7 @@ private:
std::map<std::string, cImage*> gridCache; std::map<std::string, cImage*> gridCache;
std::map<std::string, cImage*> groupsCache; std::map<std::string, cImage*> groupsCache;
std::map<std::string, cImage*> logoCache; std::map<std::string, cImage*> logoCache;
std::map<std::string, cImage*> iconCache;
void CreateOsdIconCache(void); void CreateOsdIconCache(void);
void PrepareGridIconCache(void); void PrepareGridIconCache(void);
void CreateGridIconCache(void); void CreateGridIconCache(void);

View File

@ -77,8 +77,13 @@ bool cImageLoader::LoadPoster(const char *poster, int width, int height) {
bool cImageLoader::LoadIcon(const char *cIcon, int size) { bool cImageLoader::LoadIcon(const char *cIcon, int size) {
if (size==0) if (size==0)
return false; return false;
cString iconPathTheme = cString::sprintf("%s%s/recmenuicons/", *tvguideConfig.iconPath, *tvguideConfig.themeName);
bool success = false; bool success = false;
success = LoadImage(cIcon, *tvguideConfig.iconPath, "png"); success = LoadImage(cIcon, *iconPathTheme, "png");
if (!success) {
cString iconPathdefault = cString::sprintf("%s/recmenuicons/", *tvguideConfig.iconPath);
success = LoadImage(cIcon, *iconPathdefault, "png");
}
if (!success) if (!success)
return false; return false;
buffer.sample(Geometry(size, size)); buffer.sample(Geometry(size, size));

View File

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n" "Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2013-12-24 11:13+0100\n" "POT-Creation-Date: 2013-12-29 17:53+0100\n"
"PO-Revision-Date: 2013-09-21 17:49+0200\n" "PO-Revision-Date: 2013-09-21 17:49+0200\n"
"Last-Translator: My friend <Sampep> Thanks David <Gabychan> <gbonich@gmail.com>\n" "Last-Translator: My friend <Sampep> Thanks David <Gabychan> <gbonich@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -159,6 +159,27 @@ msgstr "No s'han trobat conflictes"
msgid "Close" msgid "Close"
msgstr "Tanca" msgstr "Tanca"
msgid "reruns for"
msgstr ""
msgid "rerun for"
msgstr ""
msgid "found"
msgstr ""
msgid "Ignore reruns"
msgstr ""
msgid "No reruns found for Event"
msgstr ""
msgid "Timer for"
msgstr ""
msgid "replaced by rerun"
msgstr ""
msgid "Timer Active" msgid "Timer Active"
msgstr "Temporitzador actiu" msgstr "Temporitzador actiu"
@ -644,3 +665,6 @@ msgstr ""
msgid "Channel Groups Cache" msgid "Channel Groups Cache"
msgstr "" msgstr ""
msgid "Recording Menus Icon Cache"
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n" "Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2013-12-24 11:13+0100\n" "POT-Creation-Date: 2013-12-29 17:53+0100\n"
"PO-Revision-Date: 2012-08-25 17:49+0200\n" "PO-Revision-Date: 2012-08-25 17:49+0200\n"
"Last-Translator: Horst\n" "Last-Translator: Horst\n"
"Language-Team: \n" "Language-Team: \n"
@ -156,6 +156,27 @@ msgstr "Keine Timerkonflikte gefunden"
msgid "Close" msgid "Close"
msgstr "Schließen" msgstr "Schließen"
msgid "reruns for"
msgstr ""
msgid "rerun for"
msgstr ""
msgid "found"
msgstr ""
msgid "Ignore reruns"
msgstr ""
msgid "No reruns found for Event"
msgstr ""
msgid "Timer for"
msgstr ""
msgid "replaced by rerun"
msgstr ""
msgid "Timer Active" msgid "Timer Active"
msgstr "Timer aktiv" msgstr "Timer aktiv"
@ -641,3 +662,6 @@ msgstr "EPG Grid Cache"
msgid "Channel Groups Cache" msgid "Channel Groups Cache"
msgstr "Kanalgruppen Cache" msgstr "Kanalgruppen Cache"
msgid "Recording Menus Icon Cache"
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 1.0.0\n" "Project-Id-Version: vdr-tvguide 1.0.0\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2013-12-24 11:13+0100\n" "POT-Creation-Date: 2013-12-29 17:53+0100\n"
"PO-Revision-Date: 2013-09-25 17:49+0400\n" "PO-Revision-Date: 2013-09-25 17:49+0400\n"
"Last-Translator: AmiD, ilya\n" "Last-Translator: AmiD, ilya\n"
"Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n" "Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n"
@ -156,6 +156,27 @@ msgstr "Таймер-конфликты не найдены"
msgid "Close" msgid "Close"
msgstr "Закрыть" msgstr "Закрыть"
msgid "reruns for"
msgstr ""
msgid "rerun for"
msgstr ""
msgid "found"
msgstr ""
msgid "Ignore reruns"
msgstr ""
msgid "No reruns found for Event"
msgstr ""
msgid "Timer for"
msgstr ""
msgid "replaced by rerun"
msgstr ""
msgid "Timer Active" msgid "Timer Active"
msgstr "Таймер активен" msgstr "Таймер активен"
@ -641,3 +662,6 @@ msgstr ""
msgid "Channel Groups Cache" msgid "Channel Groups Cache"
msgstr "" msgstr ""
msgid "Recording Menus Icon Cache"
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 1.1.0\n" "Project-Id-Version: vdr-tvguide 1.1.0\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2013-12-24 11:13+0100\n" "POT-Creation-Date: 2013-12-29 17:53+0100\n"
"PO-Revision-Date: 2013-09-15 00:12+0100\n" "PO-Revision-Date: 2013-09-15 00:12+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -156,6 +156,27 @@ msgstr "Nena
msgid "Close" msgid "Close"
msgstr "Zavrie»" msgstr "Zavrie»"
msgid "reruns for"
msgstr ""
msgid "rerun for"
msgstr ""
msgid "found"
msgstr ""
msgid "Ignore reruns"
msgstr ""
msgid "No reruns found for Event"
msgstr ""
msgid "Timer for"
msgstr ""
msgid "replaced by rerun"
msgstr ""
msgid "Timer Active" msgid "Timer Active"
msgstr "Plán aktívny" msgstr "Plán aktívny"
@ -641,3 +662,6 @@ msgstr ""
msgid "Channel Groups Cache" msgid "Channel Groups Cache"
msgstr "" msgstr ""
msgid "Recording Menus Icon Cache"
msgstr ""

View File

@ -9,21 +9,13 @@
#include "services/tvscraper.h" #include "services/tvscraper.h"
#include "tools.h" #include "tools.h"
#include "switchtimer.h" #include "switchtimer.h"
#include "timerconflict.h"
#include "recmanager.h" #include "recmanager.h"
static int CompareRecording(const void *p1, const void *p2) { static int CompareRecording(const void *p1, const void *p2) {
return (int)((*(cRecording **)p1)->Start() - (*(cRecording **)p2)->Start()); return (int)((*(cRecording **)p1)->Start() - (*(cRecording **)p2)->Start());
} }
bool TVGuideTimerConflict::timerInvolved(int involvedID) {
int numConflicts = timerIDs.size();
for (int i=0; i<numConflicts; i++) {
if (timerIDs[i] == involvedID)
return true;
}
return false;
}
cRecManager::cRecManager(void) { cRecManager::cRecManager(void) {
epgSearchPlugin = NULL; epgSearchPlugin = NULL;
epgSearchAvailable = false; epgSearchAvailable = false;
@ -225,100 +217,23 @@ bool cRecManager::IsRecorded(const cEvent *event) {
return timer->Recording(); return timer->Recording();
} }
std::vector<TVGuideTimerConflict> cRecManager::CheckTimerConflict(void) { cTVGuideTimerConflicts *cRecManager::CheckTimerConflict(void) {
/* TIMERCONFLICT FORMAT: cTVGuideTimerConflicts *conflictList = new cTVGuideTimerConflicts();
The result list looks like this for example when we have 2 timer conflicts at one time:
1190232780:152|30|50#152#45:45|10|50#152#45
'1190232780' is the time of the conflict in seconds since 1970-01-01.
It's followed by list of timers that have a conflict at this time:
'152|30|50#1 int editTimer(cTimer *timer, bool active, int prio, int start, int stop);
52#45' is the description of the first conflicting timer. Here:
'152' is VDR's timer id of this timer as returned from VDR's LSTT command
'30' is the percentage of recording that would be done (0...100)
'50#152#45' is the list of concurrent timers at this conflict
'45|10|50#152#45' describes the next conflict
*/
std::vector<TVGuideTimerConflict> results;
if (!epgSearchAvailable) if (!epgSearchAvailable)
return results; return conflictList;
Epgsearch_services_v1_1 *epgSearch = new Epgsearch_services_v1_1; Epgsearch_services_v1_1 *epgSearch = new Epgsearch_services_v1_1;
if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) { if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
std::list<std::string> conflicts = epgSearch->handler->TimerConflictList(); std::list<std::string> conflicts = epgSearch->handler->TimerConflictList();
int numConflicts = conflicts.size(); int numConflicts = conflicts.size();
if (numConflicts > 0) { if (numConflicts == 0)
for (std::list<std::string>::iterator it=conflicts.begin(); it != conflicts.end(); ++it) { return conflictList;
TVGuideTimerConflict sConflict; for (std::list<std::string>::iterator it=conflicts.begin(); it != conflicts.end(); ++it) {
splitstring s(it->c_str()); conflictList->AddConflict(*it);
std::vector<std::string> flds = s.split(':');
if (flds.size() < 2)
continue;
sConflict.time = atoi(flds[0].c_str());
splitstring s2(flds[1].c_str());
std::vector<std::string> flds2 = s2.split('|');
if (flds2.size() < 3)
continue;
sConflict.timerID = atoi(flds2[0].c_str());
sConflict.percentPossible = atoi(flds2[1].c_str());
splitstring s3(flds2[2].c_str());
std::vector<std::string> flds3 = s3.split('#');
std::vector<int> timerIDs;
for (int k = 0; k < flds3.size(); k++) {
timerIDs.push_back(atoi(flds3[k].c_str()) - 1);
}
sConflict.timerIDs = timerIDs;
results.push_back(sConflict);
}
} }
} }
delete epgSearch; delete epgSearch;
conflictList->CalculateConflicts();
int numConflicts = results.size(); return conflictList;
time_t startTime = 0;
time_t endTime = 0;
for (int i=0; i < numConflicts; i++) {
cTimeInterval *unionSet = NULL;
int numTimers = results[i].timerIDs.size();
for (int j=0; j < numTimers; j++) {
const cTimer *timer = Timers.Get(results[i].timerIDs[j]);
if (timer) {
if (!unionSet) {
unionSet = new cTimeInterval(timer->StartTime(), timer->StopTime());
} else {
cTimeInterval *timerInterval = new cTimeInterval(timer->StartTime(), timer->StopTime());
cTimeInterval *newUnion = unionSet->Union(timerInterval);
delete unionSet;
delete timerInterval;
unionSet = newUnion;
}
}
}
results[i].timeStart = unionSet->Start();
results[i].timeStop = unionSet->Stop();
delete unionSet;
cTimeInterval *intersect = NULL;
for (int j=0; j < numTimers; j++) {
const cTimer *timer = Timers.Get(results[i].timerIDs[j]);
if (timer) {
if (!intersect) {
intersect = new cTimeInterval(timer->StartTime(), timer->StopTime());
} else {
cTimeInterval *timerInterval = new cTimeInterval(timer->StartTime(), timer->StopTime());
cTimeInterval *newIntersect = intersect->Intersect(timerInterval);
if (newIntersect) {
delete intersect;
intersect = newIntersect;
}
delete timerInterval;
}
}
}
results[i].overlapStart = intersect->Start();
results[i].overlapStop = intersect->Stop();
delete intersect;
}
return results;
} }
cTimer *cRecManager::CreateSeriesTimer(cRecMenu *menu, std::string path) { cTimer *cRecManager::CreateSeriesTimer(cRecMenu *menu, std::string path) {
@ -747,4 +662,47 @@ cRecording **cRecManager::SearchForRecordings(cString searchString, int &numResu
return matchingRecordings; return matchingRecordings;
} }
return NULL; return NULL;
}
const cEvent **cRecManager::LoadReruns(const cEvent *event, int &numResults) {
if (epgSearchAvailable && !isempty(event->Title())) {
Epgsearch_searchresults_v1_0 data;
std::string strQuery = event->Title();
if (tvguideConfig.useSubtitleRerun > 0) {
if (tvguideConfig.useSubtitleRerun == 2 || !isempty(event->ShortText()))
strQuery += "~";
if (!isempty(event->ShortText()))
strQuery += event->ShortText();
data.useSubTitle = true;
} else {
data.useSubTitle = false;
}
data.query = (char *)strQuery.c_str();
data.mode = 0;
data.channelNr = 0;
data.useTitle = true;
data.useDescription = false;
if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data)) {
cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>* list = data.pResultList;
if (!list)
return NULL;
const cEvent **searchResults = NULL;
int numElements = list->Count();
if (numElements > 0) {
searchResults = new const cEvent *[numElements];
int index = 0;
for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r; r = list->Next(r)) {
if ((event->ChannelID() == r->event->ChannelID()) && (event->StartTime() == r->event->StartTime()))
continue;
searchResults[index] = r->event;
index++;
}
delete list;
numResults = index;
return searchResults;
}
}
}
return NULL;
} }

View File

@ -6,19 +6,7 @@
#include <vdr/plugin.h> #include <vdr/plugin.h>
#include "detailview.h" #include "detailview.h"
#include "recmenu.h" #include "recmenu.h"
#include "timerconflict.h"
class TVGuideTimerConflict {
public:
time_t time;
time_t timeStart;
time_t timeStop;
time_t overlapStart;
time_t overlapStop;
int percentPossible;
int timerID;
std::vector<int> timerIDs;
bool timerInvolved(int involvedID);
};
struct TVGuideEPGSearchTemplate { struct TVGuideEPGSearchTemplate {
public: public:
@ -49,7 +37,7 @@ public:
void DeleteRemoteTimer(const cEvent *event); void DeleteRemoteTimer(const cEvent *event);
void SaveTimer(cTimer *timer, cRecMenu *menu); void SaveTimer(cTimer *timer, cRecMenu *menu);
bool IsRecorded(const cEvent *event); bool IsRecorded(const cEvent *event);
std::vector<TVGuideTimerConflict> CheckTimerConflict(void); cTVGuideTimerConflicts *CheckTimerConflict(void);
cTimer *CreateSeriesTimer(cRecMenu *menu, std::string path); cTimer *CreateSeriesTimer(cRecMenu *menu, std::string path);
std::string BuildEPGSearchString(cString searchString, cRecMenu *menu); std::string BuildEPGSearchString(cString searchString, cRecMenu *menu);
std::string BuildEPGSearchString(cString searchString, std::string templValue); std::string BuildEPGSearchString(cString searchString, std::string templValue);
@ -61,6 +49,7 @@ public:
bool CreateSwitchTimer(const cEvent *event, cRecMenu *menu); bool CreateSwitchTimer(const cEvent *event, cRecMenu *menu);
void DeleteSwitchTimer(const cEvent *event); void DeleteSwitchTimer(const cEvent *event);
cRecording **SearchForRecordings(cString searchString, int &numResults); cRecording **SearchForRecordings(cString searchString, int &numResults);
const cEvent **LoadReruns(const cEvent *event, int &numResults);
virtual ~cRecManager (void); virtual ~cRecManager (void);
}; };

View File

@ -340,6 +340,7 @@ void cRecMenu::Arrange(bool scroll) {
if (!scroll) { if (!scroll) {
header->SetGeometry(xElement, yElement, widthElement); header->SetGeometry(xElement, yElement, widthElement);
header->SetPixmaps(); header->SetPixmaps();
header->setBackground();
} }
yElement += header->GetHeight(); yElement += header->GetHeight();
} }
@ -351,6 +352,7 @@ void cRecMenu::Arrange(bool scroll) {
if (footer && !scroll) { if (footer && !scroll) {
footer->SetGeometry(xElement, yElement, widthElement); footer->SetGeometry(xElement, yElement, widthElement);
footer->SetPixmaps(); footer->SetPixmaps();
footer->setBackground();
} }
} }

View File

@ -1,6 +1,7 @@
#include <math.h> #include <math.h>
#include <vdr/remote.h> #include <vdr/remote.h>
#include "imageloader.h" #include "imageloader.h"
#include "imagecache.h"
#include "tools.h" #include "tools.h"
#include "recmenuitem.h" #include "recmenuitem.h"
@ -253,6 +254,7 @@ void cRecMenuItemInfo::CalculateHeight(int textWidth) {
void cRecMenuItemInfo::setBackground(void) { void cRecMenuItemInfo::setBackground(void) {
pixmap->Fill(clrTransparent); pixmap->Fill(clrTransparent);
cRecMenuItem::setBackground();
} }
void cRecMenuItemInfo::Draw(void) { void cRecMenuItemInfo::Draw(void) {
@ -411,14 +413,14 @@ void cRecMenuItemBool::Draw(void) {
void cRecMenuItemBool::DrawValue(void) { void cRecMenuItemBool::DrawValue(void) {
pixmapVal->Fill(clrTransparent); pixmapVal->Fill(clrTransparent);
cString strIcon = yes?"yes":"no"; std::string strIcon = yes?"yes":"no";
int iconSize = height - 8; int iconSize = height - 8;
int iconX = width - iconSize - 10; int iconX = width - iconSize - 10;
int iconY = (height - iconSize) / 2; int iconY = (height - iconSize) / 2;
cImageLoader imgLoader;
if (imgLoader.LoadIcon(strIcon, iconSize)) { cImage *imgYesNo = imgCache.GetIcon(strIcon, iconSize, iconSize);
cImage icon = imgLoader.GetImage(); if (imgYesNo) {
pixmapVal->DrawImage(cPoint(iconX, iconY), icon); pixmapVal->DrawImage(cPoint(iconX, iconY), *imgYesNo);
} }
} }
@ -499,14 +501,14 @@ void cRecMenuItemSelect::DrawValue(void) {
int iconLeftX = textX - iconSize; int iconLeftX = textX - iconSize;
int iconRightX = width - iconSize; int iconRightX = width - iconSize;
int iconY = (height - iconSize) / 2; int iconY = (height - iconSize) / 2;
cImageLoader imgLoader;
if (imgLoader.LoadIcon("arrow_left", iconSize)) { cImage *imgLeft = imgCache.GetIcon("arrow_left", iconSize, iconSize);
cImage icon = imgLoader.GetImage(); if (imgLeft) {
pixmapVal->DrawImage(cPoint(iconLeftX, iconY), icon); pixmapVal->DrawImage(cPoint(iconLeftX, iconY), *imgLeft);
} }
if (imgLoader.LoadIcon("arrow_right", iconSize)) { cImage *imgRight = imgCache.GetIcon("arrow_right", iconSize, iconSize);
cImage icon = imgLoader.GetImage(); if (imgRight) {
pixmapVal->DrawImage(cPoint(iconRightX, iconY), icon); pixmapVal->DrawImage(cPoint(iconRightX, iconY), *imgRight);
} }
} }
@ -671,8 +673,7 @@ void cRecMenuItemText::ActivateKeyboard(void) {
bool draw = false; bool draw = false;
bool drawIcon = false; bool drawIcon = false;
cString strNum; cString strNum;
cString strIcon; std::string strIcon;
cImageLoader imgLoader;
if (num<10) { if (num<10) {
strNum = *cString::sprintf("%d", num); strNum = *cString::sprintf("%d", num);
draw = true; draw = true;
@ -701,10 +702,10 @@ void cRecMenuItemText::ActivateKeyboard(void) {
} }
if (drawIcon) { if (drawIcon) {
int iconSize = gridHeight - 10; int iconSize = gridHeight - 10;
if (imgLoader.LoadIcon(strIcon, iconSize)) { cImage *imgIcon = imgCache.GetIcon(strIcon, iconSize, iconSize);
cImage icon = imgLoader.GetImage(); if (imgIcon) {
int iconX = X + (gridWidth - iconSize) / 2; int iconX = X + (gridWidth - iconSize) / 2;
pixmapKeyboardIcons->DrawImage(cPoint(iconX, Y + 5), icon); pixmapKeyboardIcons->DrawImage(cPoint(iconX, Y + 5), *imgIcon);
} }
} }
num++; num++;
@ -1306,6 +1307,7 @@ cRecMenuItemTimer::cRecMenuItemTimer(const cTimer *timer,
eRecMenuState action1, eRecMenuState action1,
eRecMenuState action2, eRecMenuState action2,
eRecMenuState action3, eRecMenuState action3,
eRecMenuState action4,
time_t conflictStart, time_t conflictStart,
time_t conflictStop, time_t conflictStop,
time_t overlapStart, time_t overlapStart,
@ -1316,6 +1318,7 @@ cRecMenuItemTimer::cRecMenuItemTimer(const cTimer *timer,
this->action = action1; this->action = action1;
this->action2 = action2; this->action2 = action2;
this->action3 = action3; this->action3 = action3;
this->action4 = action4;
iconActive = 0; iconActive = 0;
this->conflictStart = conflictStart; this->conflictStart = conflictStart;
this->conflictStop = conflictStop; this->conflictStop = conflictStop;
@ -1382,48 +1385,57 @@ void cRecMenuItemTimer::Draw(void) {
int textHeightLine2 = height/2 - 5 + (height/4 - fontSmall->Height()) / 2; int textHeightLine2 = height/2 - 5 + (height/4 - fontSmall->Height()) / 2;
int textHeightLine3 = 3*height/4 - 5 + (height/4 - fontSmall->Height()) / 2; int textHeightLine3 = 3*height/4 - 5 + (height/4 - fontSmall->Height()) / 2;
const cEvent *event = timer->Event(); const cEvent *event = timer->Event();
cString timerTitle(""); std::string timerTitle = "";
if (event) if (event) {
timerTitle = event->Title(); timerTitle = event->Title();
timerTitle = CutText(timerTitle, (70 * width / 100) - textX, font);
}
cString timeStart = DayDateTime(timer->StartTime()); cString timeStart = DayDateTime(timer->StartTime());
cString timeEnd = TimeString(timer->StopTime()); cString timeEnd = TimeString(timer->StopTime());
cString timerTime = cString::sprintf("%s - %s", *timeStart, *timeEnd); cString timerTime = cString::sprintf("%s - %s", *timeStart, *timeEnd);
cString channelInfo = cString::sprintf("%s, %s %d", *channelName, tr("Transp."), channelTransponder); cString channelInfo = cString::sprintf("%s, %s %d", *channelName, tr("Transp."), channelTransponder);
pixmap->DrawText(cPoint(textX, textHeightLine1), *timerTitle, theme.Color(clrFont), colorTextBack, font); pixmapIcons->DrawText(cPoint(textX, textHeightLine1), timerTitle.c_str(), colorText, colorTextBack, font);
pixmap->DrawText(cPoint(textX, textHeightLine2), *timerTime, theme.Color(clrFont), colorTextBack, fontSmall); pixmapIcons->DrawText(cPoint(textX, textHeightLine2), *timerTime, colorText, colorTextBack, fontSmall);
pixmap->DrawText(cPoint(textX, textHeightLine3), *channelInfo, theme.Color(clrFont), colorTextBack, fontSmall); pixmapIcons->DrawText(cPoint(textX, textHeightLine3), *channelInfo, colorText, colorTextBack, fontSmall);
DrawTimerConflict(); DrawTimerConflict();
} }
int cRecMenuItemTimer::DrawIcons(void) { int cRecMenuItemTimer::DrawIcons(void) {
int iconsX = 10; int iconsX = 10;
int iconSize = 64; int iconSize = height/2;
int iconY = (height - iconSize) / 2; int iconY = (height - iconSize) / 2;
cString iconInfo, iconDelete, iconEdit; std::string iconInfo, iconDelete, iconEdit, iconSearch;
if (active) { if (active) {
iconInfo = (iconActive==0)?"info_active":"info_inactive"; iconInfo = (iconActive==0)?"info_active":"info_inactive";
iconDelete = (iconActive==1)?"delete_active":"delete_inactive"; iconDelete = (iconActive==1)?"delete_active":"delete_inactive";
iconEdit = (iconActive==2)?"edit_active":"edit_inactive"; iconEdit = (iconActive==2)?"edit_active":"edit_inactive";
iconSearch = (iconActive==3)?"search_active":"search_inactive";
} else { } else {
iconInfo = "info_inactive"; iconInfo = "info_inactive";
iconDelete = "delete_inactive"; iconDelete = "delete_inactive";
iconEdit = "edit_inactive"; iconEdit = "edit_inactive";
iconSearch = "search_inactive";
} }
cImageLoader imgLoader;
if (imgLoader.LoadIcon(iconInfo, iconSize)) { cImage *imgInfo = imgCache.GetIcon(iconInfo, iconSize, iconSize);
cImage icon = imgLoader.GetImage(); if (imgInfo) {
pixmapIcons->DrawImage(cPoint(iconsX, iconY), icon); pixmapIcons->DrawImage(cPoint(iconsX, iconY), *imgInfo);
iconsX += iconSize + 5; iconsX += iconSize + 5;
} }
if (imgLoader.LoadIcon(iconDelete, iconSize)) { cImage *imgDelete = imgCache.GetIcon(iconDelete, iconSize, iconSize);
cImage icon = imgLoader.GetImage(); if (imgDelete) {
pixmapIcons->DrawImage(cPoint(iconsX, iconY), icon); pixmapIcons->DrawImage(cPoint(iconsX, iconY), *imgDelete);
iconsX += iconSize + 5; iconsX += iconSize + 5;
} }
if (imgLoader.LoadIcon(iconEdit, iconSize)) { cImage *imgEdit = imgCache.GetIcon(iconEdit, iconSize, iconSize);
cImage icon = imgLoader.GetImage(); if (imgEdit) {
pixmapIcons->DrawImage(cPoint(iconsX, iconY), icon); pixmapIcons->DrawImage(cPoint(iconsX, iconY), *imgEdit);
iconsX += iconSize + 5;
}
cImage *imgSearch = imgCache.GetIcon(iconSearch, iconSize, iconSize);
if (imgSearch) {
pixmapIcons->DrawImage(cPoint(iconsX, iconY), *imgSearch);
iconsX += iconSize + 5; iconsX += iconSize + 5;
} }
return iconsX; return iconsX;
@ -1461,7 +1473,7 @@ eRecMenuState cRecMenuItemTimer::ProcessKey(eKeys Key) {
return rmsNotConsumed; return rmsNotConsumed;
break; break;
case kRight: case kRight:
if (iconActive < 2) { if (iconActive < 3) {
iconActive++; iconActive++;
DrawIcons(); DrawIcons();
return rmsConsumed; return rmsConsumed;
@ -1475,6 +1487,8 @@ eRecMenuState cRecMenuItemTimer::ProcessKey(eKeys Key) {
return action2; return action2;
else if (iconActive == 2) else if (iconActive == 2)
return action3; return action3;
else if (iconActive == 3)
return action4;
break; break;
default: default:
break; break;
@ -1521,6 +1535,7 @@ void cRecMenuItemTimerConflictHeader::Show(void) {
void cRecMenuItemTimerConflictHeader::setBackground(void) { void cRecMenuItemTimerConflictHeader::setBackground(void) {
pixmap->Fill(clrTransparent); pixmap->Fill(clrTransparent);
cRecMenuItem::setBackground();
} }
void cRecMenuItemTimerConflictHeader::Draw(void) { void cRecMenuItemTimerConflictHeader::Draw(void) {
@ -1550,10 +1565,10 @@ void cRecMenuItemTimerConflictHeader::Draw(void) {
int xConflStop = width - fontSmall->Width(*strConflStop) - 2; int xConflStop = width - fontSmall->Width(*strConflStop) - 2;
int xOverlapStart = xOverlap - fontSmall->Width(*strOverlapStart) - 2; int xOverlapStart = xOverlap - fontSmall->Width(*strOverlapStart) - 2;
int xOverlapStop = xOverlap + widthOverlap + 2; int xOverlapStop = xOverlap + widthOverlap + 2;
pixmap->DrawText(cPoint(xConflStart, y1), *strConflStart, theme.Color(clrRecMenuTimerConflictBar), colorTextBack, fontSmall); pixmap->DrawText(cPoint(xConflStart, y1), *strConflStart, theme.Color(clrRecMenuTimerConflictBar), theme.Color(clrRecMenuTimerConflictBackground), fontSmall);
pixmap->DrawText(cPoint(xConflStop, y1), *strConflStop, theme.Color(clrRecMenuTimerConflictBar), colorTextBack, fontSmall); pixmap->DrawText(cPoint(xConflStop, y1), *strConflStop, theme.Color(clrRecMenuTimerConflictBar), theme.Color(clrRecMenuTimerConflictBackground), fontSmall);
pixmap->DrawText(cPoint(xOverlapStart, y2), *strOverlapStart, theme.Color(clrRecMenuTimerConflictOverlap), colorTextBack, fontSmall); pixmap->DrawText(cPoint(xOverlapStart, y2), *strOverlapStart, theme.Color(clrRecMenuTimerConflictOverlap), theme.Color(clrRecMenuTimerConflictBackground), fontSmall);
pixmap->DrawText(cPoint(xOverlapStop, y2), *strOverlapStop, theme.Color(clrRecMenuTimerConflictOverlap), colorTextBack, fontSmall); pixmap->DrawText(cPoint(xOverlapStop, y2), *strOverlapStop, theme.Color(clrRecMenuTimerConflictOverlap), theme.Color(clrRecMenuTimerConflictBackground), fontSmall);
} }
// --- cRecMenuItemEvent ------------------------------------------------------- // --- cRecMenuItemEvent -------------------------------------------------------
@ -1631,9 +1646,9 @@ void cRecMenuItemEvent::Draw(void) {
int cRecMenuItemEvent::DrawIcons(void) { int cRecMenuItemEvent::DrawIcons(void) {
pixmapIcons->Fill(clrTransparent); pixmapIcons->Fill(clrTransparent);
int iconsX = 10; int iconsX = 10;
int iconSize = 64; int iconSize = height / 2;
int iconY = (height - iconSize) / 2; int iconY = (height - iconSize) / 2;
cString iconInfo, iconRecord; std::string iconInfo, iconRecord;
if (active) { if (active) {
iconInfo = (iconActive==0)?"info_active":"info_inactive"; iconInfo = (iconActive==0)?"info_active":"info_inactive";
if (action2 != rmsDisabled) if (action2 != rmsDisabled)
@ -1643,17 +1658,18 @@ int cRecMenuItemEvent::DrawIcons(void) {
if (action2 != rmsDisabled) if (action2 != rmsDisabled)
iconRecord = "record_inactive"; iconRecord = "record_inactive";
} }
cImageLoader imgLoader; cImage *imgInfo = imgCache.GetIcon(iconInfo, iconSize, iconSize);
if (imgLoader.LoadIcon(iconInfo, iconSize)) { if (imgInfo) {
cImage icon = imgLoader.GetImage(); pixmapIcons->DrawImage(cPoint(iconsX, iconY), *imgInfo);
pixmapIcons->DrawImage(cPoint(iconsX, iconY), icon);
iconsX += iconSize + 5;
}
if ((action2 != rmsDisabled) && imgLoader.LoadIcon(iconRecord, iconSize)) {
cImage icon = imgLoader.GetImage();
pixmapIcons->DrawImage(cPoint(iconsX, iconY), icon);
iconsX += iconSize + 5; iconsX += iconSize + 5;
} }
if (action2 != rmsDisabled) {
cImage *imgRec = imgCache.GetIcon(iconRecord, iconSize, iconSize);
if (imgRec) {
pixmapIcons->DrawImage(cPoint(iconsX, iconY), *imgRec);
iconsX += iconSize + 5;
}
}
return iconsX; return iconsX;
} }

View File

@ -18,6 +18,7 @@ enum eRecMenuState {
rmsIgnoreTimerConflict, rmsIgnoreTimerConflict,
rmsDeleteTimerConflictMenu, rmsDeleteTimerConflictMenu,
rmsEditTimerConflictMenu, rmsEditTimerConflictMenu,
rmsSearchRerunsTimerConflictMenu,
rmsSaveTimerConflictMenu, rmsSaveTimerConflictMenu,
rmsTimerConflictShowInfo, rmsTimerConflictShowInfo,
rmsDeleteTimer, rmsDeleteTimer,
@ -51,6 +52,8 @@ enum eRecMenuState {
rmsRecordingSearchResult, rmsRecordingSearchResult,
rmsTimerConflict, rmsTimerConflict,
rmsTimerConflicts, rmsTimerConflicts,
rmsTimerConflictIgnoreReruns,
rmsTimerConflictRecordRerun,
rmsDisabled, rmsDisabled,
}; };
@ -331,6 +334,7 @@ private:
const cTimer *timer; const cTimer *timer;
eRecMenuState action2; eRecMenuState action2;
eRecMenuState action3; eRecMenuState action3;
eRecMenuState action4;
int iconActive; int iconActive;
cPixmap *pixmapIcons; cPixmap *pixmapIcons;
cPixmap *pixmapStatus; cPixmap *pixmapStatus;
@ -345,6 +349,7 @@ public:
eRecMenuState action1, eRecMenuState action1,
eRecMenuState action2, eRecMenuState action2,
eRecMenuState action3, eRecMenuState action3,
eRecMenuState action4,
time_t conflictStart, time_t conflictStart,
time_t conflictStop, time_t conflictStop,
time_t overlapStart, time_t overlapStart,

View File

@ -1,6 +1,7 @@
#include "recmenu.h" #include "recmenu.h"
#include "recmenus.h" #include "recmenus.h"
#include "switchtimer.h" #include "switchtimer.h"
#include "timerconflict.h"
#include "recmenumanager.h" #include "recmenumanager.h"
cRecMenuManager::cRecMenuManager(void) { cRecMenuManager::cRecMenuManager(void) {
@ -11,10 +12,11 @@ cRecMenuManager::cRecMenuManager(void) {
recManager->SetEPGSearchPlugin(); recManager->SetEPGSearchPlugin();
instantRecord = false; instantRecord = false;
folderChoosen = false; folderChoosen = false;
currentConflict = -1; timerConflicts = NULL;
templateID = -1; templateID = -1;
timer = NULL; timer = NULL;
recFolder = ""; recFolderSeriesTimer = "";
recFolderInstantTimer = "";
searchWithOptions = false; searchWithOptions = false;
detailViewActive = false; detailViewActive = false;
} }
@ -25,6 +27,10 @@ cRecMenuManager::~cRecMenuManager(void) {
delete activeMenu; delete activeMenu;
activeMenu = NULL; activeMenu = NULL;
} }
if (timerConflicts) {
delete timerConflicts;
timerConflicts = NULL;
}
delete recManager; delete recManager;
} }
@ -33,10 +39,11 @@ void cRecMenuManager::Start(const cEvent *event) {
activeMenuBuffer = NULL; activeMenuBuffer = NULL;
instantRecord = false; instantRecord = false;
folderChoosen = false; folderChoosen = false;
currentConflict = -1; timerConflicts = NULL;
templateID = -1; templateID = -1;
timer = NULL; timer = NULL;
recFolder = ""; recFolderSeriesTimer = "";
recFolderInstantTimer = "";
searchWithOptions = false; searchWithOptions = false;
detailViewActive = false; detailViewActive = false;
SetBackground(); SetBackground();
@ -53,6 +60,10 @@ void cRecMenuManager::Close(void) {
delete activeMenu; delete activeMenu;
activeMenu = NULL; activeMenu = NULL;
} }
if (timerConflicts) {
delete timerConflicts;
timerConflicts = NULL;
}
DeleteBackground(); DeleteBackground();
} }
@ -83,14 +94,14 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
//Creating timer for active Event //Creating timer for active Event
//if no conflict, confirm and exit //if no conflict, confirm and exit
instantRecord = true; instantRecord = true;
cString folder = ""; recFolderInstantTimer = "";
if (folderChoosen) { if (folderChoosen) {
int activeItem = activeMenu->GetActive(false); int activeItem = activeMenu->GetActive(false);
if (activeItem > 0) if (activeItem > 0)
folder = activeMenu->GetStringValue(activeItem); recFolderInstantTimer = activeMenu->GetStringValue(activeItem);
} }
delete activeMenu; delete activeMenu;
cTimer *timer = recManager->createTimer(event, *folder); cTimer *timer = recManager->createTimer(event, *recFolderInstantTimer);
if (!displayTimerConflict(timer)) { if (!displayTimerConflict(timer)) {
activeMenu = new cRecMenuConfirmTimer(event); activeMenu = new cRecMenuConfirmTimer(event);
activeMenu->Display(); activeMenu->Display();
@ -116,7 +127,7 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
break; break;
case rmsTimerConflictShowInfo: { case rmsTimerConflictShowInfo: {
int timerIndex = activeMenu->GetActive(true); int timerIndex = activeMenu->GetActive(true);
int timerID = conflictList[currentConflict].timerIDs[timerIndex]; int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
cTimer *t = Timers.Get(timerID); cTimer *t = Timers.Get(timerID);
if (t) { if (t) {
const cEvent *ev = t->Event(); const cEvent *ev = t->Event();
@ -135,7 +146,7 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
//delete timer out of current timer conflict //delete timer out of current timer conflict
//active menu: cRecMenuTimerConflict //active menu: cRecMenuTimerConflict
int timerIndex = activeMenu->GetActive(true); int timerIndex = activeMenu->GetActive(true);
int timerID = conflictList[currentConflict].timerIDs[timerIndex]; int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
recManager->DeleteTimer(timerID); recManager->DeleteTimer(timerID);
delete activeMenu; delete activeMenu;
if (!displayTimerConflict(timerID)) { if (!displayTimerConflict(timerID)) {
@ -146,8 +157,8 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
case rmsEditTimerConflictMenu: { case rmsEditTimerConflictMenu: {
//edit timer out of current timer conflict //edit timer out of current timer conflict
//active menu: cRecMenuTimerConflict //active menu: cRecMenuTimerConflict
int activeItem = activeMenu->GetActive(true); int timerIndex = activeMenu->GetActive(true);
int timerID = conflictList[currentConflict].timerIDs[activeItem]; int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
timer = Timers.Get(timerID); timer = Timers.Get(timerID);
if (timer) { if (timer) {
delete activeMenu; delete activeMenu;
@ -201,11 +212,11 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
* --------- SERIES TIMER --------------------------------- * --------- SERIES TIMER ---------------------------------
*/ */
case rmsSeriesTimer: { case rmsSeriesTimer: {
recFolder = ""; recFolderSeriesTimer = "";
if (folderChoosen) { if (folderChoosen) {
int activeItem = activeMenu->GetActive(false); int activeItem = activeMenu->GetActive(false);
if (activeItem > 0) if (activeItem > 0)
recFolder = activeMenu->GetStringValue(activeItem); recFolderSeriesTimer = activeMenu->GetStringValue(activeItem);
} }
delete activeMenu; delete activeMenu;
cChannel *channel = Channels.GetByChannelID(event->ChannelID()); cChannel *channel = Channels.GetByChannelID(event->ChannelID());
@ -220,7 +231,7 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
activeMenu->Display(); activeMenu->Display();
break; break;
case rmsSeriesTimerCreate: { case rmsSeriesTimerCreate: {
cTimer *seriesTimer = recManager->CreateSeriesTimer(activeMenu, *recFolder); cTimer *seriesTimer = recManager->CreateSeriesTimer(activeMenu, *recFolderSeriesTimer);
delete activeMenu; delete activeMenu;
activeMenu = new cRecMenuConfirmSeriesTimer(seriesTimer); activeMenu = new cRecMenuConfirmSeriesTimer(seriesTimer);
activeMenu->Display(); activeMenu->Display();
@ -438,25 +449,79 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
case rmsTimerConflicts: { case rmsTimerConflicts: {
//Show timer conflict //Show timer conflict
//active menu: cRecMenuTimerConflicts //active menu: cRecMenuTimerConflicts
conflictList = recManager->CheckTimerConflict(); if (timerConflicts) {
delete timerConflicts;
}
timerConflicts = recManager->CheckTimerConflict();
delete activeMenu; delete activeMenu;
int numConflicts = conflictList.size(); int numConflicts = timerConflicts->NumConflicts();
if (numConflicts > 0) { if (numConflicts > 0) {
activeMenu = new cRecMenuTimerConflicts(conflictList); activeMenu = new cRecMenuTimerConflicts(timerConflicts);
} else { } else {
activeMenu = new cRecMenuNoTimerConflict(); activeMenu = new cRecMenuNoTimerConflict();
} }
activeMenu->Display(); activeMenu->Display();
break; } break; }
case rmsTimerConflict: case rmsTimerConflict: {
//Show timer conflict //Show timer conflict
//active menu: cRecMenuTimerConflicts //active menu: cRecMenuTimerConflicts
currentConflict = activeMenu->GetActive(true); if (!timerConflicts)
break;
timerConflicts->SetCurrentConflict(activeMenu->GetActive(true));
delete activeMenu; delete activeMenu;
activeMenu = new cRecMenuTimerConflict(conflictList[currentConflict]); activeMenu = new cRecMenuTimerConflict(timerConflicts->GetCurrentConflict());
activeMenu->Display(); activeMenu->Display();
break; break; }
case rmsSearchRerunsTimerConflictMenu: {
//Show reruns for timer from timer conflict
//active menu: cRecMenuTimerConflict
if (!timerConflicts)
break;
int activeItem = activeMenu->GetActive(true);
int timerID = timerConflicts->GetCurrentConflictTimerID(activeItem);
timer = Timers.Get(timerID);
if (timer) {
const cEvent *event = timer->Event();
if (event) {
int numReruns = 0;
const cEvent **reruns = recManager->LoadReruns(event, numReruns);
if (reruns && (numReruns > 0)) {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuRerunResults(event, reruns, numReruns);
activeMenu->Display();
} else {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuNoRerunsFound((event->Title())?event->Title():"");
activeMenu->Display();
}
}
}
break; }
case rmsTimerConflictIgnoreReruns: {
delete activeMenu;
activeMenu = activeMenuBuffer;
activeMenuBuffer = NULL;
activeMenu->Show();
break; }
case rmsTimerConflictRecordRerun: {
const cEvent *replace = activeMenu->GetEventValue(activeMenu->GetActive(false));
int originalConflictIndex = activeMenuBuffer->GetActive(false);
int originalTimerID = timerConflicts->GetCurrentConflictTimerID(originalConflictIndex);
cTimer *timerOriginal = Timers.Get(originalTimerID);
if (replace && timerOriginal) {
recManager->DeleteTimer(timerOriginal->Event());
recManager->createTimer(replace, *recFolderInstantTimer);
delete activeMenu;
if (activeMenuBuffer) {
delete activeMenuBuffer;
activeMenuBuffer = NULL;
}
activeMenu = new cRecMenuConfirmRerunUsed(timerOriginal->Event(), replace);
activeMenu->Display();
}
break; }
/* /*
* --------- COMMON --------------------------------- * --------- COMMON ---------------------------------
*/ */
@ -489,20 +554,18 @@ bool cRecMenuManager::displayTimerConflict(cTimer *timer) {
} }
bool cRecMenuManager::displayTimerConflict(int timerID) { bool cRecMenuManager::displayTimerConflict(int timerID) {
conflictList = recManager->CheckTimerConflict(); if (timerConflicts)
int numConflicts = conflictList.size(); delete timerConflicts;
int showTimerConflict = -1; timerConflicts = recManager->CheckTimerConflict();
if (numConflicts > 0) { if (!timerConflicts)
for (int i=0; i<numConflicts; i++) { return false;
if (conflictList[i].timerInvolved(timerID)) { int showTimerConflict = timerConflicts->GetCorrespondingConflict(timerID);
showTimerConflict = i;
break;
}
}
}
if (showTimerConflict > -1) { if (showTimerConflict > -1) {
currentConflict = showTimerConflict; timerConflicts->SetCurrentConflict(showTimerConflict);
activeMenu = new cRecMenuTimerConflict(conflictList[currentConflict]); cTVGuideTimerConflict *conflict = timerConflicts->GetCurrentConflict();
if (!conflict)
return false;
activeMenu = new cRecMenuTimerConflict(conflict);
activeMenu->Display(); activeMenu->Display();
return true; return true;
} }

View File

@ -13,15 +13,15 @@ private:
cRecMenu *activeMenuBuffer; cRecMenu *activeMenuBuffer;
const cEvent *event; const cEvent *event;
cRecManager *recManager; cRecManager *recManager;
std::vector<TVGuideTimerConflict> conflictList; cTVGuideTimerConflicts *timerConflicts;
std::vector<TVGuideEPGSearchTemplate> epgSearchTemplates; std::vector<TVGuideEPGSearchTemplate> epgSearchTemplates;
bool instantRecord; bool instantRecord;
bool folderChoosen; bool folderChoosen;
int currentConflict; cString recFolderInstantTimer;
int templateID; int templateID;
bool searchWithOptions; bool searchWithOptions;
cTimer *timer; cTimer *timer;
cString recFolder; cString recFolderSeriesTimer;
cString searchString; cString searchString;
cDetailView *detailView; cDetailView *detailView;
cPixmap *pixmapBackground; cPixmap *pixmapBackground;

View File

@ -177,20 +177,23 @@ cRecMenuAskDeleteTimer::cRecMenuAskDeleteTimer(const cEvent *event) {
} }
// --- cRecMenuTimerConflicts --------------------------------------------------------- // --- cRecMenuTimerConflicts ---------------------------------------------------------
cRecMenuTimerConflicts::cRecMenuTimerConflicts(std::vector<TVGuideTimerConflict> conflicts) { cRecMenuTimerConflicts::cRecMenuTimerConflicts(cTVGuideTimerConflicts *conflicts) {
int numConflicts = conflicts.size(); int numConflicts = conflicts->NumConflicts();
cString text; cString text;
if (numConflicts == 1) { if (numConflicts == 1) {
text = cString::sprintf("%s %s %s", tr("One"), tr("Timer Conflict"), tr("detected")); text = cString::sprintf("%s %s %s", tr("One"), tr("Timer Conflict"), tr("detected"));
} else { } else {
text = cString::sprintf("%d %s %s", (int)conflicts.size(), tr("Timer Conflicts"), tr("detected")); text = cString::sprintf("%d %s %s", conflicts->NumConflicts(), tr("Timer Conflicts"), tr("detected"));
} }
cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text); cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text);
for (int i=0; i<numConflicts; i++) { for (int i=0; i<numConflicts; i++) {
cString dateTime = DayDateTime(conflicts[i].time); cTVGuideTimerConflict *conflict = conflicts->GetConflict(i);
int numTimers = conflicts[i].timerIDs.size(); if (!conflict)
continue;
cString dateTime = DayDateTime(conflict->time);
int numTimers = conflict->timerIDs.size();
cString textConflict = cString::sprintf("%s: %s (%d %s)", tr("Show conflict"), *dateTime, numTimers, tr("timers involved")); cString textConflict = cString::sprintf("%s: %s (%d %s)", tr("Show conflict"), *dateTime, numTimers, tr("timers involved"));
bool isActive = (i==0)?true:false; bool isActive = (i==0)?true:false;
AddMenuItem(new cRecMenuItemButton(*textConflict, rmsTimerConflict, isActive)); AddMenuItem(new cRecMenuItemButton(*textConflict, rmsTimerConflict, isActive));
@ -207,26 +210,27 @@ cRecMenuTimerConflicts::cRecMenuTimerConflicts(std::vector<TVGuideTimerConflict>
} }
// --- cRecMenuTimerConflict --------------------------------------------------------- // --- cRecMenuTimerConflict ---------------------------------------------------------
cRecMenuTimerConflict::cRecMenuTimerConflict(TVGuideTimerConflict conflict) { cRecMenuTimerConflict::cRecMenuTimerConflict(cTVGuideTimerConflict *conflict) {
SetWidthPercent(80); SetWidthPercent(95);
this->conflict = conflict; this->conflict = conflict;
SetHeader(new cRecMenuItemTimerConflictHeader(conflict.timeStart, SetHeader(new cRecMenuItemTimerConflictHeader(conflict->timeStart,
conflict.timeStop, conflict->timeStop,
conflict.overlapStart, conflict->overlapStart,
conflict.overlapStop)); conflict->overlapStop));
SetFooter(new cRecMenuItemButton(tr("Ignore Conflict"), rmsIgnoreTimerConflict, false, true)); SetFooter(new cRecMenuItemButton(tr("Ignore Conflict"), rmsIgnoreTimerConflict, false, true));
int i=0; int i=0;
for(std::vector<int>::iterator it = conflict.timerIDs.begin(); it != conflict.timerIDs.end(); it++) { for(std::vector<int>::iterator it = conflict->timerIDs.begin(); it != conflict->timerIDs.end(); it++) {
const cTimer *timer = Timers.Get(*it); const cTimer *timer = Timers.Get(*it);
if (timer) { if (timer) {
AddMenuItemScroll(new cRecMenuItemTimer( timer, AddMenuItemScroll(new cRecMenuItemTimer( timer,
rmsTimerConflictShowInfo, rmsTimerConflictShowInfo,
rmsDeleteTimerConflictMenu, rmsDeleteTimerConflictMenu,
rmsEditTimerConflictMenu, rmsEditTimerConflictMenu,
conflict.timeStart, rmsSearchRerunsTimerConflictMenu,
conflict.timeStop, conflict->timeStart,
conflict.overlapStart, conflict->timeStop,
conflict.overlapStop, conflict->overlapStart,
conflict->overlapStop,
(!i)?true:false) (!i)?true:false)
); );
i++; i++;
@ -240,16 +244,17 @@ cRecMenuTimerConflict::cRecMenuTimerConflict(TVGuideTimerConflict conflict) {
} }
cRecMenuItem *cRecMenuTimerConflict::GetMenuItem(int number) { cRecMenuItem *cRecMenuTimerConflict::GetMenuItem(int number) {
if ((number >= 0) && (number < conflict.timerIDs.size())) { if ((number >= 0) && (number < conflict->timerIDs.size())) {
const cTimer *timer = Timers.Get(conflict.timerIDs[number]); const cTimer *timer = Timers.Get(conflict->timerIDs[number]);
cRecMenuItem *result = new cRecMenuItemTimer( timer, cRecMenuItem *result = new cRecMenuItemTimer( timer,
rmsTimerConflictShowInfo, rmsTimerConflictShowInfo,
rmsDeleteTimerConflictMenu, rmsDeleteTimerConflictMenu,
rmsEditTimerConflictMenu, rmsEditTimerConflictMenu,
conflict.timeStart, rmsSearchRerunsTimerConflictMenu,
conflict.timeStop, conflict->timeStart,
conflict.overlapStart, conflict->timeStop,
conflict.overlapStop, conflict->overlapStart,
conflict->overlapStop,
false); false);
return result; return result;
} }
@ -257,7 +262,7 @@ cRecMenuItem *cRecMenuTimerConflict::GetMenuItem(int number) {
} }
int cRecMenuTimerConflict::GetTotalNumMenuItems(void) { int cRecMenuTimerConflict::GetTotalNumMenuItems(void) {
return conflict.timerIDs.size(); return conflict->timerIDs.size();
} }
// --- cRecMenuNoTimerConflict --------------------------------------------------------- // --- cRecMenuNoTimerConflict ---------------------------------------------------------
@ -273,6 +278,90 @@ cRecMenuNoTimerConflict::cRecMenuNoTimerConflict(void) {
Arrange(); Arrange();
} }
// --- cRecMenuRerunResults ---------------------------------------------------------
cRecMenuRerunResults::cRecMenuRerunResults(const cEvent *original, const cEvent **reruns, int numReruns) {
this->reruns = reruns;
this->numReruns = numReruns;
SetWidthPercent(70);
this->numReruns = numReruns;
cString message1 = tr("reruns for");
cString message2 = tr("rerun for");
cString message3 = tr("found");
cString infoText = cString::sprintf("%d %s:\n\"%s\" %s", numReruns, (numReruns>1)?(*message1):(*message2), original->Title(), *message3);
cRecMenuItem *infoItem = new cRecMenuItemInfo(*infoText);
infoItem->CalculateHeight(width - 2 * border);
SetHeader(infoItem);
cRecMenuItem *button = new cRecMenuItemButton(tr("Ignore reruns"), rmsTimerConflictIgnoreReruns, false);
SetFooter(button);
if (reruns && (numReruns > 0)) {
for (int i=0; i<numReruns; i++) {
AddMenuItemScroll(new cRecMenuItemEvent(reruns[i], rmsSearchShowInfo, rmsTimerConflictRecordRerun, (i==0)?true:false));
if (!CheckHeight())
break;
}
}
CalculateHeight();
CreatePixmap();
Arrange();
}
cRecMenuItem *cRecMenuRerunResults::GetMenuItem(int number) {
if ((number >= 0) && (number < numReruns)) {
cRecMenuItem *result = new cRecMenuItemEvent(reruns[number], rmsSearchShowInfo, rmsTimerConflictRecordRerun, false);
return result;
}
return NULL;
}
int cRecMenuRerunResults::GetTotalNumMenuItems(void) {
return numReruns;
}
// --- cRecMenuNoRerunsFound ---------------------------------------------------------
cRecMenuNoRerunsFound::cRecMenuNoRerunsFound(cString searchString) {
SetWidthPercent(50);
cString message = tr("No reruns found for Event");
cString text = cString::sprintf("%s\n\"%s\"",
*message,
*searchString);
cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text);
infoItem->CalculateHeight(width - 2 * border);
AddMenuItem(infoItem);
AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsTimerConflictIgnoreReruns, true, true));
CalculateHeight();
CreatePixmap();
Arrange();
}
// --- cRecMenuConfirmRerunUsed ---------------------------------------------------------
cRecMenuConfirmRerunUsed::cRecMenuConfirmRerunUsed(const cEvent *original, const cEvent *replace) {
SetWidthPercent(70);
cString channelOrig = Channels.GetByChannelID(original->ChannelID())->Name();
cString channelReplace = Channels.GetByChannelID(replace->ChannelID())->Name();
cString message1 = tr("Timer for");
cString message2 = tr("replaced by rerun");
cString text = cString::sprintf("%s\n\"%s\", %s %s, %s\n%s\n\"%s\", %s %s, %s",
*message1,
original->Title(),
*original->GetDateString(),
*original->GetTimeString(),
*channelOrig,
*message2,
replace->Title(),
*replace->GetDateString(),
*replace->GetTimeString(),
*channelReplace);
cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*text);
infoItem->CalculateHeight(width - 2 * border);
AddMenuItem(infoItem);
AddMenuItem(new cRecMenuItemButton(tr("OK"), rmsTimerConflicts, true, true));
CalculateHeight();
CreatePixmap();
Arrange();
}
// --- cRecMenuEditTimer --------------------------------------------------------- // --- cRecMenuEditTimer ---------------------------------------------------------
cRecMenuEditTimer::cRecMenuEditTimer(const cTimer *timer, eRecMenuState nextState) { cRecMenuEditTimer::cRecMenuEditTimer(const cTimer *timer, eRecMenuState nextState) {
SetWidthPercent(60); SetWidthPercent(60);

View File

@ -51,16 +51,16 @@ public:
// --- cRecMenuTimerConflicts --------------------------------------------------------- // --- cRecMenuTimerConflicts ---------------------------------------------------------
class cRecMenuTimerConflicts: public cRecMenu { class cRecMenuTimerConflicts: public cRecMenu {
public: public:
cRecMenuTimerConflicts(std::vector<TVGuideTimerConflict> conflicts); cRecMenuTimerConflicts(cTVGuideTimerConflicts *conflicts);
virtual ~cRecMenuTimerConflicts(void) {}; virtual ~cRecMenuTimerConflicts(void) {};
}; };
// --- cRecMenuTimerConflict --------------------------------------------------------- // --- cRecMenuTimerConflict ---------------------------------------------------------
class cRecMenuTimerConflict: public cRecMenu { class cRecMenuTimerConflict: public cRecMenu {
private: private:
TVGuideTimerConflict conflict; cTVGuideTimerConflict *conflict;
public: public:
cRecMenuTimerConflict(TVGuideTimerConflict conflict); cRecMenuTimerConflict(cTVGuideTimerConflict *conflict);
cRecMenuItem *GetMenuItem(int number); cRecMenuItem *GetMenuItem(int number);
int GetTotalNumMenuItems(void); int GetTotalNumMenuItems(void);
virtual ~cRecMenuTimerConflict(void) {}; virtual ~cRecMenuTimerConflict(void) {};
@ -73,6 +73,34 @@ public:
virtual ~cRecMenuNoTimerConflict(void) {}; virtual ~cRecMenuNoTimerConflict(void) {};
}; };
// --- cRecMenuRerunResults ---------------------------------------------------------
class cRecMenuRerunResults: public cRecMenu {
private:
const cEvent **reruns;
int numReruns;
public:
cRecMenuRerunResults(const cEvent *original, const cEvent **reruns, int numReruns);
cRecMenuItem *GetMenuItem(int number);
int GetTotalNumMenuItems(void);
virtual ~cRecMenuRerunResults(void) {
delete[] reruns;
};
};
// --- cRecMenuNoRerunsFound ---------------------------------------------------------
class cRecMenuNoRerunsFound: public cRecMenu {
public:
cRecMenuNoRerunsFound(cString searchString);
virtual ~cRecMenuNoRerunsFound(void) {};
};
// --- cRecMenuConfirmRerunUsed ---------------------------------------------------------
class cRecMenuConfirmRerunUsed: public cRecMenu {
public:
cRecMenuConfirmRerunUsed(const cEvent *original, const cEvent *replace);
virtual ~cRecMenuConfirmRerunUsed(void) {};
};
// --- cRecMenuEditTimer --------------------------------------------------------- // --- cRecMenuEditTimer ---------------------------------------------------------
class cRecMenuEditTimer: public cRecMenu { class cRecMenuEditTimer: public cRecMenu {
public: public:
@ -229,8 +257,6 @@ public:
virtual ~cRecMenuSearchNothingFound(void) {}; virtual ~cRecMenuSearchNothingFound(void) {};
}; };
// --- cRecMenuRecordingSearch --------------------------------------------------------- // --- cRecMenuRecordingSearch ---------------------------------------------------------
class cRecMenuRecordingSearch: public cRecMenu { class cRecMenuRecordingSearch: public cRecMenu {
private: private:

View File

@ -364,6 +364,7 @@ void cMenuSetupImageCache::Set(void) {
Add(InfoItem(tr("Logo cache"), (imgCache.GetCacheSize(ctLogo)).c_str())); Add(InfoItem(tr("Logo cache"), (imgCache.GetCacheSize(ctLogo)).c_str()));
Add(InfoItem(tr("EPG Grid Cache"), (imgCache.GetCacheSize(ctGrid)).c_str())); Add(InfoItem(tr("EPG Grid Cache"), (imgCache.GetCacheSize(ctGrid)).c_str()));
Add(InfoItem(tr("Channel Groups Cache"), (imgCache.GetCacheSize(ctChannelGroup)).c_str())); Add(InfoItem(tr("Channel Groups Cache"), (imgCache.GetCacheSize(ctChannelGroup)).c_str()));
Add(InfoItem(tr("Recording Menus Icon Cache"), (imgCache.GetCacheSize(ctIcon)).c_str()));
SetCurrent(Get(currentItem)); SetCurrent(Get(currentItem));
Display(); Display();

Some files were not shown because too many files have changed in this diff Show More