Userscript

This commit is contained in:
Ruud committed 2011-09-28 09:17:34 +02:00
1 parent c6f322a2c2
commit f09572b662
5 files changed
+41 -67

No files matched your search

+1 -1
View File
@@ -66,7 +66,7 @@ def fireEvent(name, *args, **kwargs):
elif r[1]: elif r[1]:
errorHandler(r[1]) errorHandler(r[1])
else: else:
log.debug('Assume disabled plugin: %s' % r[2]) log.debug('Assume disabled eventhandler for: %s' % name)
else: else:
results = [] results = []
+6
View File
@@ -4,6 +4,7 @@ from couchpotato.core.helpers.variable import getExt
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.environment import Env from couchpotato.environment import Env
from flask.helpers import send_from_directory from flask.helpers import send_from_directory
from flask.templating import render_template_string
from libs.multipartpost import MultipartPostHandler from libs.multipartpost import MultipartPostHandler
from urlparse import urlparse from urlparse import urlparse
import cookielib import cookielib
@@ -40,6 +41,11 @@ class Plugin(object):
def getName(self): def getName(self):
return self.__class__.__name__ 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): def registerStatic(self, plugin_file, add_to_head = True):
# Register plugin path # Register plugin path
+23 -5
View File
@@ -1,10 +1,13 @@
from couchpotato.api import addApiView from couchpotato.api import addApiView
from couchpotato.core.event import fireEvent 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 couchpotato.core.plugins.base import Plugin
from flask.globals import request from flask.globals import request
from flask.helpers import url_for from flask.helpers import url_for
from flask.templating import render_template_string
import os log = CPLog(__name__)
class Extension(Plugin): class Extension(Plugin):
@@ -12,17 +15,18 @@ class Extension(Plugin):
def __init__(self): def __init__(self):
addApiView('userscript', self.getExtension) addApiView('userscript', self.getExtension)
addApiView('userscript.add_via_url', self.addViaUrl)
def getExtension(self): def getExtension(self):
params = { params = {
'includes': fireEvent('userscript.get_includes', merge = True), 'includes': fireEvent('userscript.get_includes', merge = True),
'excludes': fireEvent('userscript.get_excludes', merge = True), 'excludes': fireEvent('userscript.get_excludes', merge = True),
'version': self.getVersion(), '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 self.renderTemplate(__file__, 'template.js', **params)
return render_template_string(template, **params)
def getVersion(self): def getVersion(self):
@@ -33,3 +37,17 @@ class Extension(Plugin):
version += v version += v
return version 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)
+8 -14
View File
@@ -1,6 +1,4 @@
from couchpotato.api import addApiView
from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.request import getParam
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin from couchpotato.core.plugins.base import Plugin
from urlparse import urlparse from urlparse import urlparse
@@ -20,30 +18,26 @@ class UserscriptBase(Plugin):
addEvent('userscript.get_excludes', self.getExclude) addEvent('userscript.get_excludes', self.getExclude)
addEvent('userscript.get_version', self.getVersion) 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): def search(self, name, year = None):
movie = fireEvent('movie.search', q = '%s %s' % (name, year), limit = 1) movie = fireEvent('movie.search', q = '%s %s' % (name, year), limit = 1)
return movie return movie
def addViaUrl(self): def belongsTo(self, url):
url = getParam('url')
host = urlparse(url).hostname 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: for include in self.includes:
if host in include: if host in include:
is_provider = True return self.getMovie(url)
break
if not is_provider:
return False
return
fireEvent() def getMovie(self, url):
return None
def getInclude(self): def getInclude(self):
return self.includes return self.includes
@@ -18,53 +18,9 @@ class IMDB(UserscriptBase):
# Don't add TV show # Don't add TV show
for head in headers: for head in headers:
if 'seasons' in head.lower(): if 'seasons' in head.lower():
return False return 'IMDB url is a TV Show'
identifier = re.search('(?P<id>tt[0-9{7}]+)', url).group('id') identifier = re.search('(?P<id>tt[0-9{7}]+)', url).group('id')
movie = fireEvent('movie.info', identifier = identifier) movie = fireEvent('movie.info', identifier = identifier, merge = True)
return { return movie
'id': re.search('(?P<id>tt[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;
#
#})();