function searchTVdbAllById(id, cb, query,fromSearch,engine,eztvId) { var serie = {}; serie.eztvId= null; serie.engine = engine; tvdb.getSeriesAllById(id) .then(function(res) { serie.infos = res; serie.name = res.SeriesName.replace(/\(.*\)/, '').trim(); serie.id = res.id; serie.page = 0; serie.list = []; serie.query = query; serie.fromSearch = fromSearch; if(engine == 'tvdb') { return initCpbSearch(serie, cb); } else { serie.eztvId = eztvId; return getEztvShow(serie, cb); } }) .catch(function(error) { serie.success = false; serie.error = error; cb(serie); }); }
.post(function (req, res) { var id = req.body.id; var tvdbShow; tvdb.getSeriesAllById(id) .then(function (results) { tvdbShow = results; s = new Show({ _id: results.id, name: results.SeriesName, airsDayOfWeek: results.Airs_DayOfWeek, airsTime: results.Airs_Time, firstAired: new Date(results.FirstAired), genre: results.Genre.split('|').filter(function (r) { return r.length != 0}), network: results.Network, overview: results.Overview, rating: results.Rating, ratingCount: results.RatingCount, status: results.Status, poster: results.poster, banner: results.banner, fanart: results.fanart }); _.each(results.Episodes, function (episode) { var firstAirDate = new Date(episode.FirstAired); var currentDate = new Date(); s.episodes.push({ _id: episode.id, season: episode.SeasonNumber, episodeNumber: episode.EpisodeNumber, episodeNode: episode.EpisodeName, firstAired: new Date(episode.FirstAired), overview: episode.Overview, image: episode.filename, status: currentDate > firstAirDate ? 'Downloaded' : 'Pending', lastUpdated: new Date(episode.lastupdated * 1000) }) }) var savePromise = s.save() .then(function (savedShow) { res.json(savedShow); }) .catch(function (err) { if (err.code == 11000) { //redirect to existing show page res.json(tvdbShow) // res.redirect('/show/' + s.id); } else { res.json({ status: false, message: err }) } }); }) .catch(function (err) { res.json({ status: false, message: err.message }); }); });
.then(function (show) { if (show === null) { reject('The show ' + show.name + ' is not registred.'); } else { var tvdb = new TVDBClient(config.tvdbkey); tvdb .getSeriesAllById(show.id) .then(function (episodes) { show.image = episodes.poster; if (episodes.Status === 'Ended') { show.ended = true; } show.save() .then(function () { self.downloadBanner(show.image) .then(function () { self.update(show, episodes.Episodes) .then(function () { resolve(); }) .catch(function (err) { reject(err); }); }) .catch(function (err) { reject(err); }); }) .catch(function (err) { reject(err); }); }) .catch(function (err) { reject(err); }); } })
request(req, function (error, response, data) { if (error || response.statusCode >= 400) { win.warn('TVAPI endpoint \'%s\' failed.', Settings.tvAPI[index].url); if (index + 1 >= Settings.tvAPI.length) { return reject(error || 'Status Code is above 400'); } else { get(index + 1); } return; } else if (!data || (data.error && data.error !== 'No data returned') || data.episodes.length === 0) { var err = (data && data.episodes.length !== 0) ? data.error : 'No data returned'; debug ? win.error('API error:', err) : ''; reject(err); } else { data = Common.sanitize(data); // we cache our new element or translate synopsis if (Settings.translateSynopsis && Settings.language !== 'en') { var langAvailable; for (var x = 0; x < Settings.tvdbLangs.length; x++) { if (Settings.tvdbLangs[x].abbreviation.indexOf(Settings.language) > -1) { langAvailable = true; break; } } if (!langAvailable) { resolve(data); } else { var reqTimeout = setTimeout(function () { resolve(data); }, 2000); var Client = require('node-tvdb'); var tvdb = new Client('7B95D15E1BE1D75A', Settings.language); win.info('Request to TVDB API: \'%s\' - %s', old_data.title, App.Localization.langcodes[Settings.language].name); tvdb.getSeriesAllById(old_data.tvdb_id) .then(function (localization) { clearTimeout(reqTimeout); _.extend(data, { synopsis: localization.Overview }); for (var i = 0; i < localization.Episodes.length; i++) { for (var j = 0; j < data.episodes.length; j++) { if (localization.Episodes[i].id.toString() === data.episodes[j].tvdb_id.toString()) { data.episodes[j].overview = localization.Episodes[i].Overview; break; } } } resolve(Common.sanitize(data)); }) .catch(function (error) { resolve(data); }); } } else { resolve(data); } } });
.put(function (req, res) { //the only update will be for resfreshing episodes. var showToUpdate, tvdbShow; var id = req.body.id; // get show record from db tvdb.getSeriesAllById(id).then(function (responseShows) { tvdbShow = responseShows; return Show.findById(id).exec(); }).then(function (dbShow) { // updated episodes var checkDate = new Date(); //get date to compare checkDate.setDate(checkDate.getDate() - 8); var updatedEpisodes = tvdbShow.Episodes.filter(function (e) { //get our epsidoes with newer updated dates lastUpdatedDate = new Date(e.lastupdated * 1000); return (lastUpdatedDate > checkDate) }) var currentDate = new Date(); _.each(updatedEpisodes, (function (webEpisode) { var isFound = false; var firstAirDate = new Date(webEpisode.FirstAired); _.each(dbShow.episodes, (function (dbEpisode) { if (webEpisode.id == dbEpisode.id) { isFound = true; //update the db record since we found the episode id dbEpisode.season = webEpisode.SeasonNumber; dbEpisode.episodeNumber = webEpisode.EpisodeNumber; dbEpisode.episodeName = webEpisode.EpisodeName; dbEpisode.firstAired = new Date(webEpisode.FirstAired); dbEpisode.overview = webEpisode.Overview; dbEpisode.image = webEpisode.filename; dbEpisode.status = currentDate > firstAirDate ? 'Downloaded' : 'Pending'; dbEpisode.lastUpdated = new Date(webEpisode.lastupdated * 1000); return false; // found match, so let'e move to the next one } else { // no match so we can add this one isFound = false; } })); if (!isFound) { //add new episode dbShow.episodes.push({ _id: webEpisode.id, season: webEpisode.SeasonNumber, episodeNumber: webEpisode.EpisodeNumber, episodeNode: webEpisode.EpisodeName, firstAired: new Date(webEpisode.FirstAired), overview: webEpisode.Overview, image: webEpisode.filename, status: currentDate > firstAirDate ? 'Downloaded' : 'Pending', lastUpdated: new Date(webEpisode.lastupdated * 1000) }) } })) showToUpdate = dbShow; return showToUpdate.save(); }).then(function (savedShow) { res.json({ savedShow }) }).catch(function (err) { res.json({ status: false, message: err.message }); }) })