Browse Source

Fanart PR cleanup

pull/3289/head
Ruud 11 years ago
parent
commit
0097167dec
  1. 8
      couchpotato/core/media/movie/providers/info/_modifier.py
  2. 58
      couchpotato/core/media/movie/providers/info/fanarttv.py
  3. 24
      couchpotato/core/media/movie/providers/info/themoviedb.py
  4. 46
      couchpotato/core/media/movie/providers/metadata/base.py
  5. 100
      couchpotato/core/media/movie/providers/metadata/xbmc.py
  6. 77
      couchpotato/core/notifications/xbmc.py

8
couchpotato/core/media/movie/providers/info/_modifier.py

@ -29,11 +29,11 @@ class MovieResultModifier(Plugin):
'actors': {}, 'actors': {},
'landscape': [], 'landscape': [],
'logo': [], 'logo': [],
'clearart': [], 'clear_art': [],
'discart': [], 'disc_art': [],
'banner': [], 'banner': [],
'extrathumbs': [], 'extra_thumbs': [],
'extrafanart': [] 'extra_fanart': []
}, },
'runtime': 0, 'runtime': 0,
'plot': '', 'plot': '',

58
couchpotato/core/media/movie/providers/info/fanarttv.py

@ -5,9 +5,8 @@ from couchpotato.core.event import addEvent
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.media.movie.providers.base import MovieProvider from couchpotato.core.media.movie.providers.base import MovieProvider
from couchpotato.core.plugins.quality import QualityPlugin from couchpotato.core.plugins.quality import QualityPlugin
from fanarttv.movie import Movie
from libs.fanarttv.movie import Movie import fanarttv.errors as fanarttv_errors
import libs.fanarttv.errors as fanarttv_errors
log = CPLog(__name__) log = CPLog(__name__)
@ -16,10 +15,11 @@ autoload = 'FanartTV'
class FanartTV(MovieProvider): class FanartTV(MovieProvider):
MAX_EXTRAFANART = 20 MAX_EXTRAFANART = 20
def __init__(self): def __init__(self):
addEvent('movie.extraart', self.getArt, priority=2) addEvent('movie.extra_art', self.getArt, priority=2)
# Configure fanarttv API settings # Configure fanarttv API settings
os.environ.setdefault('FANART_APIKEY', self.conf('api_key')) os.environ.setdefault('FANART_APIKEY', self.conf('api_key'))
@ -35,7 +35,7 @@ class FanartTV(MovieProvider):
try: try:
try: try:
exists = True exists = True
movie = Movie.get(id=identifier) movie = Movie.get(id = identifier)
except (fanarttv_errors.FanartError, IOError): except (fanarttv_errors.FanartError, IOError):
exists = False exists = False
@ -49,23 +49,23 @@ class FanartTV(MovieProvider):
return images return images
def _parseMovie(self, movie, isHD): def _parseMovie(self, movie, is_hd):
images = { images = {
'landscape': [], 'landscape': [],
'logo': [], 'logo': [],
'discart': [], 'disc_art': [],
'clearart': [], 'clear_art': [],
'banner': [], 'banner': [],
'extrafanart': [] 'extra_fanart': [],
} }
images['landscape'] = self._getMultImages(movie.thumbs, 1) images['landscape'] = self._getMultImages(movie.thumbs, 1)
images['banner'] = self._getMultImages(movie.banners, 1) images['banner'] = self._getMultImages(movie.banners, 1)
images['discart'] = self._getMultImages(self._trimDiscs(movie.discs, isHD), 1) images['disc_art'] = self._getMultImages(self._trimDiscs(movie.discs, is_hd), 1)
images['clearart'] = self._getMultImages(movie.hdarts, 1) images['clear_art'] = self._getMultImages(movie.hdarts, 1)
if len(images['clearart']) is 0: if len(images['clear_art']) is 0:
images['clearart'] = self._getMultImages(movie.arts, 1) images['clear_art'] = self._getMultImages(movie.arts, 1)
images['logo'] = self._getMultImages(movie.hdlogos, 1) images['logo'] = self._getMultImages(movie.hdlogos, 1)
if len(images['logo']) is 0: if len(images['logo']) is 0:
@ -75,29 +75,30 @@ class FanartTV(MovieProvider):
if fanarts: if fanarts:
images['backdrop_original'] = fanarts[0] images['backdrop_original'] = fanarts[0]
images['extrafanart'] = fanarts[1:] images['extra_fanart'] = fanarts[1:]
# TODO: Add support for extra backgrounds # TODO: Add support for extra backgrounds
#extraFanart = self._getMultImages(movie.backgrounds, -1) #extra_fanart = self._getMultImages(movie.backgrounds, -1)
return images return images
def _trimDiscs(self, discImages, isHD): def _trimDiscs(self, disc_images, is_hd):
''' """
Return a subset of discImages based on isHD. If isHD is true, only Return a subset of discImages based on isHD. If isHD is true, only
bluray disc images will be returned. If isHD is false, only dvd disc bluray disc images will be returned. If isHD is false, only dvd disc
images will be returned. If the resulting list would be an empty list, images will be returned. If the resulting list would be an empty list,
then the original list is returned instead. then the original list is returned instead.
''' """
trimmed = [] trimmed = []
for disc in discImages: for disc in disc_images:
if isHD and disc.disc_type == u'bluray': if is_hd and disc.disc_type == u'bluray':
trimmed.append(disc) trimmed.append(disc)
elif not isHD and disc.disc_type == u'dvd': elif not is_hd and disc.disc_type == u'dvd':
trimmed.append(disc) trimmed.append(disc)
if len(trimmed) is 0: if len(trimmed) is 0:
return discImages return disc_images
else: else:
return trimmed return trimmed
@ -121,9 +122,9 @@ class FanartTV(MovieProvider):
for image in images: for image in images:
if image.lang == u'en': if image.lang == u'en':
pool.append(image) pool.append(image)
origPoolSize = len(pool) orig_pool_size = len(pool)
while len(pool) > 0 and (n < 0 or origPoolSize - len(pool) < n): while len(pool) > 0 and (n < 0 or orig_pool_size - len(pool) < n):
best = None best = None
highscore = -1 highscore = -1
for image in pool: for image in pool:
@ -147,6 +148,7 @@ class FanartTV(MovieProvider):
return bool(qualityDef.get('hd')) return bool(qualityDef.get('hd'))
return False return False
config = [{ config = [{
'name': 'fanarttv', 'name': 'fanarttv',
'groups': [ 'groups': [

24
couchpotato/core/media/movie/providers/info/themoviedb.py

@ -90,8 +90,8 @@ class TheMovieDb(MovieProvider):
# Get extra artwork via Fanart.TV and merge into images dict # Get extra artwork via Fanart.TV and merge into images dict
try: try:
extraArt = fireEvent('movie.extraart', identifier)[0] extra_art = fireEvent('movie.extra_art', identifier)[0]
result['images'] = dict(result['images'].items() + extraArt.items()) result['images'] = dict(result['images'].items() + extra_art.items())
except IndexError: except IndexError:
pass pass
@ -108,7 +108,7 @@ class TheMovieDb(MovieProvider):
poster = self.getImage(movie, type = 'poster', size = 'poster') poster = self.getImage(movie, type = 'poster', size = 'poster')
poster_original = self.getImage(movie, type = 'poster', size = 'original') poster_original = self.getImage(movie, type = 'poster', size = 'original')
backdrop_original = self.getImage(movie, type = 'backdrop', size = 'original') backdrop_original = self.getImage(movie, type = 'backdrop', size = 'original')
extrathumbs = self.getMultImages(movie, type='backdrops', size='original', n=self.MAX_EXTRATHUMBS, skipfirst=True) extra_thumbs = self.getMultImages(movie, type = 'backdrops', size = 'original', n = self.MAX_EXTRATHUMBS, skipfirst = True)
images = { images = {
'poster': [poster] if poster else [], 'poster': [poster] if poster else [],
@ -116,7 +116,7 @@ class TheMovieDb(MovieProvider):
'poster_original': [poster_original] if poster_original else [], 'poster_original': [poster_original] if poster_original else [],
'backdrop_original': [backdrop_original] if backdrop_original else [], 'backdrop_original': [backdrop_original] if backdrop_original else [],
'actors': {}, 'actors': {},
'extrathumbs': extrathumbs 'extra_thumbs': extra_thumbs
} }
# Genres # Genres
@ -182,22 +182,24 @@ class TheMovieDb(MovieProvider):
return image_url return image_url
def getMultImages(self, movie, type='backdrops', size='original', n=-1, skipfirst=False): def getMultImages(self, movie, type = 'backdrops', size = 'original', n = -1, skipfirst = False):
''' """
If n < 0, return all images. Otherwise return n images. If n < 0, return all images. Otherwise return n images.
If n > len(getattr(movie, type)), then return all images. If n > len(getattr(movie, type)), then return all images.
If skipfirst is True, then it will skip getattr(movie, type)[0]. This If skipfirst is True, then it will skip getattr(movie, type)[0]. This
is because backdrops[0] is typically backdrop. is because backdrops[0] is typically backdrop.
''' """
image_urls = [] image_urls = []
try: try:
images = getattr(movie, type) images = getattr(movie, type)
if n < 0 or n > len(images): if n < 0 or n > len(images):
numImages = len(images) num_images = len(images)
else: else:
numImages = n num_images = n
for i in range(int(skipfirst), numImages + int(skipfirst)):
image_urls.append(images[i].geturl(size=size)) for i in range(int(skipfirst), num_images + int(skipfirst)):
image_urls.append(images[i].geturl(size = size))
except: except:
log.debug('Failed getting %i %s.%s for "%s"', (n, type, size, ss(str(movie)))) log.debug('Failed getting %i %s.%s for "%s"', (n, type, size, ss(str(movie))))

46
couchpotato/core/media/movie/providers/metadata/base.py

@ -44,27 +44,27 @@ class MovieMetaData(MetaDataBase):
except: except:
log.error('Unable to create %s file: %s', ('nfo', traceback.format_exc())) log.error('Unable to create %s file: %s', ('nfo', traceback.format_exc()))
for file_type in ['thumbnail', 'fanart', 'banner', 'discart', 'logo', 'clearart', 'landscape', 'extrathumbs', 'extrafanart']: for file_type in ['thumbnail', 'fanart', 'banner', 'disc_art', 'logo', 'clear_art', 'landscape', 'extra_thumbs', 'extra_fanart']:
try: try:
if file_type == 'thumbnail': if file_type == 'thumbnail':
numImages = len(movie_info['images']['poster_original']) num_images = len(movie_info['images']['poster_original'])
elif file_type == 'fanart': elif file_type == 'fanart':
numImages = len(movie_info['images']['backdrop_original']) num_images = len(movie_info['images']['backdrop_original'])
else: else:
numImages = len(movie_info['images'][file_type]) num_images = len(movie_info['images'][file_type])
for i in range(numImages): for i in range(num_images):
self._createType(meta_name, root, movie_info, group, file_type, i) self._createType(meta_name, root, movie_info, group, file_type, i)
except: except:
log.error('Unable to create %s file: %s', (file_type, traceback.format_exc())) log.error('Unable to create %s file: %s', (file_type, traceback.format_exc()))
def _createType(self, meta_name, root, movie_info, group, file_type, i):# Get file path def _createType(self, meta_name, root, movie_info, group, file_type, i): # Get file path
name = getattr(self, 'get' + file_type.capitalize() + 'Name')(meta_name, root, i) name = getattr(self, 'get' + file_type.capitalize() + 'Name')(meta_name, root, i)
if name and (self.conf('meta_' + file_type) or self.conf('meta_' + file_type) is None): if name and (self.conf('meta_' + file_type) or self.conf('meta_' + file_type) is None):
# Get file content # Get file content
content = getattr(self, 'get' + file_type.capitalize())(movie_info=movie_info, data=group, i=i) content = getattr(self, 'get' + file_type.capitalize())(movie_info = movie_info, data = group, i = i)
if content: if content:
log.debug('Creating %s file: %s', (file_type, name)) log.debug('Creating %s file: %s', (file_type, name))
if os.path.isfile(content): if os.path.isfile(content):
@ -123,7 +123,7 @@ class MovieMetaData(MetaDataBase):
def getNfoName(self, name, root, i): def getNfoName(self, name, root, i):
return return
def getNfo(self, movie_info=None, data=None, i=0): def getNfo(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
@ -148,39 +148,39 @@ class MovieMetaData(MetaDataBase):
def getFanart(self, movie_info = None, data = None, i = 0): def getFanart(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='backdrop_original', i=i) return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'backdrop_original', i = i)
def getBanner(self, movie_info=None, data=None, i=0): def getBanner(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='banner', i=i) return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'banner', i = i)
def getClearart(self, movie_info=None, data=None, i=0): def getClearart(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='clearart', i=i) return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'clear_art', i = i)
def getLogo(self, movie_info=None, data=None, i=0): def getLogo(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='logo', i=i) return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'logo', i = i)
def getDiscart(self, movie_info=None, data=None, i=0): def getDiscart(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='discart', i=i) return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'disc_art', i = i)
def getLandscape(self, movie_info=None, data=None, i=0): def getLandscape(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='landscape', i=i) return self.getThumbnail(movie_info = movie_info, data= data, wanted_file_type = 'landscape', i = i)
def getExtrathumbs(self, movie_info=None, data=None, i=0): def getExtrathumbs(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='extrathumbs', i=i) return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'extra_thumbs', i = i)
def getExtrafanart(self, movie_info=None, data=None, i=0): def getExtrafanart(self, movie_info = None, data = None, i = 0):
if not data: data = {} if not data: data = {}
if not movie_info: movie_info = {} if not movie_info: movie_info = {}
return self.getThumbnail(movie_info=movie_info, data=data, wanted_file_type='extrafanart', i=i) return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'extra_fanart', i = i)

100
couchpotato/core/media/movie/providers/metadata/xbmc.py

@ -30,28 +30,28 @@ class XBMC(MovieMetaData):
return self.createMetaName(self.conf('meta_banner_name'), name, root) return self.createMetaName(self.conf('meta_banner_name'), name, root)
def getClearartName(self, name, root, i): def getClearartName(self, name, root, i):
return self.createMetaName(self.conf('meta_clearart_name'), name, root) return self.createMetaName(self.conf('meta_clear_art_name'), name, root)
def getLogoName(self, name, root, i): def getLogoName(self, name, root, i):
return self.createMetaName(self.conf('meta_logo_name'), name, root) return self.createMetaName(self.conf('meta_logo_name'), name, root)
def getDiscartName(self, name, root, i): def getDiscartName(self, name, root, i):
return self.createMetaName(self.conf('meta_discart_name'), name, root) return self.createMetaName(self.conf('meta_disc_art_name'), name, root)
def getLandscapeName(self, name, root, i): def getLandscapeName(self, name, root, i):
return self.createMetaName(self.conf('meta_landscape_name'), name, root) return self.createMetaName(self.conf('meta_landscape_name'), name, root)
def getExtrathumbsName(self, name, root, i): def getExtrathumbsName(self, name, root, i):
return self.createMetaNameMult(self.conf('meta_extrathumbs_name'), name, root, i) return self.createMetaNameMult(self.conf('meta_extra_thumbs_name'), name, root, i)
def getExtrafanartName(self, name, root, i): def getExtrafanartName(self, name, root, i):
return self.createMetaNameMult(self.conf('meta_extrafanart_name'), name, root, i) return self.createMetaNameMult(self.conf('meta_extra_fanart_name'), name, root, i)
def createMetaName(self, basename, name, root): def createMetaName(self, basename, name, root):
return os.path.join(root, basename.replace('%s', name)) return os.path.join(root, basename.replace('%s', name))
def createMetaNameMult(self, basename, name, root, i): def createMetaNameMult(self, basename, name, root, i):
return os.path.join(root, basename.replace('%s', name).replace('%i', str(i + 1))) return os.path.join(root, basename.replace('%s', name).replace('<i>', str(i + 1)))
def getNfo(self, movie_info=None, data=None, i=0): def getNfo(self, movie_info=None, data=None, i=0):
if not data: data = {} if not data: data = {}
@ -153,39 +153,25 @@ class XBMC(MovieMetaData):
for image_url in movie_info['images']['poster_original']: for image_url in movie_info['images']['poster_original']:
image = SubElement(nfoxml, 'thumb') image = SubElement(nfoxml, 'thumb')
image.text = toUnicode(image_url) image.text = toUnicode(image_url)
fanart = SubElement(nfoxml, 'fanart')
for image_url in movie_info['images']['backdrop_original']:
image = SubElement(fanart, 'thumb')
image.text = toUnicode(image_url)
banner = SubElement(nfoxml, 'banner')
for image_url in movie_info['images']['banner']:
image = SubElement(banner, 'thumb')
image.text = toUnicode(image_url)
discart = SubElement(nfoxml, 'discart')
for image_url in movie_info['images']['discart']:
image = SubElement(discart, 'thumb')
image.text = toUnicode(image_url)
logo = SubElement(nfoxml, 'logo')
for image_url in movie_info['images']['logo']:
image = SubElement(logo, 'thumb')
image.text = toUnicode(image_url)
clearart = SubElement(nfoxml, 'clearart')
for image_url in movie_info['images']['clearart']:
image = SubElement(clearart, 'thumb')
image.text = toUnicode(image_url)
landscape = SubElement(nfoxml, 'landscape')
for image_url in movie_info['images']['landscape']:
image = SubElement(landscape, 'thumb')
image.text = toUnicode(image_url)
extrathumb = SubElement(nfoxml, 'extrathumb')
for image_url in movie_info['images']['extrathumbs']:
image = SubElement(extrathumb, 'thumb')
image.text = toUnicode(image_url)
extrafanart = SubElement(nfoxml, 'extrafanart')
for image_url in movie_info['images']['extrafanart']:
image = SubElement(extrafanart, 'thumb')
image.text = toUnicode(image_url)
image_types = [
('fanart', 'backdrop_original'),
('banner', 'banner'),
('discart', 'disc_art'),
('logo', 'logo'),
('clearart', 'clear_art'),
('landscape', 'landscape'),
('extrathumb', 'extra_thumbs'),
('extrafanart', 'extra_fanart'),
]
for image_type in image_types:
sub, type = image_type
sub_element = SubElement(nfoxml, sub)
for image_url in movie_info['images'][type]:
image = SubElement(sub_element, 'thumb')
image.text = toUnicode(image_url)
# Add trailer if found # Add trailer if found
trailer_found = False trailer_found = False
@ -295,7 +281,7 @@ config = [{
{ {
'name': 'meta_banner', 'name': 'meta_banner',
'label': 'Banner', 'label': 'Banner',
'default': True, 'default': False,
'type': 'bool' 'type': 'bool'
}, },
{ {
@ -305,13 +291,13 @@ config = [{
'advanced': True, 'advanced': True,
}, },
{ {
'name': 'meta_clearart', 'name': 'meta_clear_art',
'label': 'ClearArt', 'label': 'ClearArt',
'default': True, 'default': False,
'type': 'bool' 'type': 'bool'
}, },
{ {
'name': 'meta_clearart_name', 'name': 'meta_clear_art_name',
'label': 'ClearArt filename', 'label': 'ClearArt filename',
'default': 'clearart.png', 'default': 'clearart.png',
'advanced': True, 'advanced': True,
@ -319,11 +305,11 @@ config = [{
{ {
'name': 'meta_disc', 'name': 'meta_disc',
'label': 'DiscArt', 'label': 'DiscArt',
'default': True, 'default': False,
'type': 'bool' 'type': 'bool'
}, },
{ {
'name': 'meta_discart_name', 'name': 'meta_disc_art_name',
'label': 'DiscArt filename', 'label': 'DiscArt filename',
'default': 'disc.png', 'default': 'disc.png',
'advanced': True, 'advanced': True,
@ -331,7 +317,7 @@ config = [{
{ {
'name': 'meta_landscape', 'name': 'meta_landscape',
'label': 'Landscape', 'label': 'Landscape',
'default': True, 'default': False,
'type': 'bool' 'type': 'bool'
}, },
{ {
@ -343,7 +329,7 @@ config = [{
{ {
'name': 'meta_logo', 'name': 'meta_logo',
'label': 'ClearLogo', 'label': 'ClearLogo',
'default': True, 'default': False,
'type': 'bool' 'type': 'bool'
}, },
{ {
@ -353,27 +339,29 @@ config = [{
'advanced': True, 'advanced': True,
}, },
{ {
'name': 'meta_extrathumbs', 'name': 'meta_extra_thumbs',
'label': 'Extrathumbs', 'label': 'Extrathumbs',
'default': True, 'default': False,
'type': 'bool' 'type': 'bool'
}, },
{ {
'name': 'meta_extrathumbs_name', 'name': 'meta_extra_thumbs_name',
'label': 'Extrathumbs filename (%i is the image number, and must be included to have multiple images).', 'label': 'Extrathumbs filename',
'default': 'extrathumbs/thumb%i.jpg', 'description': '&lt;i&gt; is the image number, and must be included to have multiple images',
'default': 'extrathumbs/thumb<i>.jpg',
'advanced': True 'advanced': True
}, },
{ {
'name': 'meta_extrafanart', 'name': 'meta_extra_fanart',
'lavel': 'Extrafanart', 'label': 'Extrafanart',
'default': True, 'default': False,
'type': 'bool' 'type': 'bool'
}, },
{ {
'name': 'meta_extrafanart_name', 'name': 'meta_extra_fanart_name',
'label': 'Extrafanart filename (%i is the image number, and must be included to have multiple images).', 'label': 'Extrafanart filename',
'default': 'extrafanart/extrafanart%i.jpg', 'default': 'extrafanart/extrafanart<i>.jpg',
'description': '&lt;i&gt; is the image number, and must be included to have multiple images',
'advanced': True 'advanced': True
} }
], ],

77
couchpotato/core/notifications/xbmc.py

@ -3,8 +3,6 @@ import json
import socket import socket
import traceback import traceback
import urllib import urllib
import time
import os
from couchpotato.core.helpers.variable import splitString, getTitle from couchpotato.core.helpers.variable import splitString, getTitle
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
@ -54,7 +52,7 @@ class XBMC(Notification):
response = self.notifyXBMCnoJSON(host, {'title': self.default_title, 'message': message}) response = self.notifyXBMCnoJSON(host, {'title': self.default_title, 'message': message})
if data and data.get('destination_dir') and (not self.conf('only_first') or hosts.index(host) == 0): if data and data.get('destination_dir') and (not self.conf('only_first') or hosts.index(host) == 0):
response += self.request(host, [('VideoLibrary.Scan', {})]) response += self.request(host, [('VideoLibrary.Scan', None, {})])
max_successful += 1 max_successful += 1
max_successful += 1 max_successful += 1
@ -68,50 +66,6 @@ class XBMC(Notification):
except: except:
log.error('Failed parsing results: %s', traceback.format_exc()) log.error('Failed parsing results: %s', traceback.format_exc())
if self.conf('run_artwork_downloader') and data and self.use_json_notifications.get(host):
time.sleep(self.conf('run_artwork_downloader_delay'))
if self.conf('force_full_scan'):
calls = [('Addons.ExecuteAddon', None, {'addonid': 'script.artwork.downloader'})]
max_successful += len(calls)
response = self.request(host, calls)
try:
if response[0].get('result') and result['result'] == 'OK':
successful += 1
elif response[0].get('error'):
log.error('XBMC error; %s: %s (%s)', (result['id'], result['error']['message'], result['error']['code']))
except:
log.error('Failed parsing results: %s', traceback.format_exc())
else:
calls = [('VideoLibrary.GetMovies', 'libMovies', {"filter":{"field": "title", "operator": "is", "value": data['media']['title'], "year": data['media']['info']['year']}})]
max_successful += len(calls)
response = self.request(host, calls)
dbid = None
try:
if response[0].get('result'):
successful += 1
dbid = response[0]['result']['movies'][-1]['movieid']
elif response[0].get('error'):
log.error('XBMC error; %s: %s (%s)', (result['id'], result['error']['message'], result['error']['code']))
except:
log.error('Failed parsing results: %s', traceback.format_exc())
if dbid is not None:
calls = [('Addons.ExecuteAddon', None, {'addonid': 'script.artwork.downloader', 'params':{'media_type': 'movie', 'dbid': str(dbid)}})]
max_successful += len(calls)
response = self.request(host, calls)
try:
if response[0].get('result') and result['result'] == 'OK':
successful += 1
elif response[0].get('error'):
log.error('XBMC error; %s: %s (%s)', (result['id'], result['error']['message'], result['error']['code']))
except:
log.error('Failed parsing results: %s', traceback.format_exc())
return successful == max_successful return successful == max_successful
@ -232,14 +186,11 @@ class XBMC(Notification):
for req in do_requests: for req in do_requests:
method, id, kwargs = req method, id, kwargs = req
if id is None:
id = method
data.append({ data.append({
'method': method, 'method': method,
'params': kwargs, 'params': kwargs,
'jsonrpc': '2.0', 'jsonrpc': '2.0',
'id': id, 'id': id if id else method,
}) })
data = json.dumps(data) data = json.dumps(data)
@ -273,7 +224,7 @@ config = [{
'list': 'notification_providers', 'list': 'notification_providers',
'name': 'xbmc', 'name': 'xbmc',
'label': 'XBMC', 'label': 'XBMC',
'description': 'v11 (Eden) and v12 (Frodo)', 'description': 'v11 (Eden), v12 (Frodo), v13 (Gotham)',
'options': [ 'options': [
{ {
'name': 'enabled', 'name': 'enabled',
@ -306,7 +257,7 @@ config = [{
'default': 0, 'default': 0,
'type': 'bool', 'type': 'bool',
'advanced': True, 'advanced': True,
'description': 'Only scan new movie folder at remote XBMC servers. Works if movie location is the same.', 'description': ('Only scan new movie folder at remote XBMC servers.', 'Useful if the XBMC path is different from the path CPS uses.'),
}, },
{ {
'name': 'force_full_scan', 'name': 'force_full_scan',
@ -314,31 +265,15 @@ config = [{
'default': 0, 'default': 0,
'type': 'bool', 'type': 'bool',
'advanced': True, 'advanced': True,
'description': 'Do a full scan instead of only the new movie. Useful if the XBMC path is different from the path CPS uses.', 'description': ('Do a full scan instead of only the new movie.', 'Useful if the XBMC path is different from the path CPS uses.'),
}, },
{ {
'name': 'on_snatch', 'name': 'on_snatch',
'default': 0, 'default': False,
'type': 'bool', 'type': 'bool',
'advanced': True, 'advanced': True,
'description': 'Also send message when movie is snatched.', 'description': 'Also send message when movie is snatched.',
}, },
{
'name': 'run_artwork_downloader',
'label': 'Run the Artwork Downloader',
'default': 0,
'type': 'bool',
'advanced': True,
'description': 'Runs the Artwork Downloader script to initialize/download artwork. (Requires the Artwork Downloader addon and XBMC Frodo or later)'
},
{
'name': 'run_artwork_downloader_delay',
'label': 'Artwork Downloader delay',
'default': 5,
'type': 'int',
'advanced': True,
'description': 'Number of seconds to wait to start the Artwork Downloader script after notifying XBMC.',
},
], ],
} }
], ],

Loading…
Cancel
Save