Userscript
This commit is contained in:
1 parent
c6f322a2c2
commit
f09572b662
5 files changed
+41
-67
No files matched your search
@@ -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 = []
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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;
|
|
||||||
#
|
|
||||||
#})();
|
|
||||||
Reference in new issue
Block a user