Merge branch 'refs/heads/develop'

This commit is contained in:
Ruud committed 2012-09-16 21:32:16 +02:00
commit ade4338ea6
7 files changed
+92 -18

No files matched your search

@@ -1,4 +1,5 @@
from couchpotato.core.event import addEvent from couchpotato.core.event import addEvent
from couchpotato.core.helpers.request import jsonified
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.notifications.base import Notification from couchpotato.core.notifications.base import Notification
import subprocess import subprocess
@@ -9,13 +10,14 @@ log = CPLog(__name__)
class Synoindex(Notification): class Synoindex(Notification):
def __init__(self): def __init__(self):
super(Synoindex, self).__init__()
addEvent('renamer.after', self.addToLibrary) addEvent('renamer.after', self.addToLibrary)
def addToLibrary(self, group = {}): def addToLibrary(self, group = {}):
if self.isDisabled(): return if self.isDisabled(): return
command = ['/usr/syno/bin/synoindex', '-A', group.get('destination_dir')] command = ['/usr/syno/bin/synoindex', '-A', group.get('destination_dir', '')]
log.info(u'Executing synoindex command: %s ', command) log.info('Executing synoindex command: %s ', command)
try: try:
p = subprocess.Popen(command, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) p = subprocess.Popen(command, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
out = p.communicate() out = p.communicate()
@@ -26,3 +28,7 @@ class Synoindex(Notification):
return False return False
return True return True
def test(self):
success = self.addToLibrary()
return jsonified({'success': success})
+20
View File
@@ -8,6 +8,7 @@ from couchpotato.core.plugins.base import Plugin
from couchpotato.core.settings.model import FileType, File from couchpotato.core.settings.model import FileType, File
from couchpotato.environment import Env from couchpotato.environment import Env
import os.path import os.path
import time
import traceback import traceback
log = CPLog(__name__) log = CPLog(__name__)
@@ -28,6 +29,25 @@ class FileManager(Plugin):
'return': {'type': 'file'} '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 = ''): def showCacheFile(self, filename = ''):
cache_dir = Env.get('cache_dir') cache_dir = Env.get('cache_dir')
+6 -4
View File
@@ -111,18 +111,20 @@ class LibraryPlugin(Plugin):
# Files # Files
images = info.get('images', []) images = info.get('images', [])
for type in images: for image_type in ['poster']:
for image in images[type]: for image in images.get(image_type, []):
if not isinstance(image, str): if not isinstance(image, (str, unicode)):
continue continue
file_path = fireEvent('file.download', url = image, single = True) file_path = fireEvent('file.download', url = image, single = True)
if file_path: 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: try:
file_obj = db.query(File).filter_by(id = file_obj.get('id')).one() file_obj = db.query(File).filter_by(id = file_obj.get('id')).one()
library.files.append(file_obj) library.files.append(file_obj)
db.commit() db.commit()
break
except: except:
log.debug('Failed to attach to library: %s', traceback.format_exc()) 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: if file_type.get('identifier') == wanted_file_type:
break break
# See if it is in current files
for cur_file in data['library'].get('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')): if cur_file.get('type_id') is file_type.get('id') and os.path.isfile(cur_file.get('path')):
return 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 = {}): def getFanart(self, movie_info = {}, data = {}):
return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'backdrop_original') 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 import get_session
from couchpotato.core.event import addEvent, fireEvent 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.helpers.request import jsonified, getParams
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.providers.movie.base import MovieProvider from couchpotato.core.providers.movie.base import MovieProvider
from couchpotato.core.settings.model import Movie from couchpotato.core.settings.model import Movie
from flask.helpers import json from flask.helpers import json
import traceback
log = CPLog(__name__) log = CPLog(__name__)
@@ -12,28 +14,57 @@ log = CPLog(__name__)
class CouchPotatoApi(MovieProvider): class CouchPotatoApi(MovieProvider):
api_url = 'http://couchpota.to/api/%s/' 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 http_time_between_calls = 0
api_version = 1
def __init__(self): def __init__(self):
#addApiView('movie.suggest', self.suggestView) #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) 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): 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): def getReleaseDate(self, identifier = None):
if identifier is None: return {} if identifier is None: return {}
try: try:
headers = { data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = self.getRequestHeaders())
'X-CP-Version': fireEvent('app.version', single = True),
'X-CP-API': 1,
}
data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = headers)
dates = json.loads(data) dates = json.loads(data)
log.debug('Found ETA for %s: %s', (identifier, dates)) log.debug('Found ETA for %s: %s', (identifier, dates))
return dates return dates
@@ -71,3 +102,9 @@ class CouchPotatoApi(MovieProvider):
'count': len(suggestions), 'count': len(suggestions),
'suggestions': 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): def __init__(self):
addEvent('movie.by_hash', self.byHash) addEvent('movie.by_hash', self.byHash)
addEvent('movie.search', self.search, priority = 1) addEvent('movie.search', self.search, priority = 2)
addEvent('movie.info', self.getInfo, priority = 1) addEvent('movie.info', self.getInfo, priority = 2)
addEvent('movie.info_by_tmdb', self.getInfoByTMDBId) addEvent('movie.info_by_tmdb', self.getInfoByTMDBId)
# Use base wrapper # Use base wrapper
+1 -1
View File
@@ -116,7 +116,7 @@ var AboutSettingTab = new Class({
if(!json) return; if(!json) return;
var self = this; var self = this;
var date = new Date(json.version.date * 1000); 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); self.updater_type.set('text', json.version.type);
} }