Merge remote-tracking branch 'origin/nosql' into nosql-qbitorrent
This commit is contained in:
commit
07db34beb9
9 files changed
+66
-37
No files matched your search
@@ -51,6 +51,7 @@ class Core(Plugin):
|
|||||||
addEvent('app.api_url', self.createApiUrl)
|
addEvent('app.api_url', self.createApiUrl)
|
||||||
addEvent('app.version', self.version)
|
addEvent('app.version', self.version)
|
||||||
addEvent('app.load', self.checkDataDir)
|
addEvent('app.load', self.checkDataDir)
|
||||||
|
addEvent('app.load', self.cleanUpFolders)
|
||||||
|
|
||||||
addEvent('setting.save.core.password', self.md5Password)
|
addEvent('setting.save.core.password', self.md5Password)
|
||||||
addEvent('setting.save.core.api_key', self.checkApikey)
|
addEvent('setting.save.core.api_key', self.checkApikey)
|
||||||
@@ -75,6 +76,9 @@ class Core(Plugin):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def cleanUpFolders(self):
|
||||||
|
self.deleteEmptyFolder(Env.get('app_dir'), show_error = False)
|
||||||
|
|
||||||
def available(self, **kwargs):
|
def available(self, **kwargs):
|
||||||
return {
|
return {
|
||||||
'success': True
|
'success': True
|
||||||
|
|||||||
@@ -142,6 +142,10 @@ class Updater(Plugin):
|
|||||||
'success': success
|
'success': success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def doShutdown(self):
|
||||||
|
self.updater.deletePyc(show_logs = False)
|
||||||
|
return super(Updater, self).doShutdown()
|
||||||
|
|
||||||
|
|
||||||
class BaseUpdater(Plugin):
|
class BaseUpdater(Plugin):
|
||||||
|
|
||||||
@@ -176,7 +180,7 @@ class BaseUpdater(Plugin):
|
|||||||
def check(self):
|
def check(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def deletePyc(self, only_excess = True):
|
def deletePyc(self, only_excess = True, show_logs = True):
|
||||||
|
|
||||||
for root, dirs, files in scandir.walk(ss(Env.get('app_dir'))):
|
for root, dirs, files in scandir.walk(ss(Env.get('app_dir'))):
|
||||||
|
|
||||||
@@ -186,7 +190,7 @@ class BaseUpdater(Plugin):
|
|||||||
|
|
||||||
for excess_pyc_file in excess_pyc_files:
|
for excess_pyc_file in excess_pyc_files:
|
||||||
full_path = os.path.join(root, excess_pyc_file)
|
full_path = os.path.join(root, excess_pyc_file)
|
||||||
log.debug('Removing old PYC file: %s', full_path)
|
if show_logs: log.debug('Removing old PYC file: %s', full_path)
|
||||||
try:
|
try:
|
||||||
os.remove(full_path)
|
os.remove(full_path)
|
||||||
except:
|
except:
|
||||||
@@ -212,9 +216,6 @@ class GitUpdater(BaseUpdater):
|
|||||||
log.info('Updating to latest version')
|
log.info('Updating to latest version')
|
||||||
self.repo.pull()
|
self.repo.pull()
|
||||||
|
|
||||||
# Delete leftover .pyc files
|
|
||||||
self.deletePyc()
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
log.error('Failed updating via GIT: %s', traceback.format_exc())
|
log.error('Failed updating via GIT: %s', traceback.format_exc())
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ class Downloader(Provider):
|
|||||||
(d_manual and manual or d_manual is False) and \
|
(d_manual and manual or d_manual is False) and \
|
||||||
(not data or self.isCorrectProtocol(data.get('protocol')))
|
(not data or self.isCorrectProtocol(data.get('protocol')))
|
||||||
|
|
||||||
def _test(self):
|
def _test(self, **kwargs):
|
||||||
t = self.test()
|
t = self.test()
|
||||||
if isinstance(t, tuple):
|
if isinstance(t, tuple):
|
||||||
return {'success': t[0], 'msg': t[1]}
|
return {'success': t[0], 'msg': t[1]}
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ class YarrProvider(Provider):
|
|||||||
self._search(media, quality, results)
|
self._search(media, quality, results)
|
||||||
# Search possible titles
|
# Search possible titles
|
||||||
else:
|
else:
|
||||||
media_title = fireEvent('library.query', media['library'], single = True)
|
media_title = fireEvent('library.query', media, single = True)
|
||||||
|
|
||||||
for title in possibleTitles(media_title):
|
for title in possibleTitles(media_title):
|
||||||
self._searchOnTitle(title, media, quality, results)
|
self._searchOnTitle(title, media, quality, results)
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ class Base(NZBProvider, RSS):
|
|||||||
hosts = self.getHosts()
|
hosts = self.getHosts()
|
||||||
|
|
||||||
for host in hosts:
|
for host in hosts:
|
||||||
result = super(Newznab, self).belongsTo(url, host = host['host'], provider = provider)
|
result = super(Base, self).belongsTo(url, host = host['host'], provider = provider)
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ import six
|
|||||||
|
|
||||||
log = CPLog(__name__)
|
log = CPLog(__name__)
|
||||||
|
|
||||||
autoload = 'MovieBase'
|
|
||||||
|
|
||||||
|
|
||||||
class MovieBase(MovieTypeBase):
|
class MovieBase(MovieTypeBase):
|
||||||
|
|
||||||
@@ -106,7 +104,7 @@ class MovieBase(MovieTypeBase):
|
|||||||
'identifier': params.get('identifier'),
|
'identifier': params.get('identifier'),
|
||||||
'status': status if status else 'active',
|
'status': status if status else 'active',
|
||||||
'profile_id': params.get('profile_id', default_profile.get('_id')),
|
'profile_id': params.get('profile_id', default_profile.get('_id')),
|
||||||
'category_id': cat_id if cat_id is not None and len(cat_id) > 0 else None,
|
'category_id': cat_id if cat_id is not None and len(cat_id) > 0 and cat_id != '-1' else None,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Update movie info
|
# Update movie info
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
from couchpotato.core.event import addEvent
|
||||||
|
from couchpotato.core.logger import CPLog
|
||||||
|
from couchpotato.core.media._base.library.base import LibraryBase
|
||||||
|
|
||||||
|
|
||||||
|
log = CPLog(__name__)
|
||||||
|
|
||||||
|
autoload = 'MovieLibraryPlugin'
|
||||||
|
|
||||||
|
|
||||||
|
class MovieLibraryPlugin(LibraryBase):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
addEvent('library.query', self.query)
|
||||||
|
|
||||||
|
def query(self, media, first = True, include_year = True, **kwargs):
|
||||||
|
if media.get('type') != 'movie':
|
||||||
|
return
|
||||||
|
|
||||||
|
titles = media['info'].get('titles', [])
|
||||||
|
|
||||||
|
# Add year identifier to titles
|
||||||
|
if include_year:
|
||||||
|
titles = [title + (' %s' % str(media['info']['year'])) for title in titles]
|
||||||
|
|
||||||
|
if first:
|
||||||
|
return titles[0] if titles else None
|
||||||
|
|
||||||
|
return titles
|
||||||
@@ -17,6 +17,7 @@ from couchpotato.environment import Env
|
|||||||
import requests
|
import requests
|
||||||
from requests.packages.urllib3 import Timeout
|
from requests.packages.urllib3 import Timeout
|
||||||
from requests.packages.urllib3.exceptions import MaxRetryError
|
from requests.packages.urllib3.exceptions import MaxRetryError
|
||||||
|
from scandir import scandir
|
||||||
from tornado import template
|
from tornado import template
|
||||||
from tornado.web import StaticFileHandler
|
from tornado.web import StaticFileHandler
|
||||||
|
|
||||||
@@ -63,16 +64,11 @@ class Plugin(object):
|
|||||||
|
|
||||||
def databaseSetup(self):
|
def databaseSetup(self):
|
||||||
|
|
||||||
db = get_db()
|
|
||||||
|
|
||||||
for index_name in self._database:
|
for index_name in self._database:
|
||||||
klass = self._database[index_name]
|
klass = self._database[index_name]
|
||||||
|
|
||||||
fireEvent('database.setup_index', index_name, klass)
|
fireEvent('database.setup_index', index_name, klass)
|
||||||
|
|
||||||
def afterDatabaseSetup(self):
|
|
||||||
print self._database_indexes
|
|
||||||
|
|
||||||
def conf(self, attr, value = None, default = None, section = None):
|
def conf(self, attr, value = None, default = None, section = None):
|
||||||
class_name = self.getName().lower().split(':')[0].lower()
|
class_name = self.getName().lower().split(':')[0].lower()
|
||||||
return Env.setting(attr, section = section if section else class_name, value = value, default = default)
|
return Env.setting(attr, section = section if section else class_name, value = value, default = default)
|
||||||
@@ -146,6 +142,26 @@ class Plugin(object):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def deleteEmptyFolder(self, folder, show_error = True):
|
||||||
|
folder = sp(folder)
|
||||||
|
|
||||||
|
for root, dirs, files in scandir.walk(folder):
|
||||||
|
|
||||||
|
for dir_name in dirs:
|
||||||
|
full_path = os.path.join(root, dir_name)
|
||||||
|
if len(os.listdir(full_path)) == 0:
|
||||||
|
try:
|
||||||
|
os.rmdir(full_path)
|
||||||
|
except:
|
||||||
|
if show_error:
|
||||||
|
log.error('Couldn\'t remove empty directory %s: %s', (full_path, traceback.format_exc()))
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.rmdir(folder)
|
||||||
|
except:
|
||||||
|
if show_error:
|
||||||
|
log.error('Couldn\'t remove empty directory %s: %s', (folder, traceback.format_exc()))
|
||||||
|
|
||||||
# http request
|
# http request
|
||||||
def urlopen(self, url, timeout = 30, data = None, headers = None, files = None, show_error = True):
|
def urlopen(self, url, timeout = 30, data = None, headers = None, files = None, show_error = True):
|
||||||
url = urllib2.quote(ss(url), safe = "%/:=&?~#+!$,;'@()*[]")
|
url = urllib2.quote(ss(url), safe = "%/:=&?~#+!$,;'@()*[]")
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ class Renamer(Plugin):
|
|||||||
destination = to_folder
|
destination = to_folder
|
||||||
category_label = ''
|
category_label = ''
|
||||||
|
|
||||||
if media.get('category_id'):
|
if media.get('category_id') and media.get('category_id') != '-1':
|
||||||
try:
|
try:
|
||||||
category = db.get('id', media['category_id'])
|
category = db.get('id', media['category_id'])
|
||||||
category_label = category['label']
|
category_label = category['label']
|
||||||
@@ -823,25 +823,6 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
|||||||
|
|
||||||
return string
|
return string
|
||||||
|
|
||||||
def deleteEmptyFolder(self, folder, show_error = True):
|
|
||||||
folder = sp(folder)
|
|
||||||
|
|
||||||
loge = log.error if show_error else log.debug
|
|
||||||
for root, dirs, files in scandir.walk(folder):
|
|
||||||
|
|
||||||
for dir_name in dirs:
|
|
||||||
full_path = os.path.join(root, dir_name)
|
|
||||||
if len(os.listdir(full_path)) == 0:
|
|
||||||
try:
|
|
||||||
os.rmdir(full_path)
|
|
||||||
except:
|
|
||||||
loge('Couldn\'t remove empty directory %s: %s', (full_path, traceback.format_exc()))
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.rmdir(folder)
|
|
||||||
except:
|
|
||||||
loge('Couldn\'t remove empty directory %s: %s', (folder, traceback.format_exc()))
|
|
||||||
|
|
||||||
def checkSnatched(self, fire_scan = True):
|
def checkSnatched(self, fire_scan = True):
|
||||||
|
|
||||||
if self.checking_snatched:
|
if self.checking_snatched:
|
||||||
@@ -1055,7 +1036,7 @@ Remove it if you want it to be renamed (again, or at least let it try again)
|
|||||||
|
|
||||||
if release_download and release_download.get('id'):
|
if release_download and release_download.get('id'):
|
||||||
try:
|
try:
|
||||||
rls = db.get('release_download', '%s_%s' % (release_download.get('downloader'), release_download.get('id')), with_doc = True)['doc']
|
rls = db.get('release_download', '%s-%s' % (release_download.get('downloader'), release_download.get('id')), with_doc = True)['doc']
|
||||||
except:
|
except:
|
||||||
log.error('Download ID %s from downloader %s not found in releases', (release_download.get('id'), release_download.get('downloader')))
|
log.error('Download ID %s from downloader %s not found in releases', (release_download.get('id'), release_download.get('downloader')))
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user