Merge branch 'refs/heads/develop'
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from couchpotato.core.event import addEvent
|
||||
from couchpotato.core.helpers.request import jsonified
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.notifications.base import Notification
|
||||
import subprocess
|
||||
@@ -9,13 +10,14 @@ log = CPLog(__name__)
|
||||
class Synoindex(Notification):
|
||||
|
||||
def __init__(self):
|
||||
super(Synoindex, self).__init__()
|
||||
addEvent('renamer.after', self.addToLibrary)
|
||||
|
||||
def addToLibrary(self, group = {}):
|
||||
if self.isDisabled(): return
|
||||
|
||||
command = ['/usr/syno/bin/synoindex', '-A', group.get('destination_dir')]
|
||||
log.info(u'Executing synoindex command: %s ', command)
|
||||
command = ['/usr/syno/bin/synoindex', '-A', group.get('destination_dir', '')]
|
||||
log.info('Executing synoindex command: %s ', command)
|
||||
try:
|
||||
p = subprocess.Popen(command, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
|
||||
out = p.communicate()
|
||||
@@ -26,3 +28,7 @@ class Synoindex(Notification):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def test(self):
|
||||
success = self.addToLibrary()
|
||||
return jsonified({'success': success})
|
||||
|
||||
@@ -8,6 +8,7 @@ from couchpotato.core.plugins.base import Plugin
|
||||
from couchpotato.core.settings.model import FileType, File
|
||||
from couchpotato.environment import Env
|
||||
import os.path
|
||||
import time
|
||||
import traceback
|
||||
|
||||
log = CPLog(__name__)
|
||||
@@ -28,6 +29,25 @@ class FileManager(Plugin):
|
||||
'return': {'type': 'file'}
|
||||
})
|
||||
|
||||
addEvent('app.load', self.cleanup)
|
||||
|
||||
def cleanup(self):
|
||||
|
||||
# Wait a bit after starting before cleanup
|
||||
time.sleep(3)
|
||||
log.debug('Cleaning up unused files')
|
||||
|
||||
try:
|
||||
db = get_session()
|
||||
for root, dirs, walk_files in os.walk(Env.get('cache_dir')):
|
||||
for filename in walk_files:
|
||||
file_path = os.path.join(root, filename)
|
||||
f = db.query(File).filter(File.path == toUnicode(file_path)).first()
|
||||
if not f:
|
||||
os.remove(file_path)
|
||||
except:
|
||||
log.error('Failed removing unused file: %s', traceback.format_exc())
|
||||
|
||||
def showCacheFile(self, filename = ''):
|
||||
|
||||
cache_dir = Env.get('cache_dir')
|
||||
|
||||
@@ -111,18 +111,20 @@ class LibraryPlugin(Plugin):
|
||||
|
||||
# Files
|
||||
images = info.get('images', [])
|
||||
for type in images:
|
||||
for image in images[type]:
|
||||
if not isinstance(image, str):
|
||||
for image_type in ['poster']:
|
||||
for image in images.get(image_type, []):
|
||||
if not isinstance(image, (str, unicode)):
|
||||
continue
|
||||
|
||||
file_path = fireEvent('file.download', url = image, single = True)
|
||||
if file_path:
|
||||
file_obj = fireEvent('file.add', path = file_path, type_tuple = ('image', type), single = True)
|
||||
file_obj = fireEvent('file.add', path = file_path, type_tuple = ('image', image_type), single = True)
|
||||
try:
|
||||
file_obj = db.query(File).filter_by(id = file_obj.get('id')).one()
|
||||
library.files.append(file_obj)
|
||||
db.commit()
|
||||
|
||||
break
|
||||
except:
|
||||
log.debug('Failed to attach to library: %s', traceback.format_exc())
|
||||
|
||||
|
||||
@@ -74,9 +74,18 @@ class MetaDataBase(Plugin):
|
||||
if file_type.get('identifier') == wanted_file_type:
|
||||
break
|
||||
|
||||
# See if it is in current files
|
||||
for cur_file in data['library'].get('files', []):
|
||||
if cur_file.get('type_id') is file_type.get('id') and os.path.isfile(cur_file.get('path')):
|
||||
return cur_file.get('path')
|
||||
|
||||
# Download using existing info
|
||||
try:
|
||||
images = data['library']['info']['images'][wanted_file_type]
|
||||
file_path = fireEvent('file.download', url = images[0], single = True)
|
||||
return file_path
|
||||
except:
|
||||
pass
|
||||
|
||||
def getFanart(self, movie_info = {}, data = {}):
|
||||
return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'backdrop_original')
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
from couchpotato import get_session
|
||||
from couchpotato.core.event import addEvent, fireEvent
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode
|
||||
from couchpotato.core.helpers.request import jsonified, getParams
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.movie.base import MovieProvider
|
||||
from couchpotato.core.settings.model import Movie
|
||||
from flask.helpers import json
|
||||
import traceback
|
||||
|
||||
log = CPLog(__name__)
|
||||
|
||||
@@ -12,28 +14,57 @@ log = CPLog(__name__)
|
||||
class CouchPotatoApi(MovieProvider):
|
||||
|
||||
api_url = 'http://couchpota.to/api/%s/'
|
||||
urls = {
|
||||
'search': 'https://couchpota.to/api/search/%s/',
|
||||
'info': 'https://couchpota.to/api/info/%s/',
|
||||
'eta': 'https://couchpota.to/api/eta/%s/',
|
||||
}
|
||||
http_time_between_calls = 0
|
||||
api_version = 1
|
||||
|
||||
def __init__(self):
|
||||
#addApiView('movie.suggest', self.suggestView)
|
||||
|
||||
addEvent('movie.info', self.getInfo)
|
||||
addEvent('movie.info', self.getInfo, priority = 1)
|
||||
addEvent('movie.search', self.search, priority = 1)
|
||||
addEvent('movie.release_date', self.getReleaseDate)
|
||||
|
||||
def search(self, q, limit = 12):
|
||||
|
||||
cache_key = 'cpapi.cache.%s' % q
|
||||
cached = self.getCache(cache_key, self.urls['search'] % tryUrlencode(q), timeout = 3, headers = self.getRequestHeaders())
|
||||
|
||||
if cached:
|
||||
try:
|
||||
movies = json.loads(cached)
|
||||
return movies
|
||||
except:
|
||||
log.error('Failed parsing search results: %s', traceback.format_exc())
|
||||
|
||||
return []
|
||||
|
||||
def getInfo(self, identifier = None):
|
||||
return {
|
||||
'release_date': self.getReleaseDate(identifier)
|
||||
}
|
||||
|
||||
if not identifier:
|
||||
return
|
||||
|
||||
cache_key = 'cpapi.cache.info.%s' % identifier
|
||||
cached = self.getCache(cache_key, self.urls['info'] % identifier, timeout = 3, headers = self.getRequestHeaders())
|
||||
|
||||
if cached:
|
||||
try:
|
||||
movie = json.loads(cached)
|
||||
return movie
|
||||
except:
|
||||
log.error('Failed parsing info results: %s', traceback.format_exc())
|
||||
|
||||
return {}
|
||||
|
||||
def getReleaseDate(self, identifier = None):
|
||||
|
||||
if identifier is None: return {}
|
||||
try:
|
||||
headers = {
|
||||
'X-CP-Version': fireEvent('app.version', single = True),
|
||||
'X-CP-API': 1,
|
||||
}
|
||||
data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = headers)
|
||||
data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = self.getRequestHeaders())
|
||||
dates = json.loads(data)
|
||||
log.debug('Found ETA for %s: %s', (identifier, dates))
|
||||
return dates
|
||||
@@ -71,3 +102,9 @@ class CouchPotatoApi(MovieProvider):
|
||||
'count': len(suggestions),
|
||||
'suggestions': suggestions
|
||||
})
|
||||
|
||||
def getRequestHeaders(self):
|
||||
return {
|
||||
'X-CP-Version': fireEvent('app.version', single = True),
|
||||
'X-CP-API': self.api_version,
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ class TheMovieDb(MovieProvider):
|
||||
|
||||
def __init__(self):
|
||||
addEvent('movie.by_hash', self.byHash)
|
||||
addEvent('movie.search', self.search, priority = 1)
|
||||
addEvent('movie.info', self.getInfo, priority = 1)
|
||||
addEvent('movie.search', self.search, priority = 2)
|
||||
addEvent('movie.info', self.getInfo, priority = 2)
|
||||
addEvent('movie.info_by_tmdb', self.getInfoByTMDBId)
|
||||
|
||||
# Use base wrapper
|
||||
|
||||
@@ -116,7 +116,7 @@ var AboutSettingTab = new Class({
|
||||
if(!json) return;
|
||||
var self = this;
|
||||
var date = new Date(json.version.date * 1000);
|
||||
self.version_text.set('text', json.version.hash + ' ('+date.toUTCString()+')');
|
||||
self.version_text.set('text', json.version.hash + (json.version.date ? ' ('+date.toLocaleString()+')' : ''));
|
||||
self.updater_type.set('text', json.version.type);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user