#define __STL_CONFIG_H #include "lib/common.h" #include "tvdbseries.h" using namespace std; cTVDBSeries::cTVDBSeries(void) { id = 0; name = ""; overview = ""; firstAired = ""; network = ""; genre = ""; rating = 0.0; status = ""; posterThumb = NULL; } cTVDBSeries::~cTVDBSeries() { for (map::iterator it = actors.begin(); it != actors.end(); it++) { cTVDBActor *a = (cTVDBActor*)it->second; delete a; } for (map::iterator it = episodes.begin(); it != episodes.end(); it++) { cTVDBEpisode *e = (cTVDBEpisode*)it->second; delete e; } for (vector::iterator it = posters.begin(); it != posters.end(); it++) { cTVDBMedia *p = *it; delete p; } for (vector::iterator it = banners.begin(); it != banners.end(); it++) { cTVDBMedia *b = *it; delete b; } for (vector::iterator it = fanart.begin(); it != fanart.end(); it++) { cTVDBMedia *f = *it; delete f; } for (map::iterator it = seasonPosters.begin(); it != seasonPosters.end(); it++) { cTVDBMedia *s = (cTVDBMedia*)it->second; delete s; } for (map::iterator it = seasonPosterThumbs.begin(); it != seasonPosterThumbs.end(); it++) { cTVDBMedia *s = (cTVDBMedia*)it->second; delete s; } if (posterThumb) delete posterThumb; } void cTVDBSeries::InsertEpisode(cTVDBEpisode *episode) { map::iterator hit = episodes.find(episode->id); if (hit != episodes.end()) delete episode; else episodes.insert(pair(episode->id, episode)); } void cTVDBSeries::InsertEpisodeImage(int episodeId, int width, int height, string path) { map::iterator hit = episodes.find(episodeId); if (hit != episodes.end()) { cTVDBEpisode *e = hit->second; cTVDBMedia *m = new cTVDBMedia(); m->width = width; m->height = height; m->path = path; m->mediaType = msEpisodePic; e->episodeImage = m; } } void cTVDBSeries::InsertActor(cTVDBActor *actor) { actors.insert(pair(actor->id, actor)); } void cTVDBSeries::InsertActorThumb(int actorId, int imgWidth, int imgHeight, string path) { map::iterator hit = actors.find(actorId); if (hit != actors.end()) { cTVDBActor *a = hit->second; cTVDBMedia *m = new cTVDBMedia(); m->width = imgWidth; m->height = imgHeight; m->path = path; m->mediaType = msActorThumb; a->actorThumb = m; } } void cTVDBSeries::InsertMedia(int mediaType, int imgWidth, int imgHeight, string path, int season) { cTVDBMedia *media = new cTVDBMedia(); media->width = imgWidth; media->height = imgHeight; media->path = path; media->mediaType = mediaType; switch (mediaType) { case msPoster1: case msPoster2: case msPoster3: posters.push_back(media); break; case msFanart1: case msFanart2: case msFanart3: fanart.push_back(media); break; case msBanner1: case msBanner2: case msBanner3: banners.push_back(media); break; case msSeasonPoster: seasonPosters.insert(pair(season, media)); break; case msPosterThumb: posterThumb = media; break; case msSeasonPosterThumb: seasonPosterThumbs.insert(pair(season, media)); break; default: break; } } void cTVDBSeries::GetEpisode(int episodeId, cEpisode *e) { map::iterator hit = episodes.find(episodeId); if (hit == episodes.end()) return; cTVDBEpisode *eStored = hit->second; e->number = eStored->number; e->season = eStored->season; e->name = eStored->name; e->firstAired = eStored->firstAired; e->guestStars = eStored->guestStars; e->overview = eStored->overview; e->rating = eStored->rating; if (eStored->episodeImage) { e->episodeImage.path = eStored->episodeImage->path; e->episodeImage.width = eStored->episodeImage->width; e->episodeImage.height = eStored->episodeImage->height; } } void cTVDBSeries::GetPosters(vector *p) { for (vector::iterator it = posters.begin(); it != posters.end(); it++) { cTVDBMedia *mStored = *it; cTvMedia m; m.path = mStored->path; m.width = mStored->width; m.height = mStored->height; p->push_back(m); } } bool cTVDBSeries::GetPoster(cTvMedia *p) { if (posters.size() > 0) { p->path = posters[0]->path; p->width = posters[0]->width; p->height = posters[0]->height; return true; } return false; } bool cTVDBSeries::GetPosterThumb(cTvMedia *p) { if (posterThumb) { p->path = posterThumb->path; p->width = posterThumb->width; p->height = posterThumb->height; return true; } return false; } void cTVDBSeries::GetBanners(vector *b) { for (vector::iterator it = banners.begin(); it != banners.end(); it++) { cTVDBMedia *bStored = *it; cTvMedia m; m.path = bStored->path; m.width = bStored->width; m.height = bStored->height; b->push_back(m); } } bool cTVDBSeries::GetRandomBanner(cTvMedia *b) { int numBanners = banners.size(); if (numBanners == 0) return false; srand((unsigned)time(NULL)); int banner = rand()%numBanners; cTVDBMedia *bStored = banners[banner]; b->path = bStored->path; b->width = bStored->width; b->height = bStored->height; return true; } void cTVDBSeries::GetFanart(vector *f) { for (vector::iterator it = fanart.begin(); it != fanart.end(); it++) { cTVDBMedia *fStored = *it; cTvMedia m; m.path = fStored->path; m.width = fStored->width; m.height = fStored->height; f->push_back(m); } } void cTVDBSeries::GetSeasonPoster(int episodeId, cTvMedia *sp) { map::iterator hit = episodes.find(episodeId); if (hit == episodes.end()) return; cTVDBEpisode *e = hit->second; map::iterator hit2 = seasonPosters.find(e->season); if (hit2 == seasonPosters.end()) return; cTVDBMedia *spStored = hit2->second; sp->width = spStored->width; sp->height = spStored->height; sp->path = spStored->path; } void cTVDBSeries::GetActors(vector *a) { for (map::iterator it = actors.begin(); it != actors.end(); it++) { cTVDBActor *aStored = it->second; cActor act; act.name = aStored->name; act.role = aStored->role; if (aStored->actorThumb) { act.actorThumb.width = aStored->actorThumb->width; act.actorThumb.height = aStored->actorThumb->height; act.actorThumb.path = aStored->actorThumb->path; } a->push_back(act); } } void cTVDBSeries::Dump(void) { tell(0, "--------------------------- Series Info ----------------------------------"); tell(0, "series %s, ID: %d", name.c_str(), id); tell(0, "Overview: %s", overview.c_str()); tell(0, "FirstAired: %s", firstAired.c_str()); tell(0, "Network: %s", network.c_str()); tell(0, "Status: %s", status.c_str()); tell(0, "Genre: %s", genre.c_str()); tell(0, "Rating: %f", rating); tell(0, "--------------------------- Media ----------------------------------"); for (vector::iterator it = posters.begin(); it != posters.end(); it++) { cTVDBMedia *m = *it; tell(0, "Poster %d, Path: %s", m->mediaType, m->path.c_str()); tell(0, "width %d, height %d", m->width, m->height); } for (vector::iterator it = banners.begin(); it != banners.end(); it++) { cTVDBMedia *m = *it; tell(0, "Banner %d, Path: %s", m->mediaType, m->path.c_str()); tell(0, "width %d, height %d", m->width, m->height); } for (vector::iterator it = fanart.begin(); it != fanart.end(); it++) { cTVDBMedia *m = *it; tell(0, "Fanart %d, Path: %s", m->mediaType, m->path.c_str()); tell(0, "width %d, height %d", m->width, m->height); } tell(0, "--------------------------- Episodes ----------------------------------"); for (map::iterator it = episodes.begin(); it != episodes.end(); it++) { cTVDBEpisode *e = it->second; tell(0, "Episode %d, Name: %s", e->id, e->name.c_str()); if (e->episodeImage) { tell(0, "Episode Image: %d x %d, Path: %s", e->episodeImage->width, e->episodeImage->height, e->episodeImage->path.c_str()); } } tell(0, "--------------------------- Season Posters ----------------------------------"); for (map::iterator it = seasonPosters.begin(); it != seasonPosters.end(); it++) { int season = it->first; cTVDBMedia *m = it->second; tell(0, "Season %d, %d x %d, Path: %s", season, m->width, m->height, m->path.c_str()); } tell(0, "--------------------------- Actors ----------------------------------"); for (map::iterator it = actors.begin(); it != actors.end(); it++) { cTVDBActor *a = it->second; tell(0, "Actor %d, Name: %s, Role %s", a->id, a->name.c_str(), a->role.c_str()); if (a->actorThumb) { tell(0, "Thumb: %d x %d, Path: %s", a->actorThumb->width, a->actorThumb->height, a->actorThumb->path.c_str()); } } if (posterThumb) { tell(0, "posterThumb path %s, width %d, height %d", posterThumb->path.c_str(), posterThumb->width, posterThumb->height); } }