diff options
author | louis <louis.braun@gmx.de> | 2015-03-12 17:22:16 +0100 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-03-12 17:22:16 +0100 |
commit | 3cc8e78e1bf00e16b49520ac416b74b5fd73c906 (patch) | |
tree | 4425c4eb4b9833d927aae2f65d0f3a99d3792f83 /detailview.c | |
download | vdr-plugin-tvguideng-3cc8e78e1bf00e16b49520ac416b74b5fd73c906.tar.gz vdr-plugin-tvguideng-3cc8e78e1bf00e16b49520ac416b74b5fd73c906.tar.bz2 |
Version 0.0.10.0.1
Diffstat (limited to 'detailview.c')
-rw-r--r-- | detailview.c | 621 |
1 files changed, 621 insertions, 0 deletions
diff --git a/detailview.c b/detailview.c new file mode 100644 index 0000000..72c4eb6 --- /dev/null +++ b/detailview.c @@ -0,0 +1,621 @@ +#include "helpers.h"
+#include "tvguidengosd.h"
+#include "detailview.h"
+#include "services/scraper2vdr.h"
+#include "services/epgsearch.h"
+
+cDetailView::cDetailView(cOsdView *detailView, const cEvent *event) {
+ init = true;
+ lastSecond = -1;
+ this->detailView = detailView;
+ this->event = event;
+ back = detailView->GetViewElement(vedBackground);
+ header = detailView->GetViewElement(vedHeader);
+ footer = detailView->GetViewElement(vedFooter);
+ watch = detailView->GetViewElement(vedTime);
+ tabs = detailView->GetViewTabs();
+}
+
+cDetailView::~cDetailView() {
+ delete back;
+ delete header;
+ delete footer;
+ delete watch;
+ delete detailView;
+}
+
+void cDetailView::Draw(void) {
+ if (!event) {
+ return;
+ }
+ if (init) {
+ DrawBackground();
+ DrawHeader();
+ DrawFooter();
+ Flush();
+ SetTabTokens();
+ tabs->Init();
+ init = false;
+ }
+ tabs->Display();
+}
+
+void cDetailView::Left(void) {
+ tabs->Left();
+ tabs->Display();
+}
+
+void cDetailView::Right(void) {
+ tabs->Right();
+ tabs->Display();
+}
+
+void cDetailView::Up(void) {
+ tabs->Up();
+ tabs->Display();
+}
+
+void cDetailView::Down(void) {
+ tabs->Down();
+ tabs->Display();
+}
+
+void cDetailView::DrawBackground(void) {
+ back->Display();
+}
+
+void cDetailView::DrawHeader(void) {
+ if (!event)
+ return;
+ header->ClearTokens();
+ static cPlugin *pScraper = GetScraperPlugin();
+ if (!pScraper) {
+ header->AddIntToken("ismovie", false);
+ header->AddIntToken("isseries", false);
+ header->AddIntToken("posteravailable", false);
+ header->AddIntToken("banneravailable", false);
+ } else {
+ ScraperGetEventType getType;
+ getType.event = event;
+ if (!pScraper->Service("GetEventType", &getType)) {
+ header->AddIntToken("ismovie", false);
+ header->AddIntToken("isseries", false);
+ header->AddIntToken("posteravailable", false);
+ header->AddIntToken("banneravailable", false);
+ } else {
+ if (getType.type == tMovie) {
+ cMovie movie;
+ movie.movieId = getType.movieId;
+ pScraper->Service("GetMovie", &movie);
+ header->AddIntToken("ismovie", true);
+ header->AddIntToken("isseries", false);
+ header->AddIntToken("posteravailable", true);
+ header->AddIntToken("banneravailable", false);
+ header->AddStringToken("posterpath", movie.poster.path);
+ header->AddIntToken("posterwidth", movie.poster.width);
+ header->AddIntToken("posterheight", movie.poster.height);
+ } else if (getType.type == tSeries) {
+ cSeries series;
+ series.seriesId = getType.seriesId;
+ series.episodeId = getType.episodeId;
+ pScraper->Service("GetSeries", &series);
+ header->AddIntToken("ismovie", false);
+ header->AddIntToken("isseries", true);
+ vector<cTvMedia>::iterator poster = series.posters.begin();
+ if (poster != series.posters.end()) {
+ header->AddIntToken("posterwidth", (*poster).width);
+ header->AddIntToken("posterheight", (*poster).height);
+ header->AddStringToken("posterpath", (*poster).path);
+ header->AddIntToken("posteravailable", true);
+ } else {
+ header->AddIntToken("posterwidth", 0);
+ header->AddIntToken("posterheight", 0);
+ header->AddStringToken("posterpath", "");
+ header->AddIntToken("posteravailable", false);
+ }
+ vector<cTvMedia>::iterator banner = series.banners.begin();
+ if (banner != series.banners.end()) {
+ header->AddIntToken("bannerwidth", (*banner).width);
+ header->AddIntToken("bannerheight", (*banner).height);
+ header->AddStringToken("bannerpath", (*banner).path);
+ header->AddIntToken("banneravailable", true);
+ } else {
+ header->AddIntToken("bannerwidth", 0);
+ header->AddIntToken("bannerheight", 0);
+ header->AddStringToken("bannerpath", "");
+ header->AddIntToken("banneravailable", false);
+ }
+ } else {
+ header->AddIntToken("ismovie", false);
+ header->AddIntToken("isseries", false);
+ header->AddIntToken("posteravailable", false);
+ header->AddIntToken("banneravailable", false);
+ }
+ }
+ }
+
+ header->AddStringToken("title", event->Title() ? event->Title() : "");
+ header->AddStringToken("shorttext", event->ShortText() ? event->ShortText() : "");
+ header->AddStringToken("start", *(event->GetTimeString()));
+ header->AddStringToken("stop", *(event->GetEndTimeString()));
+
+ time_t startTime = event->StartTime();
+ header->AddStringToken("day", *WeekDayName(startTime));
+ header->AddStringToken("date", *ShortDateString(startTime));
+ struct tm * sStartTime = localtime(&startTime);
+ header->AddIntToken("year", sStartTime->tm_year + 1900);
+ header->AddIntToken("daynumeric", sStartTime->tm_mday);
+ header->AddIntToken("month", sStartTime->tm_mon+1);
+
+ const cChannel *channel = Channels.GetByChannelID(event->ChannelID());
+ if (channel) {
+ header->AddStringToken("channelname", channel->Name() ? channel->Name() : "");
+ header->AddIntToken("channelnumber", channel->Number());
+ } else {
+ header->AddStringToken("channelname", "");
+ header->AddIntToken("channelnumber", 0);
+ }
+ string channelID = *(channel->GetChannelID().ToString());
+ header->AddStringToken("channelid", channelID);
+ header->AddIntToken("channellogoexists", header->ChannelLogoExists(channelID));
+
+ bool isRunning = false;
+ time_t now = time(NULL);
+ if ((now >= event->StartTime()) && (now <= event->EndTime()))
+ isRunning = true;
+ header->AddIntToken("running", isRunning);
+ if (isRunning) {
+ header->AddIntToken("elapsed", (now - event->StartTime())/60);
+ } else {
+ header->AddIntToken("elapsed", 0);
+ }
+ header->AddIntToken("duration", event->Duration() / 60);
+ header->AddIntToken("durationhours", event->Duration() / 3600);
+ header->AddStringToken("durationminutes", *cString::sprintf("%.2d", (event->Duration() / 60)%60));
+ if (event->Vps())
+ header->AddStringToken("vps", *event->GetVpsString());
+ else
+ header->AddStringToken("vps", "");
+
+ stringstream epgImageName;
+ epgImageName << event->EventID();
+ string epgImagePath = header->GetEpgImagePath();
+
+ bool epgPicAvailable = FileExists(epgImagePath, epgImageName.str(), "jpg");
+ if (epgPicAvailable) {
+ header->AddIntToken("epgpicavailable", true);
+ header->AddStringToken("epgpicpath", *cString::sprintf("%s%s.jpg", epgImagePath.c_str(), epgImageName.str().c_str()));
+ } else {
+ epgImageName << "_0";
+ epgPicAvailable = FileExists(epgImagePath, epgImageName.str(), "jpg");
+ if (epgPicAvailable) {
+ header->AddIntToken("epgpicavailable", true);
+ header->AddStringToken("epgpicpath", *cString::sprintf("%s%s.jpg", epgImagePath.c_str(), epgImageName.str().c_str()));
+ } else {
+ header->AddIntToken("epgpicavailable", false);
+ header->AddStringToken("epgpicpath", "");
+ }
+ }
+
+ header->Display();
+}
+
+void cDetailView::DrawFooter(void) {
+ string textGreen = "";
+ string textYellow = "";
+ string textRed = tr("Search & Record");
+ string textBlue = tr("Switch");
+
+ int colorKeys[4] = { Setup.ColorKey0, Setup.ColorKey1, Setup.ColorKey2, Setup.ColorKey3 };
+
+ footer->Clear();
+ footer->ClearTokens();
+
+ footer->AddStringToken("red", textRed);
+ footer->AddStringToken("green", textGreen);
+ footer->AddStringToken("yellow", textYellow);
+ footer->AddStringToken("blue", textBlue);
+
+ for (int button = 1; button < 5; button++) {
+ string red = *cString::sprintf("red%d", button);
+ string green = *cString::sprintf("green%d", button);
+ string yellow = *cString::sprintf("yellow%d", button);
+ string blue = *cString::sprintf("blue%d", button);
+ bool isRed = false;
+ bool isGreen = false;
+ bool isYellow = false;
+ bool isBlue = false;
+ switch (colorKeys[button-1]) {
+ case 0:
+ isRed = true;
+ break;
+ case 1:
+ isGreen = true;
+ break;
+ case 2:
+ isYellow = true;
+ break;
+ case 3:
+ isBlue = true;
+ break;
+ default:
+ break;
+ }
+ footer->AddIntToken(red, isRed);
+ footer->AddIntToken(green, isGreen);
+ footer->AddIntToken(yellow, isYellow);
+ footer->AddIntToken(blue, isBlue);
+ }
+
+ footer->Display();
+}
+
+bool cDetailView::DrawTime(void) {
+ time_t t = time(0); // get time now
+ struct tm * now = localtime(&t);
+ int sec = now->tm_sec;
+ if (sec == lastSecond)
+ return false;
+
+ int min = now->tm_min;
+ int hour = now->tm_hour;
+ int hourMinutes = hour%12 * 5 + min / 12;
+
+ watch->ClearTokens();
+ watch->AddIntToken("sec", sec);
+ watch->AddIntToken("min", min);
+ watch->AddIntToken("hour", hour);
+ watch->AddIntToken("hmins", hourMinutes);
+ watch->AddStringToken("time", *TimeString(t));
+ watch->Display();
+
+ lastSecond = sec;
+ return true;
+}
+
+void cDetailView::SetTabTokens(void) {
+ tabs->ClearTokens();
+
+ tabs->AddStringToken("title", event->Title() ? event->Title() : "");
+ tabs->AddStringToken("shorttext", event->ShortText() ? event->ShortText() : "");
+ tabs->AddStringToken("description", event->Description() ? event->Description() : "");
+ tabs->AddStringToken("start", *(event->GetTimeString()));
+ tabs->AddStringToken("stop", *(event->GetEndTimeString()));
+ time_t startTime = event->StartTime();
+ tabs->AddStringToken("day", *WeekDayName(startTime));
+ tabs->AddStringToken("date", *ShortDateString(startTime));
+ struct tm * sStartTime = localtime(&startTime);
+ tabs->AddIntToken("year", sStartTime->tm_year + 1900);
+ tabs->AddIntToken("daynumeric", sStartTime->tm_mday);
+ tabs->AddIntToken("month", sStartTime->tm_mon+1);
+
+ string channelID = *(event->ChannelID().ToString());
+ tabs->AddStringToken("channelid", channelID);
+ tabs->AddIntToken("channellogoexists", tabs->ChannelLogoExists(channelID));
+
+ bool isRunning = false;
+ time_t now = time(NULL);
+ if ((now >= event->StartTime()) && (now <= event->EndTime()))
+ isRunning = true;
+ tabs->AddIntToken("running", isRunning);
+ if (isRunning) {
+ tabs->AddIntToken("elapsed", (now - event->StartTime())/60);
+ } else {
+ tabs->AddIntToken("elapsed", 0);
+ }
+ tabs->AddIntToken("duration", event->Duration() / 60);
+ tabs->AddIntToken("durationhours", event->Duration() / 3600);
+ tabs->AddStringToken("durationminutes", *cString::sprintf("%.2d", (event->Duration() / 60)%60));
+ if (event->Vps())
+ tabs->AddStringToken("vps", *event->GetVpsString());
+ else
+ tabs->AddStringToken("vps", "");
+
+
+ bool hasReruns = LoadReruns();
+ tabs->AddIntToken("hasreruns", hasReruns);
+
+ SetScraperTokens();
+ SetEpgPictures(event->EventID());
+}
+
+bool cDetailView::LoadReruns(void) {
+ if (!event)
+ return false;
+
+ cPlugin *epgSearchPlugin = cPluginManager::GetPlugin("epgsearch");
+ if (!epgSearchPlugin)
+ return false;
+
+ if (isempty(event->Title()))
+ return false;
+
+ int maxNumReruns = config.rerunAmount;
+ int rerunDistance = config.rerunDistance * 3600;
+ int rerunNaxChannel = config.rerunMaxChannel;
+
+ Epgsearch_searchresults_v1_0 data;
+ string strQuery = (event->Title()) ? event->Title() : "";
+ data.query = (char *)strQuery.c_str();
+ data.mode = 0;
+ data.channelNr = 0;
+ data.useTitle = true;
+ data.useSubTitle = true;
+ data.useDescription = false;
+
+ bool foundRerun = false;
+ if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data)) {
+ cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>* list = data.pResultList;
+ if (list && (list->Count() > 1)) {
+ foundRerun = true;
+ int i = 0;
+ for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < maxNumReruns; r = list->Next(r)) {
+ time_t eventStart = event->StartTime();
+ time_t rerunStart = r->event->StartTime();
+ cChannel *channel = Channels.GetByChannelID(r->event->ChannelID(), true, true);
+ //check for identical event
+ if ((event->ChannelID() == r->event->ChannelID()) && (eventStart == rerunStart))
+ continue;
+ //check for timely distance
+ if (rerunDistance > 0) {
+ if (rerunStart - eventStart < rerunDistance) {
+ continue;
+ }
+ }
+ //check for maxchannel
+ if (rerunNaxChannel > 0) {
+ if (channel && channel->Number() > rerunNaxChannel) {
+ continue;
+ }
+ }
+ i++;
+ map< string, string > rerun;
+ rerun.insert(pair<string, string>("reruns[title]", r->event->Title() ? r->event->Title() : ""));
+ rerun.insert(pair<string, string>("reruns[shorttext]", r->event->ShortText() ? r->event->ShortText() : ""));
+ rerun.insert(pair<string, string>("reruns[start]", *(r->event->GetTimeString())));
+ rerun.insert(pair<string, string>("reruns[start]", *(r->event->GetTimeString())));
+ rerun.insert(pair<string, string>("reruns[stop]", *(r->event->GetEndTimeString())));
+ rerun.insert(pair<string, string>("reruns[date]", *ShortDateString(r->event->StartTime())));
+ rerun.insert(pair<string, string>("reruns[day]", *WeekDayName(r->event->StartTime())));
+ string channelID = *(r->event->ChannelID().ToString());
+ rerun.insert(pair<string, string>("reruns[channelid]", channelID));
+ bool logoExists = tabs->ChannelLogoExists(channelID);
+ rerun.insert(pair<string, string>("reruns[channellogoexists]", logoExists ? "1" : "0"));
+
+ if (channel) {
+ stringstream channelNumber;
+ channelNumber << channel->Number();
+ rerun.insert(pair<string, string>("reruns[channelname]", channel->ShortName(true)));
+ rerun.insert(pair<string, string>("reruns[channelnumber]", channelNumber.str()));
+ } else {
+ rerun.insert(pair<string, string>("reruns[channelname]", ""));
+ rerun.insert(pair<string, string>("reruns[channelnumber]", ""));
+ }
+ tabs->AddLoopToken("reruns", rerun);
+ }
+ delete list;
+ }
+ }
+ return foundRerun;
+}
+
+void cDetailView::SetScraperTokens(void) {
+ static cPlugin *pScraper = GetScraperPlugin();
+ if (!pScraper || !event) {
+ tabs->AddIntToken("ismovie", false);
+ tabs->AddIntToken("isseries", false);
+ return;
+ }
+
+ ScraperGetEventType getType;
+ getType.event = event;
+ getType.recording = NULL;
+ if (!pScraper->Service("GetEventType", &getType)) {
+ tabs->AddIntToken("ismovie", false);
+ tabs->AddIntToken("isseries", false);
+ return;
+ }
+
+ if (getType.type == tMovie) {
+ cMovie movie;
+ movie.movieId = getType.movieId;
+ pScraper->Service("GetMovie", &movie);
+ tabs->AddIntToken("ismovie", true);
+ tabs->AddIntToken("isseries", false);
+
+ tabs->AddStringToken("movietitle", movie.title);
+ tabs->AddStringToken("movieoriginalTitle", movie.originalTitle);
+ tabs->AddStringToken("movietagline", movie.tagline);
+ tabs->AddStringToken("movieoverview", movie.overview);
+ tabs->AddStringToken("moviegenres", movie.genres);
+ tabs->AddStringToken("moviehomepage", movie.homepage);
+ tabs->AddStringToken("moviereleasedate", movie.releaseDate);
+ stringstream pop;
+ pop << movie.popularity;
+ tabs->AddStringToken("moviepopularity", pop.str());
+ stringstream vote;
+ vote << movie.voteAverage;
+ tabs->AddStringToken("movievoteaverage", pop.str());
+ tabs->AddStringToken("posterpath", movie.poster.path);
+ tabs->AddStringToken("fanartpath", movie.fanart.path);
+ tabs->AddStringToken("collectionposterpath", movie.collectionPoster.path);
+ tabs->AddStringToken("collectionfanartpath", movie.collectionFanart.path);
+
+ tabs->AddIntToken("movieadult", movie.adult);
+ tabs->AddIntToken("moviebudget", movie.budget);
+ tabs->AddIntToken("movierevenue", movie.revenue);
+ tabs->AddIntToken("movieruntime", movie.runtime);
+ tabs->AddIntToken("posterwidth", movie.poster.width);
+ tabs->AddIntToken("posterheight", movie.poster.height);
+ tabs->AddIntToken("fanartwidth", movie.fanart.width);
+ tabs->AddIntToken("fanartheight", movie.fanart.height);
+ tabs->AddIntToken("collectionposterwidth", movie.collectionPoster.width);
+ tabs->AddIntToken("collectionposterheight", movie.collectionPoster.height);
+ tabs->AddIntToken("collectionfanartwidth", movie.collectionFanart.width);
+ tabs->AddIntToken("collectionfanartheight", movie.collectionFanart.height);
+
+ for (vector<cActor>::iterator act = movie.actors.begin(); act != movie.actors.end(); act++) {
+ map< string, string > actor;
+ actor.insert(pair<string, string>("actors[name]", (*act).name));
+ actor.insert(pair<string, string>("actors[role]", (*act).role));
+ actor.insert(pair<string, string>("actors[thumb]", (*act).actorThumb.path));
+ stringstream actWidth, actHeight;
+ actWidth << (*act).actorThumb.width;
+ actHeight << (*act).actorThumb.height;
+ actor.insert(pair<string, string>("actors[thumbwidth]", actWidth.str()));
+ actor.insert(pair<string, string>("actors[thumbheight]", actHeight.str()));
+ tabs->AddLoopToken("actors", actor);
+ }
+
+ } else if (getType.type == tSeries) {
+ cSeries series;
+ series.seriesId = getType.seriesId;
+ series.episodeId = getType.episodeId;
+ pScraper->Service("GetSeries", &series);
+ tabs->AddIntToken("ismovie", false);
+ tabs->AddIntToken("isseries", true);
+ //Series Basics
+ tabs->AddStringToken("seriesname", series.name);
+ tabs->AddStringToken("seriesoverview", series.overview);
+ tabs->AddStringToken("seriesfirstaired", series.firstAired);
+ tabs->AddStringToken("seriesnetwork", series.network);
+ tabs->AddStringToken("seriesgenre", series.genre);
+ stringstream rating;
+ rating << series.rating;
+ tabs->AddStringToken("seriesrating", rating.str());
+ tabs->AddStringToken("seriesstatus", series.status);
+ //Episode Information
+ tabs->AddIntToken("episodenumber", series.episode.number);
+ tabs->AddIntToken("episodeseason", series.episode.season);
+ tabs->AddStringToken("episodetitle", series.episode.name);
+ tabs->AddStringToken("episodefirstaired", series.episode.firstAired);
+ tabs->AddStringToken("episodegueststars", series.episode.guestStars);
+ tabs->AddStringToken("episodeoverview", series.episode.overview);
+ stringstream eprating;
+ eprating << series.episode.rating;
+ tabs->AddStringToken("episoderating", eprating.str());
+ tabs->AddIntToken("episodeimagewidth", series.episode.episodeImage.width);
+ tabs->AddIntToken("episodeimageheight", series.episode.episodeImage.height);
+ tabs->AddStringToken("episodeimagepath", series.episode.episodeImage.path);
+ //Seasonposter
+ tabs->AddIntToken("seasonposterwidth", series.seasonPoster.width);
+ tabs->AddIntToken("seasonposterheight", series.seasonPoster.height);
+ tabs->AddStringToken("seasonposterpath", series.seasonPoster.path);
+
+ //Posters
+ int current = 1;
+ for(vector<cTvMedia>::iterator poster = series.posters.begin(); poster != series.posters.end(); poster++) {
+ stringstream labelWidth, labelHeight, labelPath;
+ labelWidth << "seriesposter" << current << "width";
+ labelHeight << "seriesposter" << current << "height";
+ labelPath << "seriesposter" << current << "path";
+
+ tabs->AddIntToken(labelWidth.str(), (*poster).width);
+ tabs->AddIntToken(labelHeight.str(), (*poster).height);
+ tabs->AddStringToken(labelPath.str(), (*poster).path);
+ current++;
+ }
+ if (current < 3) {
+ for (; current < 4; current++) {
+ stringstream labelWidth, labelHeight, labelPath;
+ labelWidth << "seriesposter" << current << "width";
+ labelHeight << "seriesposter" << current << "height";
+ labelPath << "seriesposter" << current << "path";
+
+ tabs->AddIntToken(labelWidth.str(), 0);
+ tabs->AddIntToken(labelHeight.str(), 0);
+ tabs->AddStringToken(labelPath.str(), "");
+ }
+ }
+
+ //Banners
+ current = 1;
+ for(vector<cTvMedia>::iterator banner = series.banners.begin(); banner != series.banners.end(); banner++) {
+ stringstream labelWidth, labelHeight, labelPath;
+ labelWidth << "seriesbanner" << current << "width";
+ labelHeight << "seriesbanner" << current << "height";
+ labelPath << "seriesbanner" << current << "path";
+
+ tabs->AddIntToken(labelWidth.str(), (*banner).width);
+ tabs->AddIntToken(labelHeight.str(), (*banner).height);
+ tabs->AddStringToken(labelPath.str(), (*banner).path);
+ current++;
+ }
+ if (current < 3) {
+ for (; current < 4; current++) {
+ stringstream labelWidth, labelHeight, labelPath;
+ labelWidth << "seriesbanner" << current << "width";
+ labelHeight << "seriesbanner" << current << "height";
+ labelPath << "seriesbanner" << current << "path";
+
+ tabs->AddIntToken(labelWidth.str(), 0);
+ tabs->AddIntToken(labelHeight.str(), 0);
+ tabs->AddStringToken(labelPath.str(), "");
+ }
+ }
+
+ //Fanarts
+ current = 1;
+ for(vector<cTvMedia>::iterator fanart = series.fanarts.begin(); fanart != series.fanarts.end(); fanart++) {
+ stringstream labelWidth, labelHeight, labelPath;
+ labelWidth << "seriesfanart" << current << "width";
+ labelHeight << "seriesfanart" << current << "height";
+ labelPath << "seriesfanart" << current << "path";
+
+ tabs->AddIntToken(labelWidth.str(), (*fanart).width);
+ tabs->AddIntToken(labelHeight.str(), (*fanart).height);
+ tabs->AddStringToken(labelPath.str(), (*fanart).path);
+ current++;
+ }
+ if (current < 3) {
+ for (; current < 4; current++) {
+ stringstream labelWidth, labelHeight, labelPath;
+ labelWidth << "seriesfanart" << current << "width";
+ labelHeight << "seriesfanart" << current << "height";
+ labelPath << "seriesfanart" << current << "path";
+
+ tabs->AddIntToken(labelWidth.str(), 0);
+ tabs->AddIntToken(labelHeight.str(), 0);
+ tabs->AddStringToken(labelPath.str(), "");
+ }
+ }
+
+ //Actors
+ for (vector<cActor>::iterator act = series.actors.begin(); act != series.actors.end(); act++) {
+ map< string, string > actor;
+ actor.insert(pair<string, string>("actors[name]", (*act).name));
+ actor.insert(pair<string, string>("actors[role]", (*act).role));
+ actor.insert(pair<string, string>("actors[thumb]", (*act).actorThumb.path));
+ stringstream actWidth, actHeight;
+ actWidth << (*act).actorThumb.width;
+ actHeight << (*act).actorThumb.height;
+ actor.insert(pair<string, string>("actors[thumbwidth]", actWidth.str()));
+ actor.insert(pair<string, string>("actors[thumbheight]", actHeight.str()));
+ tabs->AddLoopToken("actors", actor);
+ }
+
+ } else {
+ tabs->AddIntToken("ismovie", false);
+ tabs->AddIntToken("isseries", false);
+ }
+}
+
+void cDetailView::SetEpgPictures(int eventId) {
+ string epgImagePath = tabs->GetEpgImagePath();
+ for (int i=0; i<3; i++) {
+ stringstream picName;
+ picName << eventId << "_" << i;
+ bool epgPicAvailable = FileExists(epgImagePath, picName.str(), "jpg");
+ stringstream available;
+ stringstream path;
+ available << "epgpic" << i+1 << "avaialble";
+ path << "epgpic" << i+1 << "path";
+ if (epgPicAvailable) {
+ tabs->AddIntToken(available.str(), true);
+ tabs->AddStringToken(path.str(), *cString::sprintf("%s%s.jpg", epgImagePath.c_str(), picName.str().c_str()));
+ } else {
+ tabs->AddIntToken(available.str(), false);
+ tabs->AddStringToken(path.str(), "");
+ }
+ }
+}
\ No newline at end of file |