summaryrefslogtreecommitdiff
path: root/update.c
diff options
context:
space:
mode:
Diffstat (limited to 'update.c')
-rw-r--r--update.c975
1 files changed, 513 insertions, 462 deletions
diff --git a/update.c b/update.c
index 0e4be7d..addc14b 100644
--- a/update.c
+++ b/update.c
@@ -5,6 +5,8 @@
#include <vdr/tools.h>
#include <vdr/plugin.h>
+#include "lib/config.h"
+
#include "config.h"
#include "tools.h"
#include "update.h"
@@ -24,6 +26,21 @@ cUpdate::cUpdate(cScrapManager *manager) : cThread("update thread started") {
tMovieActors = NULL;
tMovieMedia = NULL;
tRecordings = NULL;
+
+ selectReadScrapedEventsInit = 0;
+ selectReadScrapedEvents = 0;
+ selectImg = 0;
+ selectSeasonPoster = 0;
+ selectActors = 0;
+ selectActorThumbs = 0;
+ selectSeriesMedia = 0;
+ selectMovieActors = 0;
+ selectMovieActorThumbs = 0;
+ selectMovieMedia = 0;
+ selectMediaMovie = 0;
+ selectRecordings = 0;
+ selectCleanupRecordings = 0;
+
scrapManager = manager;
imgPathSeries = config.imageDir + "/series";
imgPathMovies = config.imageDir + "/movies";
@@ -44,6 +61,7 @@ cUpdate::cUpdate(cScrapManager *manager) : cThread("update thread started") {
} else {
tell(0, "Reseting locale for LC_CTYPE failed.");
}
+
cDbConnection::setEncoding(withutf8 ? "utf8": "latin1");
cDbConnection::setHost(config.mysqlHost.c_str());
cDbConnection::setPort(config.mysqlPort);
@@ -51,36 +69,20 @@ cUpdate::cUpdate(cScrapManager *manager) : cThread("update thread started") {
cDbConnection::setUser(config.mysqlDBUser.c_str());
cDbConnection::setPass(config.mysqlDBPass.c_str());
cDbTable::setConfPath(cPlugin::ConfigDirectory("epg2vdr/"));
+
+ EPG2VDRConfig.loglevel = config.debug ? 2 : 1;
}
cUpdate::~cUpdate() {
if (loopActive)
Stop();
- if (vdrDb)
- delete vdrDb;
- if (tEvents)
- delete tEvents;
- if (tSeries)
- delete tSeries;
- if (tEpisodes)
- tEpisodes;
- if (tSeriesMedia)
- delete tSeriesMedia;
- if (tSeriesActors)
- delete tSeriesActors;
- if (tMovies)
- delete tMovies;
- if (tMovieActor)
- delete tMovieActor;
- if (tMovieActors)
- delete tMovieActors;
- if (tMovieMedia)
- delete tMovieMedia;
- if (tRecordings)
- delete tRecordings;
exitDb();
}
+// global field definitions
+
+cDBS::FieldDef imageSizeDef = { "media_content", cDBS::ffUInt, 0, 999, cDBS::ftData };
+
int cUpdate::initDb() {
int status = success;
if (!connection)
@@ -120,12 +122,269 @@ int cUpdate::initDb() {
tRecordings = new cTableRecordings(connection);
if (tRecordings->open() != success)
return fail;
+
+ // --------------------
+ // prepare statements
+
+ //
+
+ selectReadScrapedEventsInit = new cDbStatement(tEvents);
+ selectReadScrapedEventsInit->build("select ");
+ selectReadScrapedEventsInit->bind(cTableEvents::fiEventId, cDBS::bndOut);
+ selectReadScrapedEventsInit->bind(cTableEvents::fiChannelId, cDBS::bndOut, ", ");
+ selectReadScrapedEventsInit->bind(cTableEvents::fiMasterId, cDBS::bndOut, ", ");
+ selectReadScrapedEventsInit->bind(cTableEvents::fiScrSeriesId, cDBS::bndOut, ", ");
+ selectReadScrapedEventsInit->bind(cTableEvents::fiScrSeriesEpisode, cDBS::bndOut, ", ");
+ selectReadScrapedEventsInit->bind(cTableEvents::fiScrMovieId, cDBS::bndOut, ", ");
+ selectReadScrapedEventsInit->bind(cTableEvents::fiScrSp, cDBS::bndOut, ", ");
+ selectReadScrapedEventsInit->build(" from %s where ", tEvents->TableName());
+ selectReadScrapedEventsInit->build(" ((%s is not null and %s > 0) ",
+ tEvents->getField(cTableEvents::fiScrSeriesId)->name,
+ tEvents->getField(cTableEvents::fiScrSeriesId)->name);
+ selectReadScrapedEventsInit->build(" or (%s is not null and %s > 0)) ",
+ tEvents->getField(cTableEvents::fiScrMovieId)->name,
+ tEvents->getField(cTableEvents::fiScrMovieId)->name);
+ selectReadScrapedEventsInit->build(" order by %s", tEvents->getField(cTableEvents::fiInsSp)->name);
+
+ status += selectReadScrapedEventsInit->prepare();
+
+ //
+
+ selectReadScrapedEvents = new cDbStatement(tEvents);
+ selectReadScrapedEvents->build("select ");
+ selectReadScrapedEvents->bind(cTableEvents::fiEventId, cDBS::bndOut);
+ selectReadScrapedEvents->bind(cTableEvents::fiChannelId, cDBS::bndOut, ", ");
+ selectReadScrapedEvents->bind(cTableEvents::fiMasterId, cDBS::bndOut, ", ");
+ selectReadScrapedEvents->bind(cTableEvents::fiScrSeriesId, cDBS::bndOut, ", ");
+ selectReadScrapedEvents->bind(cTableEvents::fiScrSeriesEpisode, cDBS::bndOut, ", ");
+ selectReadScrapedEvents->bind(cTableEvents::fiScrMovieId, cDBS::bndOut, ", ");
+ selectReadScrapedEvents->bind(cTableEvents::fiScrSp, cDBS::bndOut, ", ");
+ selectReadScrapedEvents->build(" from %s where ", tEvents->TableName());
+ selectReadScrapedEvents->build(" ((%s is not null and %s > 0) ",
+ tEvents->getField(cTableEvents::fiScrSeriesId)->name,
+ tEvents->getField(cTableEvents::fiScrSeriesId)->name);
+ selectReadScrapedEvents->build(" or (%s is not null and %s > 0)) ",
+ tEvents->getField(cTableEvents::fiScrMovieId)->name,
+ tEvents->getField(cTableEvents::fiScrMovieId)->name);
+ selectReadScrapedEvents->bind(cTableEvents::fiScrSp, cDBS::bndIn | cDBS::bndSet, " and ");
+ selectReadScrapedEvents->build(" order by %s", tEvents->getField(cTableEvents::fiInsSp)->name);
+
+ status += selectReadScrapedEvents->prepare();
+
+ // select image
+
+ imageSize.setField(&imageSizeDef);
+ selectImg = new cDbStatement(tSeriesMedia);
+ selectImg->build("select ");
+ selectImg->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
+ selectImg->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
+ selectImg->bind(cTableSeriesMedia::fiMediaContent, cDBS::bndOut, ", ");
+ selectImg->build(", length(");
+ selectImg->bind(&imageSize, cDBS::bndOut);
+ selectImg->build(")");
+ selectImg->build(" from %s where ", tSeriesMedia->TableName());
+ selectImg->bind(cTableSeriesMedia::fiSeriesId, cDBS::bndIn | cDBS::bndSet);
+ selectImg->bind(cTableSeriesMedia::fiEpisodeId, cDBS::bndIn | cDBS::bndSet, " and ");
+ status += selectImg->prepare();
+
+ // select poster image
+
+ posterSize.setField(&imageSizeDef);
+ selectSeasonPoster = new cDbStatement(tSeriesMedia);
+ selectSeasonPoster->build("select ");
+ selectSeasonPoster->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
+ selectSeasonPoster->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
+ selectSeasonPoster->bind(cTableSeriesMedia::fiMediaContent, cDBS::bndOut, ", ");
+ selectSeasonPoster->build(", length(");
+ selectSeasonPoster->bind(&posterSize, cDBS::bndOut);
+ selectSeasonPoster->build(")");
+ selectSeasonPoster->build(" from %s where ", tSeriesMedia->TableName());
+ selectSeasonPoster->bind(cTableSeriesMedia::fiSeriesId, cDBS::bndIn | cDBS::bndSet);
+ selectSeasonPoster->bind(cTableSeriesMedia::fiSeasonNumber, cDBS::bndIn | cDBS::bndSet, " and ");
+ selectSeasonPoster->bind(cTableSeriesMedia::fiMediaType, cDBS::bndIn | cDBS::bndSet, " and ");
+ status += selectSeasonPoster->prepare();
+
+ // select actor
+
+ series_id.setField(tSeriesMedia->getField(cTableSeriesMedia::fiSeriesId));
+ selectActors = new cDbStatement(tSeriesActors);
+ selectActors->build("select ");
+ selectActors->setBindPrefix("series_actor.");
+ selectActors->bind(cTableSeriesActor::fiActorId, cDBS::bndOut);
+ selectActors->bind(cTableSeriesActor::fiActorName, cDBS::bndOut, ", ");
+ selectActors->bind(cTableSeriesActor::fiActorRole, cDBS::bndOut, ", ");
+ selectActors->clrBindPrefix();
+ selectActors->build(" from %s, %s where ", tSeriesActors->TableName(), tSeriesMedia->TableName());
+ selectActors->build(" %s.%s = %s.%s ", tSeriesActors->TableName(),
+ tSeriesActors->getField(cTableSeriesActor::fiActorId)->name,
+ tSeriesMedia->TableName(),
+ tSeriesMedia->getField(cTableSeriesMedia::fiActorId)->name);
+ selectActors->setBindPrefix("series_media.");
+ selectActors->bind(&series_id, cDBS::bndIn | cDBS::bndSet, " and ");
+ selectActors->build(" order by %s, %s asc", tSeriesActors->getField(cTableSeriesActor::fiSortOrder)->name,
+ tSeriesActors->getField(cTableSeriesActor::fiActorRole)->name);
+ status += selectActors->prepare();
+
+ // select actor thumbs
+
+ actorImageSize.setField(&imageSizeDef);
+ selectActorThumbs = new cDbStatement(tSeriesMedia);
+ selectActorThumbs->build("select ");
+ selectActorThumbs->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
+ selectActorThumbs->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
+ selectActorThumbs->bind(cTableSeriesMedia::fiMediaContent, cDBS::bndOut, ", ");
+ selectActorThumbs->build(", length(");
+ selectActorThumbs->bind(&actorImageSize, cDBS::bndOut);
+ selectActorThumbs->build(")");
+ selectActorThumbs->build(" from %s where ", tSeriesMedia->TableName());
+ selectActorThumbs->bind(cTableSeriesMedia::fiActorId, cDBS::bndIn | cDBS::bndSet);
+ status += selectActorThumbs->prepare();
+
+ //
+
+ selectSeriesMedia = new cDbStatement(tSeriesMedia);
+ selectSeriesMedia->build("select ");
+ selectSeriesMedia->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
+ selectSeriesMedia->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
+ selectSeriesMedia->bind(cTableSeriesMedia::fiMediaType, cDBS::bndOut, ", ");
+ selectSeriesMedia->build(" from %s where ", tSeriesMedia->TableName());
+ selectSeriesMedia->bind(cTableSeriesMedia::fiSeriesId, cDBS::bndIn | cDBS::bndSet);
+ selectSeriesMedia->build(" and %s in (%d, %d, %d, %d, %d, %d, %d, %d, %d)",
+ tSeriesMedia->getField(cTableSeriesMedia::fiMediaType)->name,
+ msPoster1, msPoster2, msPoster3,
+ msFanart1, msFanart2, msFanart3,
+ msBanner1, msBanner2, msBanner3);
+ status += selectSeriesMedia->prepare();
+
+ //
+
+ actorRole.setField(tMovieActors->getField(cTableMovieActors::fiRole));
+ actorMovie.setField(tMovieActors->getField(cTableMovieActors::fiMovieId));
+ thbWidth.setField(tMovieMedia->getField(cTableMovieMedia::fiMediaWidth));
+ thbHeight.setField(tMovieMedia->getField(cTableMovieMedia::fiMediaHeight));
+
+ selectMovieActors = new cDbStatement(tMovieActor);
+ selectMovieActors->build("select ");
+ selectMovieActors->setBindPrefix("act.");
+ selectMovieActors->bind(cTableMovieActor::fiActorId, cDBS::bndOut);
+ selectMovieActors->bind(cTableMovieActor::fiActorName, cDBS::bndOut, ", ");
+ selectMovieActors->setBindPrefix("role.");
+ selectMovieActors->bind(&actorRole, cDBS::bndOut, ", ");
+ selectMovieActors->setBindPrefix("thumb.");
+ selectMovieActors->bind(&thbWidth, cDBS::bndOut, ", ");
+ selectMovieActors->bind(&thbHeight, cDBS::bndOut, ", ");
+ selectMovieActors->clrBindPrefix();
+ selectMovieActors->build(" from %s act, %s role, %s thumb where ",
+ tMovieActor->TableName(), tMovieActors->TableName(), tMovieMedia->TableName());
+ selectMovieActors->build("act.%s = role.%s ",
+ tMovieActor->getField(cTableMovieActor::fiActorId)->name,
+ tMovieActors->getField(cTableMovieActors::fiActorId)->name);
+ selectMovieActors->build(" and role.%s = thumb.%s ",
+ tMovieActors->getField(cTableMovieActors::fiActorId)->name,
+ tMovieMedia->getField(cTableMovieMedia::fiActorId)->name);
+ selectMovieActors->setBindPrefix("role.");
+ selectMovieActors->bind(&actorMovie, cDBS::bndIn | cDBS::bndSet, " and ");
+ status += selectMovieActors->prepare();
+
+ //
+
+ selectMovieActorThumbs = new cDbStatement(tMovieMedia);
+ selectMovieActorThumbs->build("select ");
+ selectMovieActorThumbs->bind(cTableMovieMedia::fiMediaContent, cDBS::bndOut);
+ selectMovieActorThumbs->build(", length(");
+ selectMovieActorThumbs->bind(&imageSize, cDBS::bndOut);
+ selectMovieActorThumbs->build(")");
+ selectMovieActorThumbs->build(" from %s where ", tMovieMedia->TableName());
+ selectMovieActorThumbs->bind(cTableMovieMedia::fiActorId, cDBS::bndIn | cDBS::bndSet);
+ status += selectMovieActorThumbs->prepare();
+
+ //
+
+ selectMovieMedia = new cDbStatement(tMovieMedia);
+ selectMovieMedia->build("select ");
+ selectMovieMedia->bind(cTableMovieMedia::fiMediaWidth, cDBS::bndOut);
+ selectMovieMedia->bind(cTableMovieMedia::fiMediaHeight, cDBS::bndOut, ", ");
+ selectMovieMedia->bind(cTableMovieMedia::fiMediaType, cDBS::bndOut, ", ");
+ selectMovieMedia->build(" from %s where ", tMovieMedia->TableName());
+ selectMovieMedia->bind(cTableMovieMedia::fiMovieId, cDBS::bndIn | cDBS::bndSet);
+ selectMovieMedia->build(" and %s in (%d, %d, %d, %d)",
+ tMovieMedia->getField(cTableMovieMedia::fiMediaType)->name,
+ mmPoster,
+ mmFanart,
+ mmCollectionPoster,
+ mmCollectionFanart);
+ status += selectMovieMedia->prepare();
+
+ //
+
+ selectMediaMovie = new cDbStatement(tMovieMedia);
+ selectMediaMovie->build("select ");
+ selectMediaMovie->bind(cTableMovieMedia::fiMediaContent, cDBS::bndOut);
+ selectMediaMovie->build(", length(");
+ selectMediaMovie->bind(&imageSize, cDBS::bndOut);
+ selectMediaMovie->build(")");
+ selectMediaMovie->build(" from %s where ", tMovieMedia->TableName());
+ selectMediaMovie->bind(cTableMovieMedia::fiMovieId, cDBS::bndIn | cDBS::bndSet);
+ selectMediaMovie->bind(cTableMovieMedia::fiMediaType, cDBS::bndIn | cDBS::bndSet, " and ");
+ status += selectMediaMovie->prepare();
+
+ //
+
+ selectRecordings = new cDbStatement(tRecordings);
+ selectRecordings->build("select ");
+ selectRecordings->bind(cTableRecordings::fiRecPath, cDBS::bndOut);
+ selectRecordings->bind(cTableRecordings::fiRecStart, cDBS::bndOut, ", ");
+ selectRecordings->bind(cTableRecordings::fiMovieId, cDBS::bndOut, ", ");
+ selectRecordings->bind(cTableRecordings::fiSeriesId, cDBS::bndOut, ", ");
+ selectRecordings->bind(cTableRecordings::fiEpisodeId, cDBS::bndOut, ", ");
+ selectRecordings->build(" from %s where ", tRecordings->TableName());
+ selectRecordings->bind(cTableRecordings::fiUuid, cDBS::bndIn | cDBS::bndSet);
+ selectRecordings->build(" and %s = 0", tRecordings->getField(cTableRecordings::fiScrapNew)->name);
+ status += selectRecordings->prepare();
+
+ //
+
+ selectCleanupRecordings = new cDbStatement(tRecordings);
+ selectCleanupRecordings->build("select ");
+ selectCleanupRecordings->bind(cTableRecordings::fiRecPath, cDBS::bndOut);
+ selectCleanupRecordings->bind(cTableRecordings::fiRecStart, cDBS::bndOut, ", ");
+ selectCleanupRecordings->build(" from %s where ", tRecordings->TableName());
+ selectCleanupRecordings->bind(cTableRecordings::fiUuid, cDBS::bndIn | cDBS::bndSet);
+ status += selectCleanupRecordings->prepare();
+
return status;
}
int cUpdate::exitDb() {
- delete connection;
- connection = 0;
+
+ delete selectReadScrapedEvents; selectReadScrapedEvents = 0;
+ delete selectReadScrapedEventsInit; selectReadScrapedEventsInit = 0;
+ delete selectImg; selectImg = 0;
+ delete selectSeasonPoster; selectSeasonPoster = 0;
+ delete selectActors; selectActors = 0;
+ delete selectActorThumbs; selectActorThumbs = 0;
+ delete selectSeriesMedia; selectSeriesMedia = 0;
+ delete selectMovieActors; selectMovieActors = 0;
+ delete selectMovieActorThumbs; selectMovieActorThumbs = 0;
+ delete selectMovieMedia; selectMovieMedia = 0;
+ delete selectMediaMovie; selectMediaMovie = 0;
+ delete selectRecordings; selectRecordings = 0;
+ delete selectCleanupRecordings; selectCleanupRecordings = 0;
+
+ delete vdrDb; vdrDb = 0;
+ delete tEvents; tEvents = 0;
+ delete tSeries; tSeries = 0;
+ delete tEpisodes; tEpisodes = 0;
+ delete tSeriesMedia; tSeriesMedia = 0;
+ delete tSeriesActors; tSeriesActors = 0;
+ delete tMovies; tMovies = 0;
+ delete tMovieActor; tMovieActor = 0;
+ delete tMovieActors; tMovieActors = 0;
+ delete tMovieMedia; tMovieMedia = 0;
+ delete tRecordings; tRecordings = 0;
+
+ delete connection; connection = 0;
+
return done;
}
@@ -157,51 +416,34 @@ int cUpdate::CheckConnection(int& timeout) {
}
bool cUpdate::CheckEpgdBusy(void) {
- vdrDb->clear();
- vdrDb->setValue(cTableVdrs::fiUuid, EPGDNAME);
- if (vdrDb->find()) {
- Es::State epgdState = cEpgdState::toState(vdrDb->getStrValue(cTableVdrs::fiState));
- if (epgdState >= cEpgdState::esBusy)
- return true;
- }
- return false;
+ int busy = false;
+ vdrDb->clear();
+ vdrDb->setValue(cTableVdrs::fiUuid, EPGDNAME);
+
+ if (vdrDb->find()) {
+ Es::State epgdState = cEpgdState::toState(vdrDb->getStrValue(cTableVdrs::fiState));
+ // ignore esBusyImages until we don't write this table
+ if (epgdState >= cEpgdState::esBusy && epgdState < cEpgdState::esBusyImages)
+ busy = true;
+ }
+
+ vdrDb->reset();
+ return busy;
}
int cUpdate::ReadScrapedEvents(void) {
- int status = success;
- cDbStatement *select = new cDbStatement(tEvents);
- select->build("select ");
- select->bind(cTableEvents::fiEventId, cDBS::bndOut);
- select->bind(cTableEvents::fiChannelId, cDBS::bndOut, ", ");
- select->bind(cTableEvents::fiMasterId, cDBS::bndOut, ", ");
- select->bind(cTableEvents::fiScrSeriesId, cDBS::bndOut, ", ");
- select->bind(cTableEvents::fiScrSeriesEpisode, cDBS::bndOut, ", ");
- select->bind(cTableEvents::fiScrMovieId, cDBS::bndOut, ", ");
- select->bind(cTableEvents::fiScrSp, cDBS::bndOut, ", ");
- select->build(" from %s where ", tEvents->TableName());
- select->build(" ((%s is not null and %s > 0) ",
- tEvents->getField(cTableEvents::fiScrSeriesId)->name,
- tEvents->getField(cTableEvents::fiScrSeriesId)->name);
- select->build(" or (%s is not null and %s > 0)) ",
- tEvents->getField(cTableEvents::fiScrMovieId)->name,
- tEvents->getField(cTableEvents::fiScrMovieId)->name);
- if (lastScrap > 0) {
- select->build(" and %s > %d",
- tEvents->getField(cTableEvents::fiScrSp)->name,
- lastScrap);
- }
- select->build(" order by %s", tEvents->getField(cTableEvents::fiInsSp)->name);
- status += select->prepare();
- if (status != success) {
- delete select;
- return 0;
- }
int eventId = 0;
int seriesId = 0;
int episodeId = 0;
int movieId = 0;
string channelId = "";
int numNew = 0;
+
+ cDbStatement* select = lastScrap > 0 ? selectReadScrapedEvents : selectReadScrapedEventsInit;
+
+ tEvents->clear();
+ tEvents->setValue(cTableEvents::fiScrSp, lastScrap);
+
for (int res = select->find(); res; res = select->fetch() && Running()) {
eventId = tEvents->getIntValue(cTableEvents::fiMasterId);
channelId = tEvents->getStrValue(cTableEvents::fiChannelId);
@@ -212,8 +454,9 @@ int cUpdate::ReadScrapedEvents(void) {
lastScrap = max(lastScrap, (int)tEvents->getIntValue(cTableEvents::fiScrSp));
numNew++;
}
+
select->freeResult();
- delete select;
+
return numNew;
}
@@ -247,7 +490,7 @@ int cUpdate::ReadSeries(bool isRec) {
isNew = false;
}
if (series) {
- stringstream sPath;
+ stringstream sPath("");
sPath << imgPathSeries << "/" << seriesId;
string seriesPath = sPath.str();
if (episodeId) {
@@ -264,7 +507,6 @@ int cUpdate::ReadSeries(bool isRec) {
}
void cUpdate::ReadEpisode(int episodeId, cTVDBSeries *series, string path) {
- int status = success;
tEpisodes->clear();
tEpisodes->setValue(cTableSeriesEpisode::fiEpisodeId, episodeId);
int res = tEpisodes->find();
@@ -279,39 +521,20 @@ void cUpdate::ReadEpisode(int episodeId, cTVDBSeries *series, string path) {
}
void cUpdate::LoadEpisodeImage(cTVDBSeries *series, int episodeId, string path) {
- int status = success;
- stringstream iPath;
+ stringstream iPath("");
iPath << path << "/" << "episode_" << episodeId << ".jpg";
string imgPath = iPath.str();
bool imgExists = FileExists(imgPath);
if (!imgExists)
if (!CreateDirectory(path))
return;
+
tSeriesMedia->clear();
- cDbValue imageSize;
- cDBS::FieldDef imageSizeDef = { "media_content", cDBS::ffUInt, 0, 999, cDBS::ftData };
- imageSize.setField(&imageSizeDef);
- cDbStatement *selectImg = new cDbStatement(tSeriesMedia);
- selectImg->build("select ");
- selectImg->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
- selectImg->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
- if (!imgExists) {
- selectImg->bind(cTableSeriesMedia::fiMediaContent, cDBS::bndOut, ", ");
- selectImg->build(", length(");
- selectImg->bind(&imageSize, cDBS::bndOut);
- selectImg->build(")");
- }
- selectImg->build(" from %s where ", tSeriesMedia->TableName());
- selectImg->bind(cTableSeriesMedia::fiSeriesId, cDBS::bndIn | cDBS::bndSet);
- selectImg->bind(cTableSeriesMedia::fiEpisodeId, cDBS::bndIn | cDBS::bndSet, " and ");
- status += selectImg->prepare();
- if (status != success) {
- delete selectImg;
- return;
- }
tSeriesMedia->setValue(cTableSeriesMedia::fiSeriesId, series->id);
tSeriesMedia->setValue(cTableSeriesMedia::fiEpisodeId, episodeId);
+
int res = selectImg->find();
+
if (res) {
if (!imgExists) {
int size = imageSize.getIntValue();
@@ -324,15 +547,14 @@ void cUpdate::LoadEpisodeImage(cTVDBSeries *series, int episodeId, string path)
int imgHeight = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaHeight);
series->InsertEpisodeImage(episodeId, imgWidth, imgHeight, imgPath);
}
+
selectImg->freeResult();
- delete selectImg;
}
void cUpdate::LoadSeasonPoster(cTVDBSeries *series, int season, string path) {
- int status = success;
- stringstream iPath;
+ stringstream iPath("");
iPath << path << "/" << "season_" << season << ".jpg";
- stringstream tPath;
+ stringstream tPath("");
tPath << path << "/" << "season_" << season << "_thumb.jpg";
string imgPath = iPath.str();
string thumbPath = tPath.str();
@@ -340,36 +562,17 @@ void cUpdate::LoadSeasonPoster(cTVDBSeries *series, int season, string path) {
if (!imgExists)
if (!CreateDirectory(path))
return;
+
tSeriesMedia->clear();
- cDbValue imageSize;
- cDBS::FieldDef imageSizeDef = { "media_content", cDBS::ffUInt, 0, 999, cDBS::ftData };
- imageSize.setField(&imageSizeDef);
- cDbStatement *selectImg = new cDbStatement(tSeriesMedia);
- selectImg->build("select ");
- selectImg->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
- selectImg->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
- if (!imgExists) {
- selectImg->bind(cTableSeriesMedia::fiMediaContent, cDBS::bndOut, ", ");
- selectImg->build(", length(");
- selectImg->bind(&imageSize, cDBS::bndOut);
- selectImg->build(")");
- }
- selectImg->build(" from %s where ", tSeriesMedia->TableName());
- selectImg->bind(cTableSeriesMedia::fiSeriesId, cDBS::bndIn | cDBS::bndSet);
- selectImg->bind(cTableSeriesMedia::fiSeasonNumber, cDBS::bndIn | cDBS::bndSet, " and ");
- selectImg->bind(cTableSeriesMedia::fiMediaType, cDBS::bndIn | cDBS::bndSet, " and ");
- status += selectImg->prepare();
- if (status != success) {
- delete selectImg;
- return;
- }
tSeriesMedia->setValue(cTableSeriesMedia::fiSeriesId, series->id);
tSeriesMedia->setValue(cTableSeriesMedia::fiSeasonNumber, season);
tSeriesMedia->setValue(cTableSeriesMedia::fiMediaType, msSeasonPoster);
- int res = selectImg->find();
+
+ int res = selectSeasonPoster->find();
+
if (res) {
if (!imgExists) {
- int size = imageSize.getIntValue();
+ int size = posterSize.getIntValue();
if (FILE* fh = fopen(imgPath.c_str(), "w")) {
fwrite(tSeriesMedia->getStrValue(cTableSeriesMedia::fiMediaContent), 1, size, fh);
fclose(fh);
@@ -383,80 +586,39 @@ void cUpdate::LoadSeasonPoster(cTVDBSeries *series, int season, string path) {
series->InsertMedia(msSeasonPoster, imgWidth, imgHeight, imgPath, season);
series->InsertMedia(msSeasonPosterThumb, imgWidth/2, imgHeight/2, thumbPath, season);
}
- selectImg->freeResult();
- delete selectImg;
+
+ selectSeasonPoster->freeResult();
}
void cUpdate::ReadSeriesActors(cTVDBSeries *series, string path) {
- int status = success;
tSeriesActors->clear();
- cDbValue series_id;
- series_id.setField(tSeriesMedia->getField(cTableSeriesMedia::fiSeriesId));
series_id.setValue(series->id);
- cDbStatement *selectActors = new cDbStatement(tSeriesActors);
- selectActors->build("select ");
- selectActors->setBindPrefix("series_actor.");
- selectActors->bind(cTableSeriesActor::fiActorId, cDBS::bndOut);
- selectActors->bind(cTableSeriesActor::fiActorName, cDBS::bndOut, ", ");
- selectActors->bind(cTableSeriesActor::fiActorRole, cDBS::bndOut, ", ");
- selectActors->clrBindPrefix();
- selectActors->build(" from %s, %s where ", tSeriesActors->TableName(), tSeriesMedia->TableName());
- selectActors->build(" %s.%s = %s.%s ", tSeriesActors->TableName(),
- tSeriesActors->getField(cTableSeriesActor::fiActorId)->name,
- tSeriesMedia->TableName(),
- tSeriesMedia->getField(cTableSeriesMedia::fiActorId)->name);
- selectActors->setBindPrefix("series_media.");
- selectActors->bind(&series_id, cDBS::bndIn | cDBS::bndSet, " and ");
- selectActors->build(" order by %s, %s asc", tSeriesActors->getField(cTableSeriesActor::fiSortOrder)->name,
- tSeriesActors->getField(cTableSeriesActor::fiActorRole)->name);
- status += selectActors->prepare();
- if (status != success) {
- delete selectActors;
- return;
- }
+
for (int res = selectActors->find(); res; res = selectActors->fetch()) {
scrapManager->AddSeriesActor(series, tSeriesActors);
LoadSeriesActorThumb(series, tSeriesActors->getIntValue(cTableSeriesActor::fiActorId), path);
}
+
selectActors->freeResult();
- delete selectActors;
}
void cUpdate::LoadSeriesActorThumb(cTVDBSeries *series, int actorId, string path) {
- int status = success;
- stringstream iPath;
+ stringstream iPath("");
iPath << path << "/" << "actor_" << actorId << ".jpg";
string imgPath = iPath.str();
bool imgExists = FileExists(imgPath);
if (!imgExists)
if (!CreateDirectory(path))
return;
- cDbValue imageSize;
- cDBS::FieldDef imageSizeDef = { "media_content", cDBS::ffUInt, 0, 999, cDBS::ftData };
- imageSize.setField(&imageSizeDef);
+
tSeriesMedia->clear();
- cDbStatement *selectActorThumbs = new cDbStatement(tSeriesMedia);
- selectActorThumbs->build("select ");
- selectActorThumbs->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
- selectActorThumbs->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
- if (!imgExists) {
- selectActorThumbs->bind(cTableSeriesMedia::fiMediaContent, cDBS::bndOut, ", ");
- selectActorThumbs->build(", length(");
- selectActorThumbs->bind(&imageSize, cDBS::bndOut);
- selectActorThumbs->build(")");
- }
- selectActorThumbs->build(" from %s where ", tSeriesMedia->TableName());
- selectActorThumbs->bind(cTableSeriesMedia::fiActorId, cDBS::bndIn | cDBS::bndSet);
- status += selectActorThumbs->prepare();
- if (status != success) {
- delete selectActorThumbs;
- return;
- }
tSeriesMedia->setValue(cTableSeriesMedia::fiActorId, actorId);
+
int res = selectActorThumbs->find();
+
if (res) {
if (!imgExists) {
- int size = imageSize.getIntValue();
+ int size = actorImageSize.getIntValue();
if (FILE* fh = fopen(imgPath.c_str(), "w")) {
fwrite(tSeriesMedia->getStrValue(cTableSeriesMedia::fiMediaContent), 1, size, fh);
fclose(fh);
@@ -466,52 +628,34 @@ void cUpdate::LoadSeriesActorThumb(cTVDBSeries *series, int actorId, string path
int tmbHeight = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaHeight);
series->InsertActorThumb(actorId, tmbWidth, tmbHeight, imgPath);
}
+
selectActorThumbs->freeResult();
- delete selectActorThumbs;
}
-void cUpdate::LoadSeriesMedia(cTVDBSeries *series, string path) {
- int status = success;
- tSeriesMedia->clear();
- cDbStatement *selectImg = new cDbStatement(tSeriesMedia);
- selectImg->build("select ");
- selectImg->bind(cTableSeriesMedia::fiMediaWidth, cDBS::bndOut);
- selectImg->bind(cTableSeriesMedia::fiMediaHeight, cDBS::bndOut, ", ");
- selectImg->bind(cTableSeriesMedia::fiMediaType, cDBS::bndOut, ", ");
- selectImg->build(" from %s where ", tSeriesMedia->TableName());
- selectImg->bind(cTableSeriesMedia::fiSeriesId, cDBS::bndIn | cDBS::bndSet);
- selectImg->build(" and %s in (%d, %d, %d, %d, %d, %d, %d, %d, %d)",
- tSeriesMedia->getField(cTableSeriesMedia::fiMediaType)->name,
- msPoster1, msPoster2, msPoster3,
- msFanart1, msFanart2, msFanart3,
- msBanner1, msBanner2, msBanner3);
- status += selectImg->prepare();
- if (status != success) {
- delete selectImg;
- return;
- }
- tSeriesMedia->setValue(cTableSeriesMedia::fiSeriesId, series->id);
- for (int res = selectImg->find(); res; res = selectImg->fetch()) {
- int mediaType = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaType);
- int mediaWidth = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaWidth);
- int mediaHeight = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaHeight);
- string mediaPath = LoadMediaSeries(series->id, mediaType, path, mediaWidth, mediaHeight);
- series->InsertMedia(mediaType, mediaWidth, mediaHeight, mediaPath);
- if (mediaType == msPoster1) {
- string thumbPath = path + "/poster_thumb.jpg";
- series->InsertMedia(msPosterThumb, mediaWidth/5, mediaHeight/5, thumbPath);
- }
- }
- selectImg->freeResult();
- delete selectImg;
+void cUpdate::LoadSeriesMedia(cTVDBSeries *series, string path) {
+ tSeriesMedia->clear();
+ tSeriesMedia->setValue(cTableSeriesMedia::fiSeriesId, series->id);
+
+ for (int res = selectSeriesMedia->find(); res; res = selectSeriesMedia->fetch()) {
+ int mediaType = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaType);
+ int mediaWidth = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaWidth);
+ int mediaHeight = tSeriesMedia->getIntValue(cTableSeriesMedia::fiMediaHeight);
+ string mediaPath = LoadMediaSeries(series->id, mediaType, path, mediaWidth, mediaHeight);
+ series->InsertMedia(mediaType, mediaWidth, mediaHeight, mediaPath);
+ if (mediaType == msPoster1) {
+ string thumbPath = path + "/poster_thumb.jpg";
+ series->InsertMedia(msPosterThumb, mediaWidth/5, mediaHeight/5, thumbPath);
+ }
+ }
+
+ selectSeriesMedia->freeResult();
}
string cUpdate::LoadMediaSeries(int seriesId, int mediaType, string path, int width, int height) {
- int status = success;
- stringstream iPath;
+ stringstream iPath("");
iPath << path << "/";
bool createThumb = false;
- stringstream tPath;
+ stringstream tPath("");
tPath << path << "/";
switch (mediaType) {
case msPoster1:
@@ -556,26 +700,11 @@ string cUpdate::LoadMediaSeries(int seriesId, int mediaType, string path, int wi
}
if (!CreateDirectory(path))
return "";
+
tSeriesMedia->clear();
- cDbValue imageSize;
- cDBS::FieldDef imageSizeDef = { "media_content", cDBS::ffUInt, 0, 999, cDBS::ftData };
- imageSize.setField(&imageSizeDef);
- cDbStatement *selectImg = new cDbStatement(tSeriesMedia);
- selectImg->build("select ");
- selectImg->bind(cTableSeriesMedia::fiMediaContent, cDBS::bndOut);
- selectImg->build(", length(");
- selectImg->bind(&imageSize, cDBS::bndOut);
- selectImg->build(")");
- selectImg->build(" from %s where ", tSeriesMedia->TableName());
- selectImg->bind(cTableSeriesMedia::fiSeriesId, cDBS::bndIn | cDBS::bndSet);
- selectImg->bind(cTableSeriesMedia::fiMediaType, cDBS::bndIn | cDBS::bndSet, " and ");
- status += selectImg->prepare();
- if (status != success) {
- delete selectImg;
- return "";
- }
tSeriesMedia->setValue(cTableSeriesMedia::fiSeriesId, seriesId);
tSeriesMedia->setValue(cTableSeriesMedia::fiMediaType, mediaType);
+
int res = selectImg->find();
if (res) {
int size = imageSize.getIntValue();
@@ -587,8 +716,8 @@ string cUpdate::LoadMediaSeries(int seriesId, int mediaType, string path, int wi
CreateThumbnail(imgPath, thumbPath, width, height, 5);
}
}
+
selectImg->freeResult();
- delete selectImg;
return imgPath;
}
@@ -599,8 +728,7 @@ string cUpdate::LoadMediaSeries(int seriesId, int mediaType, string path, int wi
int cUpdate::ReadMovies(bool isRec) {
scrapManager->InitIterator(isRec);
int movieId = 0;
- int i=0;
-
+
if (!CreateDirectory(config.imageDir))
return 0;
if (!CreateDirectory(imgPathMovies))
@@ -617,7 +745,7 @@ int cUpdate::ReadMovies(bool isRec) {
if (!res)
continue;
movie = scrapManager->AddMovie(tMovies);
- stringstream mPath;
+ stringstream mPath("");
mPath << imgPathMovies << "/" << movieId;
string moviePath = mPath.str();
ReadMovieActors(movie);
@@ -629,71 +757,24 @@ int cUpdate::ReadMovies(bool isRec) {
}
void cUpdate::ReadMovieActors(cMovieDbMovie *movie) {
- int status = success;
- cDbValue actorRole;
- cDbValue actorMovie;
- cDbValue thbWidth;
- cDbValue thbHeight;
- actorRole.setField(tMovieActors->getField(cTableMovieActors::fiRole));
- actorMovie.setField(tMovieActors->getField(cTableMovieActors::fiMovieId));
- thbWidth.setField(tMovieMedia->getField(cTableMovieMedia::fiMediaWidth));
- thbHeight.setField(tMovieMedia->getField(cTableMovieMedia::fiMediaHeight));
- cDbStatement *selectActors = new cDbStatement(tMovieActor);
- selectActors->build("select ");
- selectActors->setBindPrefix("act.");
- selectActors->bind(cTableMovieActor::fiActorId, cDBS::bndOut);
- selectActors->bind(cTableMovieActor::fiActorName, cDBS::bndOut, ", ");
- selectActors->setBindPrefix("role.");
- selectActors->bind(&actorRole, cDBS::bndOut, ", ");
- selectActors->setBindPrefix("thumb.");
- selectActors->bind(&thbWidth, cDBS::bndOut, ", ");
- selectActors->bind(&thbHeight, cDBS::bndOut, ", ");
- selectActors->clrBindPrefix();
- selectActors->build(" from %s act, %s role, %s thumb where ",
- tMovieActor->TableName(), tMovieActors->TableName(), tMovieMedia->TableName());
- selectActors->build("act.%s = role.%s ",
- tMovieActor->getField(cTableMovieActor::fiActorId)->name,
- tMovieActors->getField(cTableMovieActors::fiActorId)->name);
- selectActors->build(" and role.%s = thumb.%s ",
- tMovieActors->getField(cTableMovieActors::fiActorId)->name,
- tMovieMedia->getField(cTableMovieMedia::fiActorId)->name);
- selectActors->setBindPrefix("role.");
- selectActors->bind(&actorMovie, cDBS::bndIn | cDBS::bndSet, " and ");
- status += selectActors->prepare();
- if (status != success) {
- delete selectActors;
- return;
- }
+ tMovieActor->clear();
+ tMovieMedia->clear();
actorMovie.setValue(movie->id);
- for (int res = selectActors->find(); res; res = selectActors->fetch()) {
+
+ for (int res = selectMovieActors->find(); res; res = selectMovieActors->fetch()) {
scrapManager->AddMovieActor(movie, tMovieActor, actorRole.getStrValue());
int tmbWidth = thbWidth.getIntValue();
int tmbHeight = thbHeight.getIntValue();
movie->SetActorThumbSize(tMovieActor->getIntValue(cTableMovieActor::fiActorId), tmbWidth, tmbHeight);
}
- selectActors->freeResult();
- delete selectActors;
+
+ selectMovieActors->freeResult();
}
void cUpdate::LoadMovieActorThumbs(cMovieDbMovie *movie) {
- int status = success;
- cDbValue imageSize;
- cDBS::FieldDef imageSizeDef = { "media_content", cDBS::ffUInt, 0, 999, cDBS::ftData };
- imageSize.setField(&imageSizeDef);
tMovieMedia->clear();
- cDbStatement *selectActorThumbs = new cDbStatement(tMovieMedia);
- selectActorThumbs->build("select ");
- selectActorThumbs->bind(cTableMovieMedia::fiMediaContent, cDBS::bndOut);
- selectActorThumbs->build(", length(");
- selectActorThumbs->bind(&imageSize, cDBS::bndOut);
- selectActorThumbs->build(")");
- selectActorThumbs->build(" from %s where ", tMovieMedia->TableName());
- selectActorThumbs->bind(cTableMovieMedia::fiActorId, cDBS::bndIn | cDBS::bndSet);
- status += selectActorThumbs->prepare();
- if (status != success) {
- delete selectActorThumbs;
- return;
- }
+ imageSize.setField(&imageSizeDef);
+
string movieActorsPath = imgPathMovies + "/actors";
if (!CreateDirectory(movieActorsPath))
return;
@@ -701,13 +782,13 @@ void cUpdate::LoadMovieActorThumbs(cMovieDbMovie *movie) {
vector<int> IDs = movie->GetActorIDs();
for (vector<int>::iterator it = IDs.begin(); it != IDs.end(); it++) {
int actorId = (int)*it;
- stringstream tName;
+ stringstream tName("");
tName << "actor_" << actorId << ".jpg";
string thumbName = tName.str();
string thumbFullPath = movieActorsPath + "/" + thumbName;
if (!FileExists(thumbFullPath)) {
tMovieMedia->setValue(cTableMovieMedia::fiActorId, actorId);
- int res = selectActorThumbs->find();
+ int res = selectMovieActorThumbs->find();
if (res) {
int size = imageSize.getIntValue();
if (FILE* fh = fopen(thumbFullPath.c_str(), "w")) {
@@ -720,33 +801,15 @@ void cUpdate::LoadMovieActorThumbs(cMovieDbMovie *movie) {
movie->SetActorPath(actorId, thumbFullPath);
}
}
- selectActorThumbs->freeResult();
- delete selectActorThumbs;
+
+ selectMovieActorThumbs->freeResult();
}
void cUpdate::LoadMovieMedia(cMovieDbMovie *movie, string moviePath) {
- int status = success;
tMovieMedia->clear();
- cDbStatement *selectImg = new cDbStatement(tMovieMedia);
- selectImg->build("select ");
- selectImg->bind(cTableMovieMedia::fiMediaWidth, cDBS::bndOut);
- selectImg->bind(cTableMovieMedia::fiMediaHeight, cDBS::bndOut, ", ");
- selectImg->bind(cTableMovieMedia::fiMediaType, cDBS::bndOut, ", ");
- selectImg->build(" from %s where ", tMovieMedia->TableName());
- selectImg->bind(cTableMovieMedia::fiMovieId, cDBS::bndIn | cDBS::bndSet);
- selectImg->build(" and %s in (%d, %d, %d, %d)",
- tMovieMedia->getField(cTableMovieMedia::fiMediaType)->name,
- mmPoster,
- mmFanart,
- mmCollectionPoster,
- mmCollectionFanart);
- status += selectImg->prepare();
- if (status != success) {
- delete selectImg;
- return;
- }
tMovieMedia->setValue(cTableMovieMedia::fiMovieId, movie->id);
- for (int res = selectImg->find(); res; res = selectImg->fetch()) {
+
+ for (int res = selectMovieMedia->find(); res; res = selectMovieMedia->fetch()) {
int mediaType = tMovieMedia->getIntValue(cTableMovieMedia::fiMediaType);
int mediaWidth = tMovieMedia->getIntValue(cTableMovieMedia::fiMediaWidth);
int mediaHeight = tMovieMedia->getIntValue(cTableMovieMedia::fiMediaHeight);
@@ -761,18 +824,16 @@ void cUpdate::LoadMovieMedia(cMovieDbMovie *movie, string moviePath) {
m->path = moviePath + "/poster_thumb.jpg";
movie->InsertMedia(m);
}
-
}
- selectImg->freeResult();
- delete selectImg;
+
+ selectMovieMedia->freeResult();
}
string cUpdate::LoadMediaMovie(int movieId, int mediaType, string path, int width, int height) {
- int status = success;
- stringstream iPath;
+ stringstream iPath("");
iPath << path << "/";
bool createThumb = false;
- stringstream tPath;
+ stringstream tPath("");
tPath << path << "/";
switch (mediaType) {
case mmPoster:
@@ -802,27 +863,13 @@ string cUpdate::LoadMediaMovie(int movieId, int mediaType, string path, int widt
}
if (!CreateDirectory(path))
return imgPath;
+
tMovieMedia->clear();
- cDbValue imageSize;
- cDBS::FieldDef imageSizeDef = { "media_content", cDBS::ffUInt, 0, 999, cDBS::ftData };
imageSize.setField(&imageSizeDef);
- cDbStatement *selectImg = new cDbStatement(tMovieMedia);
- selectImg->build("select ");
- selectImg->bind(cTableMovieMedia::fiMediaContent, cDBS::bndOut);
- selectImg->build(", length(");
- selectImg->bind(&imageSize, cDBS::bndOut);
- selectImg->build(")");
- selectImg->build(" from %s where ", tMovieMedia->TableName());
- selectImg->bind(cTableMovieMedia::fiMovieId, cDBS::bndIn | cDBS::bndSet);
- selectImg->bind(cTableMovieMedia::fiMediaType, cDBS::bndIn | cDBS::bndSet, " and ");
- status += selectImg->prepare();
- if (status != success) {
- delete selectImg;
- return "";
- }
tMovieMedia->setValue(cTableMovieMedia::fiMovieId, movieId);
tMovieMedia->setValue(cTableMovieMedia::fiMediaType, mediaType);
- int res = selectImg->find();
+
+ int res = selectMediaMovie->find();
if (res) {
int size = imageSize.getIntValue();
if (FILE* fh = fopen(imgPath.c_str(), "w")) {
@@ -833,37 +880,21 @@ string cUpdate::LoadMediaMovie(int movieId, int mediaType, string path, int widt
CreateThumbnail(imgPath, thumbPath, width, height, 4);
}
}
- selectImg->freeResult();
- delete selectImg;
+
+ selectMediaMovie->freeResult();
return imgPath;
}
//***************************************************************************
// RECORDINGS
//***************************************************************************
-int cUpdate::ReadRecordings(void) {
- int status = success;
- cDbStatement *select = new cDbStatement(tRecordings);
- select->build("select ");
- select->bind(cTableRecordings::fiRecPath, cDBS::bndOut);
- select->bind(cTableRecordings::fiRecStart, cDBS::bndOut, ", ");
- select->bind(cTableRecordings::fiMovieId, cDBS::bndOut, ", ");
- select->bind(cTableRecordings::fiSeriesId, cDBS::bndOut, ", ");
- select->bind(cTableRecordings::fiEpisodeId, cDBS::bndOut, ", ");
- select->build(" from %s where ", tRecordings->TableName());
- select->bind(cTableRecordings::fiUuid, cDBS::bndIn | cDBS::bndSet);
- select->build(" and %s = 0", tRecordings->getField(cTableRecordings::fiScrapNew)->name);
-
- status += select->prepare();
- if (status != success) {
- delete select;
- return 0;
- }
+int cUpdate::ReadRecordings(void) {
tRecordings->clear();
tRecordings->setValue(cTableRecordings::fiUuid, config.uuid.c_str());
int numRecs = 0;
- for (int res = select->find(); res; res = select->fetch()) {
+
+ for (int res = selectRecordings->find(); res; res = selectRecordings->fetch()) {
int recStart = tRecordings->getIntValue(cTableRecordings::fiRecStart);
string recPath = tRecordings->getStrValue(cTableRecordings::fiRecPath);
int movieId = tRecordings->getIntValue(cTableRecordings::fiMovieId);
@@ -873,8 +904,8 @@ int cUpdate::ReadRecordings(void) {
if (isNew)
numRecs++;
}
- select->freeResult();
- delete select;
+
+ selectRecordings->freeResult();
return numRecs;
}
@@ -934,7 +965,7 @@ int cUpdate::ScanVideoDirScrapInfo(void) {
for (cRecording *rec = Recordings.First(); rec; rec = Recordings.Next(rec)) {
int recStart = rec->Start();
string recPath = getRecPath(rec);
- bool recExists = LoadRecording(recStart, recPath);
+ /* bool recExists = */ LoadRecording(recStart, recPath);
int scrapInfoMovieID = 0;
int scrapInfoSeriesID = 0;
int scrapInfoEpisodeID = 0;
@@ -975,13 +1006,13 @@ bool cUpdate::ScrapInfoChanged(int scrapInfoMovieID, int scrapInfoSeriesID, int
}
void cUpdate::ReadScrapInfo(string recDir, int &scrapInfoMovieID, int &scrapInfoSeriesID, int &scrapInfoEpisodeID) {
- stringstream sInfoName;
+ stringstream sInfoName("");
sInfoName << recDir << "/" << config.recScrapInfoName;
string scrapInfoName = sInfoName.str();
if (!FileExists(scrapInfoName, false)) {
string twoHigher = TwoFoldersHigher(recDir);
if (twoHigher.size() > 0) {
- stringstream sInfoNameAlt;
+ stringstream sInfoNameAlt("");
sInfoNameAlt << twoHigher << "/" << config.recScrapInfoName;
scrapInfoName = sInfoNameAlt.str();
if (!FileExists(scrapInfoName, false)) {
@@ -1119,168 +1150,187 @@ int cUpdate::CleanupMovies(void) {
}
int cUpdate::CleanupRecordings(void) {
- //delete all not anymore existing recordings in database
- int status = success;
- cDbStatement *select = new cDbStatement(tRecordings);
- select->build("select ");
- select->bind(cTableRecordings::fiRecPath, cDBS::bndOut);
- select->bind(cTableRecordings::fiRecStart, cDBS::bndOut, ", ");
- select->build(" from %s where ", tRecordings->TableName());
- select->bind(cTableRecordings::fiUuid, cDBS::bndIn | cDBS::bndSet);
-
- status += select->prepare();
- if (status != success) {
- delete select;
- return 0;
- }
+ // delete all not anymore existing recordings in database
tRecordings->clear();
tRecordings->setValue(cTableRecordings::fiUuid, config.uuid.c_str());
int numRecsDeleted = 0;
- for (int res = select->find(); res; res = select->fetch()) {
+
+ for (int res = selectCleanupRecordings->find(); res; res = selectCleanupRecordings->fetch()) {
int recStart = tRecordings->getIntValue(cTableRecordings::fiRecStart);
string recPath = tRecordings->getStrValue(cTableRecordings::fiRecPath);
if (!Recordings.GetByName(recPath.c_str())) {
- stringstream delWhere;
+ stringstream delWhere("");
delWhere << "uuid = '" << config.uuid << "' and rec_path = '" << recPath << "' and rec_start = " << recStart;
tRecordings->deleteWhere(delWhere.str().c_str());
numRecsDeleted++;
}
}
- select->freeResult();
- delete select;
+ selectCleanupRecordings->freeResult();
return numRecsDeleted;
}
-
//***************************************************************************
// Action
//***************************************************************************
-void cUpdate::Action() {
+void cUpdate::Action()
+{
tell(0, "Update thread started (pid=%d)", getpid());
mutex.Lock();
loopActive = yes;
- int sleep = 10;
+
+ int worked = no;
+ int sleep = 60;
int scanFreq = 60 * 2;
int scanNewRecFreq = 60 * 5;
int scanNewRecDBFreq = 60 * 5;
int cleanUpFreq = 60 * 10;
+
forceUpdate = true;
forceRecordingUpdate = true;
+
time_t lastScan = time(0);
time_t lastScanNewRec = time(0);
time_t lastScanNewRecDB = time(0);
time_t lastCleanup = time(0);
bool init = true;
- while (loopActive && Running()) {
- int reconnectTimeout; //set by checkConnection
- if (CheckConnection(reconnectTimeout) != success) {
- waitCondition.TimedWait(mutex, reconnectTimeout*1000);
- continue;
- }
- //Update Recordings from Database
- if (forceRecordingUpdate || (time(0) - lastScanNewRecDB > scanNewRecDBFreq) && Running()) {
- if (!init && CheckEpgdBusy())
- continue;
- int numNewRecs = ReadRecordings();
- if (numNewRecs > 0) {
- int numSeries = ReadSeries(true);
- int numMovies = ReadMovies(true);
- tell(0, "Loaded %d new Recordings from Database, %d series, %d movies", numNewRecs, numSeries, numMovies);
- }
- forceRecordingUpdate = false;
+
+ while (loopActive && Running())
+ {
+ int reconnectTimeout; // set by checkConnection
+
+ waitCondition.TimedWait(mutex, init ? sleep*500 : sleep*1000);
+
+ if (CheckConnection(reconnectTimeout) != success)
+ continue;
+
+ // auch beim init auf den epgd warten, wenn der gerade busy ist müssen die sich User etwas gedulden ;)
+
+ if (CheckEpgdBusy())
+ {
+ tell(1, "epgd busy, trying again in %d seconds ...", sleep);
+ continue;
}
- //Update Events
- if (!config.headless && (forceUpdate || (time(0) - lastScan > scanFreq)) && Running()) {
- if (!init && CheckEpgdBusy())
- continue;
- int numNewEvents = ReadScrapedEvents();
- if (numNewEvents > 0) {
- tell(0, "Loaded %d new scraped Events from Database", numNewEvents);
- } else {
- lastScan = time(0);
- forceUpdate = false;
- init = false;
- continue;
- }
- tell(0, "Loading new Movies from Database...");
- time_t now = time(0);
- int numNewMovies = ReadMovies(false);
- int dur = time(0) - now;
- tell(0, "Loaded %d new Movies in %ds from Database", numNewMovies, dur);
-
- tell(0, "Loading new Series and Episodes from Database...");
- now = time(0);
- int numNewSeries = ReadSeries(false);
- dur = time(0) - now;
- tell(0, "Loaded %d new Series and Episodes in %ds from Database", numNewSeries, dur);
-
- lastScan = time(0);
- forceUpdate = false;
+ // Update Recordings from Database
+
+ if (forceRecordingUpdate || (time(0) - lastScanNewRecDB > scanNewRecDBFreq) && Running())
+ {
+ worked++;
+ int numNewRecs = ReadRecordings();
+ lastScanNewRecDB = time(0);
+
+ if (numNewRecs > 0)
+ {
+ int numSeries = ReadSeries(true);
+ int numMovies = ReadMovies(true);
+ tell(0, "Loaded %d new Recordings from Database, %d series, %d movies", numNewRecs, numSeries, numMovies);
+ }
+
+ forceRecordingUpdate = false;
}
- //Scan new recordings
- if ((init || forceVideoDirUpdate || (time(0) - lastScanNewRec > scanNewRecFreq)) && Running()) {
- if (CheckEpgdBusy()) {
- waitCondition.TimedWait(mutex, 1000);
- continue;
- }
- static int recState = 0;
- if (Recordings.StateChanged(recState)) {
- tell(0, "Searching for new recordings because of Recordings State Change...");
- int newRecs = ScanVideoDir();
- tell(0, "found %d new recordings", newRecs);
- }
- lastScanNewRec = time(0);
- forceVideoDirUpdate = false;
+ // Update Events
+
+ if (!config.headless && (forceUpdate || (time(0) - lastScan > scanFreq)) && Running())
+ {
+ worked++;
+ int numNewEvents = ReadScrapedEvents();
+
+ if (numNewEvents > 0)
+ {
+ tell(0, "Loaded %d new scraped Events from Database", numNewEvents);
+ }
+ else
+ {
+ lastScan = time(0);
+ forceUpdate = false;
+ init = false;
+ continue;
+ }
+
+ tell(0, "Loading new Movies from Database...");
+ time_t now = time(0);
+ worked++;
+ int numNewMovies = ReadMovies(false);
+ int dur = time(0) - now;
+ tell(0, "Loaded %d new Movies in %ds from Database", numNewMovies, dur);
+
+ tell(0, "Loading new Series and Episodes from Database...");
+ now = time(0);
+ worked++;
+ int numNewSeries = ReadSeries(false);
+ dur = time(0) - now;
+ tell(0, "Loaded %d new Series and Episodes in %ds from Database", numNewSeries, dur);
+
+ lastScan = time(0);
+ forceUpdate = false;
}
+
+ // Scan new recordings
+ if ((init || forceVideoDirUpdate || (time(0) - lastScanNewRec > scanNewRecFreq)) && Running())
+ {
+ static int recState = 0;
+
+ if (Recordings.StateChanged(recState))
+ {
+ tell(0, "Searching for new recordings because of Recordings State Change...");
+ worked++;
+ int newRecs = ScanVideoDir();
+ tell(0, "found %d new recordings", newRecs);
+ }
+
+ lastScanNewRec = time(0);
+ forceVideoDirUpdate = false;
+ }
+
init = false;
+
+ // Scan Video dir for scrapinfo files
- //Scan Video dir for scrapinfo files
- if (forceScrapInfoUpdate) {
- if (CheckEpgdBusy()) {
- tell(0, "epgd busy, try again in 1s...");
- waitCondition.TimedWait(mutex, 1000);
- continue;
- }
- tell(0, "Checking for new or updated scrapinfo files in recordings...");
- int numUpdated = ScanVideoDirScrapInfo();
- tell(0, "found %d new or updated scrapinfo files", numUpdated);
- forceScrapInfoUpdate = false;
+ if (forceScrapInfoUpdate)
+ {
+ worked++;
+ tell(0, "Checking for new or updated scrapinfo files in recordings...");
+ int numUpdated = ScanVideoDirScrapInfo();
+ tell(0, "found %d new or updated scrapinfo files", numUpdated);
+ forceScrapInfoUpdate = false;
}
- //Cleanup
- if ((time(0) - lastCleanup > cleanUpFreq) && Running()){
- if (CheckEpgdBusy()) {
- waitCondition.TimedWait(mutex, 1000);
- continue;
- }
- int seriesDeleted = CleanupSeries();
- int moviesDeleted = CleanupMovies();
- if (seriesDeleted > 0 || moviesDeleted > 0) {
- tell(0, "Deleted %d outdated series image folders", seriesDeleted);
- tell(0, "Deleted %d outdated movie image folders", moviesDeleted);
- }
- lastCleanup = time(0);
+ // Cleanup
+
+ if ((time(0) - lastCleanup > cleanUpFreq) && Running())
+ {
+ worked++;
+ int seriesDeleted = CleanupSeries();
+ int moviesDeleted = CleanupMovies();
+
+ if (seriesDeleted > 0 || moviesDeleted > 0)
+ {
+ tell(0, "Deleted %d outdated series image folders", seriesDeleted);
+ tell(0, "Deleted %d outdated movie image folders", moviesDeleted);
+ }
+
+ lastCleanup = time(0);
}
- //Cleanup Recording DB
- if (forceCleanupRecordingDb) {
- if (CheckEpgdBusy()) {
- waitCondition.TimedWait(mutex, 1000);
- continue;
- }
+ // Cleanup Recording DB
+
+ if (forceCleanupRecordingDb)
+ {
+ worked++;
tell(0, "Cleaning up recordings in database...");
int recsDeleted = CleanupRecordings();
tell(0, "Deleted %d not anymore existing recordings in database", recsDeleted);
forceCleanupRecordingDb = false;
}
+
+ if (worked && config.debug)
+ connection->showStat();
- waitCondition.TimedWait(mutex, sleep*1000);
-
+ worked = no;
}
loopActive = no;
@@ -1290,6 +1340,7 @@ void cUpdate::Action() {
//***************************************************************************
// External trigggering of Actions
//***************************************************************************
+
void cUpdate::ForceUpdate(void) {
tell(0, "full update from database forced");
forceUpdate = true;