/* * update.c: TVM2VDR plugin for the Video Disk Recorder * * See the README file for copyright information and how to reach the author. * */ #include #include #include #include #include #include #include #include "update.h" //*************************************************************************** // Store To Table //*************************************************************************** int cEpisodeFile::storeToTable(Table* episodeDb, const cList* linkLines) { int pos; char* p; string compName; char shortName[100]; *shortName = 0; string lang = "de"; string ename = name; const cList* theLines = linkLines ? linkLines : lines; if (!theLines) return done; if (isLink()) ename = link; // detect language special if ((pos = ename.rfind('.')) != string::npos) { lang = ename.substr(pos+1); if (lang == "de" || lang == "en" || lang == "de-en" || lang == "en-de") ename.erase(pos); else lang = "de"; } // build compressed name for episode lookup compName = ename; prepareCompressed(compName); // delete old entry of this episode string delStmt = "episodename = '" + compName + "' and lang = '" + lang + "'"; episodeDb->deleteWhere(delStmt.c_str()); for (cLine* l = theLines->First(); l; l = theLines->Next(l)) { const char* line = l->Text(); if (l->Length() < 4) continue; // printf("-> '%s'\n", l->Text()); if ((p = strstr((char*)line, "# SHORT")) && l->Length() > 9) { snprintf(shortName, 100, "%.*s", (int)strlen(p+8), p+8); continue; } if (!isdigit(line[0]) || !isdigit(line[1]) || line[2] != '\t') continue; // found episode line ... string partNameComp; char partName[200]; char comment[200]; int se; int ep; int no; // get lines like: // "01 1 1 Schatten der Vergangenheit " if (sscanf(line, "%d\t%d\t%d\t%[^\t\n]\t%[^\n]", &se, &ep, &no, partName, comment) < 4) continue; partNameComp = partName; prepareCompressed(partNameComp); episodeDb->clear(); episodeDb->setValue(cEpisodeFields::fiEpisodeName, ename.c_str()); episodeDb->setValue(cEpisodeFields::fiLink, isLink()); episodeDb->setValue(cEpisodeFields::fiCompName, compName.c_str()); episodeDb->setValue(cEpisodeFields::fiLang, lang.c_str()); episodeDb->setValue(cEpisodeFields::fiShortName, shortName); episodeDb->setValue(cEpisodeFields::fiPartName, partName); episodeDb->setValue(cEpisodeFields::fiCompPartName, partNameComp.c_str()); episodeDb->setValue(cEpisodeFields::fiSeason, se); episodeDb->setValue(cEpisodeFields::fiPart, ep); episodeDb->setValue(cEpisodeFields::fiNumber, no); episodeDb->store(); } return 0; }