summaryrefslogtreecommitdiff
path: root/menusearchtimer.c
diff options
context:
space:
mode:
Diffstat (limited to 'menusearchtimer.c')
-rw-r--r--menusearchtimer.c203
1 files changed, 153 insertions, 50 deletions
diff --git a/menusearchtimer.c b/menusearchtimer.c
index cae3e42..ad125b3 100644
--- a/menusearchtimer.c
+++ b/menusearchtimer.c
@@ -9,8 +9,138 @@
#include "lib/searchtimer.h"
#include "menu.h"
+#include "lib/vdrlocks.h"
//***************************************************************************
+// class cEpgMenuDonesOf
+//***************************************************************************
+
+class cEpgMenuDonesOf : public cOsdMenu
+{
+ public:
+
+ cEpgMenuDonesOf(cMenuDb* mdb, const cDbRow* aRow);
+ virtual ~cEpgMenuDonesOf();
+ virtual eOSState ProcessKey(eKeys Key);
+
+ protected:
+
+ int refresh();
+
+ // data
+
+ const cDbRow* useEventRow;
+ cMenuDb* menuDb;
+};
+
+//***************************************************************************
+// Object
+//***************************************************************************
+
+cEpgMenuDonesOf::cEpgMenuDonesOf(cMenuDb* mdb, const cDbRow* aRow)
+ : cOsdMenu(tr("Timer Journal"), 2, 20, 35, 40)
+{
+ menuDb = mdb;
+ useEventRow = aRow;
+
+ refresh();
+}
+
+cEpgMenuDonesOf::~cEpgMenuDonesOf()
+{
+}
+
+//***************************************************************************
+// Refresh
+//***************************************************************************
+
+int cEpgMenuDonesOf::refresh()
+{
+ cDbStatement* selectDones = 0;
+
+ Clear();
+
+ menuDb->useeventsDb->clear();
+ menuDb->useeventsDb->getRow()->copyValues(useEventRow, cDbService::ftPrimary);
+
+ if (!menuDb->useeventsDb->find())
+ return done;
+
+ // tell(0, "EVENT found: '%s/%s/%ld' [%s / %s]",
+ // menuDb->useeventsDb->getStrValue("CNTSOURCE"),
+ // menuDb->useeventsDb->getStrValue("CHANNELID"),
+ // menuDb->useeventsDb->getBigintValue("CNTEVENTID"),
+ // menuDb->useeventsDb->getStrValue("EPISODECOMPPARTNAME"),
+ // menuDb->useeventsDb->getStrValue("COMPSHORTTEXT"));
+
+ // collect dones ...
+
+ if (menuDb->search->prepareDoneSelect(menuDb->useeventsDb->getRow(),
+ menuDb->searchtimerDb->getIntValue("REPEATFIELDS"),
+ selectDones) == success && selectDones)
+ {
+ for (int f = selectDones->find(); f; f = selectDones->fetch())
+ {
+ char* buf;
+
+ menuDb->search->getTimersDoneDb()->find();
+
+ asprintf(&buf, "%s\t%s\t%s\t%s",
+ menuDb->search->getTimersDoneDb()->getStrValue("STATE"),
+ l2pTime(menuDb->search->getTimersDoneDb()->getIntValue("STARTTIME"), "%d.%m.%y %H:%M").c_str(),
+ menuDb->search->getTimersDoneDb()->getStrValue("TITLE"),
+ menuDb->search->getTimersDoneDb()->getStrValue("SHORTTEXT"));
+
+ tell(0, "%s", buf);
+ Add(new cEpgMenuTextItem(menuDb->search->getTimersDoneDb()->getIntValue("ID"), buf));
+ free(buf);
+ }
+
+ selectDones->freeResult();
+ }
+
+ menuDb->useeventsDb->reset();
+
+ SetHelp(0, 0, tr("Delete"), 0);
+ Display();
+
+ return success;
+}
+
+//***************************************************************************
+// ProcessKey
+//***************************************************************************
+
+eOSState cEpgMenuDonesOf::ProcessKey(eKeys Key)
+{
+ eOSState state = cOsdMenu::ProcessKey(Key);
+
+ if (state == osUnknown)
+ {
+ switch (Key)
+ {
+ case kYellow:
+ {
+ cEpgMenuTextItem* item = (cEpgMenuTextItem*)Get(Current());
+
+ if (item && Interface->Confirm(tr("Delete timer from journal?")))
+ {
+ menuDb->timerDoneDb->deleteWhere("id = %ld", item->getId());
+ refresh();
+ }
+
+ return osContinue;
+ }
+
+ default: break;
+ }
+ }
+
+ return state;
+}
+
+//***************************************************************************
+//***************************************************************************
// Class cEpgMenuSearchTimerEdit
//***************************************************************************
@@ -87,7 +217,7 @@ class cEpgMenuSearchTimerItem : public cOsdItem
SetText(text);
}
- ~cEpgMenuSearchTimerItem() { }
+ ~cEpgMenuSearchTimerItem() {}
long getId() { return id; }
int isActive() { return active; }
@@ -107,22 +237,22 @@ class cEpgMenuSearchResult : public cOsdMenu
{
public:
- cEpgMenuSearchResult(cMenuDb* db, long id);
+ cEpgMenuSearchResult(cMenuDb* db, long searchTimerId);
virtual ~cEpgMenuSearchResult();
virtual eOSState ProcessKey(eKeys Key);
protected:
- int refresh(long id);
+ int refresh(long searchTimerId);
cMenuDb* menuDb;
};
-cEpgMenuSearchResult::cEpgMenuSearchResult(cMenuDb* db, long id)
- : cOsdMenu(tr("Edit Search Timer"), 17, CHNAMWIDTH, 3, 30)
+cEpgMenuSearchResult::cEpgMenuSearchResult(cMenuDb* db, long searchTimerId)
+ : cOsdMenu(tr("Search Result"), 17, CHNAMWIDTH, 3, 30)
{
menuDb = db;
- refresh(id);
+ refresh(searchTimerId);
}
cEpgMenuSearchResult::~cEpgMenuSearchResult()
@@ -133,11 +263,11 @@ cEpgMenuSearchResult::~cEpgMenuSearchResult()
// Refresh
//***************************************************************************
-int cEpgMenuSearchResult::refresh(long id)
+int cEpgMenuSearchResult::refresh(long searchTimerId)
{
cDbStatement* select = 0;
- menuDb->searchtimerDb->setValue("ID", id);
+ menuDb->searchtimerDb->setValue("ID", searchTimerId);
if (!menuDb->searchtimerDb->find())
return done;
@@ -145,14 +275,7 @@ int cEpgMenuSearchResult::refresh(long id)
if (!(select = menuDb->search->prepareSearchStatement(menuDb->searchtimerDb->getRow(), menuDb->useeventsDb)))
return fail;
-#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
- LOCK_CHANNELS_READ;
- const cChannels* channels = Channels;
- // cChannelsLock channelsLock(false);
- // const cChannels* channels = channelsLock.Channels();
-#else
- cChannels* channels = &Channels;
-#endif
+ GET_CHANNELS_READ(channels);
menuDb->useeventsDb->clear();
@@ -170,11 +293,8 @@ int cEpgMenuSearchResult::refresh(long id)
if (menuDb->search->prepareDoneSelect(menuDb->useeventsDb->getRow(),
menuDb->searchtimerDb->getIntValue("REPEATFIELDS"),
- selectDones) == success
- && selectDones)
+ selectDones) == success && selectDones)
{
- // first only count - #TODO show them in a sub-menu oder let delete by kYellow?
-
for (int f = selectDones->find(); f; f = selectDones->fetch())
cnt++;
@@ -183,22 +303,25 @@ int cEpgMenuSearchResult::refresh(long id)
//
+ cDbRow* useEventRow = new cDbRow("useevents");
+ useEventRow->copyValues(menuDb->useeventsDb->getRow(), cDbService::ftPrimary);
+
const char* strChannelId = menuDb->useeventsDb->getStrValue("CHANNELID");
const cChannel* channel = channels->GetByChannelID(tChannelID::FromString(strChannelId));
- Add(new cEpgMenuTextItem(menuDb->useeventsDb->getIntValue("USEID"),
+ Add(new cEpgMenuTextItem(useEventRow,
cString::sprintf("%s\t%s\t%s\t%s\t%s",
l2pTime(menuDb->useeventsDb->getIntValue("STARTTIME")).c_str(),
channel->Name(),
cnt ? num2Str(cnt).c_str() : "",
menuDb->useeventsDb->getStrValue("TITLE"),
menuDb->useeventsDb->getStrValue("SHORTTEXT"))));
- }
+ }
select->freeResult();
menuDb->searchtimerDb->reset();
- SetHelp(0, 0, "Delete dones", 0);
+ SetHelp(0, tr("Show Journal"), 0, 0);
Display();
return success;
@@ -216,30 +339,10 @@ eOSState cEpgMenuSearchResult::ProcessKey(eKeys Key)
{
switch (Key)
{
- case kYellow:
+ case kGreen:
{
- cDbStatement* selectDones = 0;
cEpgMenuTextItem* item = (cEpgMenuTextItem*)Get(Current());
-
- if (item && Interface->Confirm(tr("Remove all done entries of this event?")))
- {
- menuDb->useeventsDb->clear();
- menuDb->useeventsDb->setValue("USEID", item->getId());
-
- if (menuDb->useeventsDb->find())
- {
- if (menuDb->search->prepareDoneSelect(menuDb->useeventsDb->getRow(),
- menuDb->searchtimerDb->getIntValue("REPEATFIELDS"),
- selectDones) == success
- && selectDones)
- {
- for (int f = selectDones->find(); f; f = selectDones->fetch())
- selectDones->getTable()->deleteWhere("id = %ld", selectDones->getTable()->getIntValue("ID"));
-
- selectDones->freeResult();
- }
- }
- }
+ return AddSubMenu(new cEpgMenuDonesOf(menuDb, item->getRow()));
}
default: break;
@@ -305,7 +408,7 @@ void cMenuEpgSearchTimers::setHelpKeys()
if (item)
SetHelp(item->isActive() ? tr("Deactivate") : tr("Activate"),
- tr("Test"),
+ tr("Check"),
tr("Delete"),
0);
else
@@ -327,7 +430,7 @@ eOSState cMenuEpgSearchTimers::ProcessKey(eKeys Key)
{
switch (Key)
{
- case kOk:
+ case kOk: // edit search timer
{
if (HasSubMenu() || Count() == 0)
return osContinue;
@@ -336,7 +439,7 @@ eOSState cMenuEpgSearchTimers::ProcessKey(eKeys Key)
return AddSubMenu(new cEpgMenuSearchTimerEdit(menuDb, item->getId()));
}
- case kRed:
+ case kRed: // ativate/deactivate search timer
{
menuDb->searchtimerDb->setValue("ID", item->getId());
@@ -350,12 +453,12 @@ eOSState cMenuEpgSearchTimers::ProcessKey(eKeys Key)
return osContinue;
}
- case kGreen:
+ case kGreen: // test search
{
return AddSubMenu(new cEpgMenuSearchResult(menuDb, item->getId()));
}
- case kYellow:
+ case kYellow: // delete search timer
{
if (item && Interface->Confirm(tr("Delete search timer?")))
{