# Author: Dieter Blomme # URL: http://code.google.com/p/sickbeard/ # # This file is part of SickGear. # # SickGear is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # SickGear is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with SickGear. If not, see . import sickbeard from sickbeard import logger from lib.libtrakt import TraktAPI, exceptions class TraktNotifier: def __init__(self): pass """ A "notifier" for trakt.tv which keeps track of what has and hasn't been added to your library. """ def notify_snatch(self, ep_name): pass def notify_download(self, ep_name): pass def notify_subtitle_download(self, ep_name, lang): pass def notify_git_update(self, new_version): pass @staticmethod def update_collection(ep_obj): """ Sends a request to trakt indicating that the given episode is part of our collection. :param ep_obj: The TVEpisode object to add to trakt """ if sickbeard.USE_TRAKT and sickbeard.TRAKT_ACCOUNTS: # URL parameters data = { 'shows': [ { 'title': ep_obj.show.name, 'year': ep_obj.show.startyear, 'ids': {}, } ] } indexer = ('tvrage', 'tvdb')[1 == ep_obj.show.indexer] data['shows'][0]['ids'][indexer] = ep_obj.show.indexerid # Add Season and Episode + Related Episodes data['shows'][0]['seasons'] = [{'number': ep_obj.season, 'episodes': []}] for relEp_Obj in [ep_obj] + ep_obj.relatedEps: data['shows'][0]['seasons'][0]['episodes'].append({'number': relEp_Obj.episode}) for tid, locations in sickbeard.TRAKT_UPDATE_COLLECTION.items(): if tid not in sickbeard.TRAKT_ACCOUNTS.keys(): continue for loc in locations: if not ep_obj.location.startswith('%s\\' % loc.rstrip('\\')): continue warn, msg = False, '' try: resp = TraktAPI().trakt_request('sync/collection', data, send_oauth=tid) if 'added' in resp and 'episodes' in resp['added'] and 0 < sickbeard.helpers.tryInt(resp['added']['episodes']): msg = 'Added episode to' elif 'updated' in resp and 'episodes' in resp['updated'] and 0 < sickbeard.helpers.tryInt(resp['updated']['episodes']): msg = 'Updated episode in' elif 'existing' in resp and 'episodes' in resp['existing'] and 0 < sickbeard.helpers.tryInt(resp['existing']['episodes']): msg = 'Episode is already in' elif 'not_found' in resp and 'episodes' in resp['not_found'] and 0 < sickbeard.helpers.tryInt(resp['not_found']['episodes']): msg = 'Episode not found on Trakt, not adding to' else: warn, msg = True, 'Could not add episode to' except (exceptions.TraktAuthException, exceptions.TraktException): warn, msg = True, 'Error adding episode to' msg = 'Trakt: %s your %s collection' % (msg, sickbeard.TRAKT_ACCOUNTS[tid].name) if not warn: logger.log(msg) else: logger.log(msg, logger.WARNING) @staticmethod def _use_me(): return sickbeard.USE_TRAKT notifier = TraktNotifier