From f09572b6628001a2929942ffb008b4f82a294b28 Mon Sep 17 00:00:00 2001 From: Ruud Date: Wed, 28 Sep 2011 09:17:15 +0200 Subject: [PATCH] Userscript --- couchpotato/core/event.py | 2 +- couchpotato/core/plugins/base.py | 6 +++ couchpotato/core/plugins/userscript/main.py | 28 +++++++++-- couchpotato/core/providers/userscript/base.py | 22 +++----- .../core/providers/userscript/imdb/main.py | 50 ++----------------- 5 files changed, 41 insertions(+), 67 deletions(-) diff --git a/couchpotato/core/event.py b/couchpotato/core/event.py index c3b93a37..d6497985 100644 --- a/couchpotato/core/event.py +++ b/couchpotato/core/event.py @@ -66,7 +66,7 @@ def fireEvent(name, *args, **kwargs): elif r[1]: errorHandler(r[1]) else: - log.debug('Assume disabled plugin: %s' % r[2]) + log.debug('Assume disabled eventhandler for: %s' % name) else: results = [] diff --git a/couchpotato/core/plugins/base.py b/couchpotato/core/plugins/base.py index 6e342154..09a5c9a3 100644 --- a/couchpotato/core/plugins/base.py +++ b/couchpotato/core/plugins/base.py @@ -4,6 +4,7 @@ from couchpotato.core.helpers.variable import getExt from couchpotato.core.logger import CPLog from couchpotato.environment import Env from flask.helpers import send_from_directory +from flask.templating import render_template_string from libs.multipartpost import MultipartPostHandler from urlparse import urlparse import cookielib @@ -40,6 +41,11 @@ class Plugin(object): def getName(self): return self.__class__.__name__ + def renderTemplate(self, parent_file, template, **params): + + template = open(os.path.join(os.path.dirname(parent_file), template), 'r').read() + return render_template_string(template, **params) + def registerStatic(self, plugin_file, add_to_head = True): # Register plugin path diff --git a/couchpotato/core/plugins/userscript/main.py b/couchpotato/core/plugins/userscript/main.py index 2efd9baa..b731a487 100644 --- a/couchpotato/core/plugins/userscript/main.py +++ b/couchpotato/core/plugins/userscript/main.py @@ -1,10 +1,13 @@ from couchpotato.api import addApiView from couchpotato.core.event import fireEvent +from couchpotato.core.helpers.request import getParam, jsonified +from couchpotato.core.helpers.variable import isDict +from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin from flask.globals import request from flask.helpers import url_for -from flask.templating import render_template_string -import os + +log = CPLog(__name__) class Extension(Plugin): @@ -12,17 +15,18 @@ class Extension(Plugin): def __init__(self): addApiView('userscript', self.getExtension) + addApiView('userscript.add_via_url', self.addViaUrl) + def getExtension(self): params = { 'includes': fireEvent('userscript.get_includes', merge = True), 'excludes': fireEvent('userscript.get_excludes', merge = True), 'version': self.getVersion(), - 'host': '%s%userscript.add_via_url/' % (request.host_url.rstrip('/'), url_for('api.index')), + 'host': '%s%suserscript.add_via_url/' % (request.host_url.rstrip('/'), url_for('api.index')), } - template = open(os.path.join(os.path.dirname(__file__), 'template.js'), 'r').read() - return render_template_string(template, **params) + return self.renderTemplate(__file__, 'template.js', **params) def getVersion(self): @@ -33,3 +37,17 @@ class Extension(Plugin): version += v return version + + def addViaUrl(self): + + url = getParam('url') + + params = { + 'url': url, + 'movie': fireEvent('userscript.get_movie_via_url', url = url, single = True) + } + if not isDict(params['movie']): + log.error('Failed adding movie via url: %s' % url) + params['error'] = params['movie'] if params['movie'] else 'Failed getting movie info' + + return self.renderTemplate(__file__, 'template.js', **params) diff --git a/couchpotato/core/providers/userscript/base.py b/couchpotato/core/providers/userscript/base.py index 5b47e492..10ca6edf 100644 --- a/couchpotato/core/providers/userscript/base.py +++ b/couchpotato/core/providers/userscript/base.py @@ -1,6 +1,4 @@ -from couchpotato.api import addApiView from couchpotato.core.event import addEvent, fireEvent -from couchpotato.core.helpers.request import getParam from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin from urlparse import urlparse @@ -20,30 +18,26 @@ class UserscriptBase(Plugin): addEvent('userscript.get_excludes', self.getExclude) addEvent('userscript.get_version', self.getVersion) - addApiView('userscript.add_via_url', self.addViaUrl) + addEvent('userscript.get_movie_via_url', self.belongsTo) def search(self, name, year = None): - movie = fireEvent('movie.search', q = '%s %s' % (name, year), limit = 1) - return movie - def addViaUrl(self): + def belongsTo(self, url): - url = getParam('url') host = urlparse(url).hostname + if host.startswith('www.'): + host = host[4:] - # Check if the url matches the provider - is_provider = False for include in self.includes: if host in include: - is_provider = True - break - if not is_provider: - return False + return self.getMovie(url) + return - fireEvent() + def getMovie(self, url): + return None def getInclude(self): return self.includes diff --git a/couchpotato/core/providers/userscript/imdb/main.py b/couchpotato/core/providers/userscript/imdb/main.py index ab31acd1..85296d3e 100644 --- a/couchpotato/core/providers/userscript/imdb/main.py +++ b/couchpotato/core/providers/userscript/imdb/main.py @@ -18,53 +18,9 @@ class IMDB(UserscriptBase): # Don't add TV show for head in headers: if 'seasons' in head.lower(): - return False + return 'IMDB url is a TV Show' identifier = re.search('(?Ptt[0-9{7}]+)', url).group('id') - movie = fireEvent('movie.info', identifier = identifier) + movie = fireEvent('movie.info', identifier = identifier, merge = True) - return { - 'id': re.search('(?Ptt[0-9{7}]+)', url).group('id'), - 'year': self.getYear(html) - } - - -#CouchPotato['imdb.com'] = (function(){ -# -# function isMovie(){ -# var series = document.getElementsByTagName('h5') -# for (var i = 0; i < series.length; i++) { -# if (series[i].innerHTML == 'Seasons:') { -# return false; -# } -# } -# return true; -# } -# -# function getId(){ -# return 'tt' + location.href.replace(/[^\d+]+/g, ''); -# } -# -# function getYear(){ -# try { -# return document.getElementsByTagName('h1')[0].getElementsByTagName('a')[0].text; -# } catch (e) { -# var spans = document.getElementsByTagName('h1')[0].getElementsByTagName('span'); -# var pattern = /^\((TV|Video) ([0-9]+)\)$/; -# for (var i = 0; i < spans.length; i++) { -# if (spans[i].innerHTML.search(pattern)) { -# return spans[i].innerHTML.match(pattern)[1]; -# } -# } -# } -# } -# -# var constructor = function(){ -# if(isMovie()){ -# lib.osd(getId(), getYear()); -# } -# } -# -# return constructor; -# -#})(); + return movie