diff options
-rw-r--r-- | HISTORY.h | 8 | ||||
-rw-r--r-- | recording.c | 47 | ||||
-rw-r--r-- | timer.c | 21 | ||||
-rw-r--r-- | update.c | 4 |
4 files changed, 75 insertions, 5 deletions
@@ -5,8 +5,8 @@ * */ -#define _VERSION "1.1.82" -#define VERSION_DATE "09.02.2018" +#define _VERSION "1.1.83" +#define VERSION_DATE "10.02.2018" #define DB_API 6 @@ -19,6 +19,10 @@ /* * ------------------------------------ +2018-02-10 version 1.1.83 (horchi) + - bugfix: Fixed delete of Switch timer + - added: Fill recording images table with images of existing recordings + 2018-02-09 version 1.1.82 (horchi) - added: Switch timer diff --git a/recording.c b/recording.c index 2de582e..31ec980 100644 --- a/recording.c +++ b/recording.c @@ -490,9 +490,56 @@ int cUpdate::updateRecordingTable(int fullReload) if (!recordingImagesDb->find()) { + const char* ext = ".jpg"; + MemoryStruct data; + struct dirent* dirent; + DIR* dir; + char* recdir; + int lfn = 0; + // we don't have a image, check filesystem + asprintf(&recdir, "%s/%s", videoBasePath, recordingListDb->getStrValue("PATH")); + dir = opendir(recdir); + + if (!dir) + { + tell(1, "Can't open directory '%s', '%s'", recdir, strerror(errno)); + continue; + } + + free(recdir); + + while ((dirent = readdir(dir))) + { + // check extension + + if (strncmp(dirent->d_name + strlen(dirent->d_name) - strlen(ext), ext, strlen(ext)) != 0) + continue; + + char* imgPath; + asprintf(&imgPath, "%s/%s/%s", videoBasePath, recordingListDb->getStrValue("PATH"), dirent->d_name); + + tell(0, "%s'found image for '%s' [%s]", fileExists(imgPath) ? "" : "Don't ", + recordingListDb->getStrValue("TITLE"), imgPath); + + if (loadFromFile(imgPath, &data) == success) + { + if (data.size < (unsigned long)imageDb->getField("IMAGE")->getSize()) + { + recordingImagesDb->setValue("IMGID", recordingListDb->getStrValue("IMGID")); + recordingImagesDb->setValue("LFN", lfn++); + recordingImagesDb->setValue("IMAGE", data.memory, data.size); + recordingImagesDb->setValue("TITLE", recordingListDb->getStrValue("TITLE")); + recordingImagesDb->setValue("SHORTTEXT", recordingListDb->getStrValue("SHORTTEXT")); + recordingImagesDb->store(); + } + } + + free(imgPath); + } + closedir(dir); } recordingImagesDb->reset(); @@ -467,14 +467,31 @@ int cUpdate::takeSwitchTimer() continue; } - // if already in list, ignore + // check state, did we have it already? auto it = switchTimers.find(timerid); + // ACTION is delete? + + if (timerDb->hasCharValue("ACTION", taDelete)) + { + if (it != switchTimers.end()) + switchTimers.erase(it); + + timerDb->setCharValue("ACTION", taAssumed); + timerDb->setCharValue("STATE", tsDeleted); + timerDb->store(); + continue; + } + + // if already in map, ignore + if (it != switchTimers.end()) continue; - // not in map, create + // not in map, create it + // independend if ACTION is 'pending', 'create' or 'modify' ore something else + // that's special for switch timers since we have to get the 'pending' also after a vdr restart tell(1, "Got switch timer (%ld) for channel '%s' at '%s'", timerDb->getIntValue("ID"), timerDb->getStrValue("CHANNELID"), @@ -663,7 +663,9 @@ int cUpdate::initDb() selectSwitchTimerActions->build("select "); selectSwitchTimerActions->bindAllOut(); selectSwitchTimerActions->build(" from %s where ", timerDb->TableName()); - selectSwitchTimerActions->build("%s != '%c'", timerDb->getField("STATE")->getDbName(), tsFinished); + selectSwitchTimerActions->build("%s != '%c' and %s != '%c'", + timerDb->getField("STATE")->getDbName(), tsFinished, + timerDb->getField("STATE")->getDbName(), tsDeleted); selectSwitchTimerActions->build(" and %s = '%c'", timerDb->getField("TYPE")->getDbName(), ttView); selectSwitchTimerActions->bind("VDRUUID", cDBS::bndIn | cDBS::bndSet, " and "); |