You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.7 KiB
83 lines
2.7 KiB
from couchpotato import get_session
|
|
from couchpotato.api import addApiView
|
|
from couchpotato.core.event import fireEvent, addEvent, fireEventAsync
|
|
from couchpotato.core.helpers.request import jsonified, getParams
|
|
from couchpotato.core.logger import CPLog
|
|
from couchpotato.core.plugins.base import Plugin
|
|
from couchpotato.core.settings.model import File
|
|
from couchpotato.environment import Env
|
|
import os
|
|
import time
|
|
|
|
|
|
log = CPLog(__name__)
|
|
|
|
class Manage(Plugin):
|
|
|
|
def __init__(self):
|
|
|
|
fireEvent('scheduler.interval', identifier = 'manage.update_library', handle = self.updateLibrary, hours = 2)
|
|
|
|
addEvent('manage.update', self.updateLibrary)
|
|
addApiView('manage.update', self.updateLibraryView, docs = {
|
|
'desc': 'Update the library by scanning for new movies',
|
|
'params': {
|
|
'full': {'desc': 'Do a full update or just recently changed/added movies.'},
|
|
}
|
|
})
|
|
|
|
if not Env.get('dev'):
|
|
addEvent('app.load', self.updateLibrary)
|
|
|
|
def updateLibraryView(self):
|
|
|
|
params = getParams()
|
|
|
|
fireEventAsync('manage.update', full = params.get('full', True))
|
|
|
|
return jsonified({
|
|
'success': True
|
|
})
|
|
|
|
|
|
def updateLibrary(self, full = True):
|
|
last_update = float(Env.prop('manage.last_update'))
|
|
|
|
if self.isDisabled() or (last_update > time.time() - 20):
|
|
return
|
|
|
|
directories = self.directories()
|
|
added_identifiers = []
|
|
|
|
for directory in directories:
|
|
|
|
if not os.path.isdir(directory):
|
|
if len(directory) > 0:
|
|
log.error('Directory doesn\'t exist: %s' % directory)
|
|
continue
|
|
|
|
log.info('Updating manage library: %s' % directory)
|
|
identifiers = fireEvent('scanner.folder', folder = directory, newer_than = last_update, single = True)
|
|
added_identifiers.extend(identifiers)
|
|
|
|
# Break if CP wants to shut down
|
|
if self.shuttingDown():
|
|
break
|
|
|
|
# If cleanup option is enabled, remove offline files from database
|
|
if self.conf('cleanup') and full and not self.shuttingDown():
|
|
|
|
# Get movies with done status
|
|
done_movies = fireEvent('movie.list', status = 'done', single = True)
|
|
|
|
for done_movie in done_movies:
|
|
if done_movie['library']['identifier'] not in added_identifiers:
|
|
fireEvent('movie.delete', movie_id = done_movie['id'])
|
|
|
|
Env.prop('manage.last_update', time.time())
|
|
|
|
def directories(self):
|
|
try:
|
|
return self.conf('library', default = '').split('::')
|
|
except:
|
|
return []
|
|
|