nosql
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from couchpotato import get_db
|
||||
from couchpotato.api import addApiView
|
||||
from couchpotato.core.event import fireEvent, addEvent, fireEventAsync
|
||||
from couchpotato.core.helpers.encoding import sp
|
||||
@@ -48,7 +49,6 @@ class Manage(Plugin):
|
||||
|
||||
if not Env.get('dev') and self.conf('startup_scan'):
|
||||
addEvent('app.load', self.updateLibraryQuick)
|
||||
addEvent('app.load', self.updateLibrary)
|
||||
|
||||
def getProgress(self, **kwargs):
|
||||
return {
|
||||
@@ -125,32 +125,34 @@ class Manage(Plugin):
|
||||
fireEvent('media.delete', media_id = done_movie['id'], delete_from = 'all')
|
||||
else:
|
||||
|
||||
releases = fireEvent('release.for_movie', id = done_movie.get('_id'), single = True)
|
||||
db = get_db()
|
||||
releases = list(db.run('release', 'for_media', done_movie.get('_id')))
|
||||
|
||||
for release in releases:
|
||||
if len(release.get('files', [])) > 0:
|
||||
for release_file in release.get('files', []):
|
||||
# Remove release not available anymore
|
||||
if not os.path.isfile(sp(release_file['path'])):
|
||||
fireEvent('release.clean', release['id'])
|
||||
break
|
||||
for file_type in release.get('files', {}):
|
||||
for release_file in release['files'][file_type]:
|
||||
# Remove release not available anymore
|
||||
if not os.path.isfile(sp(release_file)):
|
||||
fireEvent('release.clean', release['_id'])
|
||||
break
|
||||
|
||||
# Check if there are duplicate releases (different quality) use the last one, delete the rest
|
||||
if len(releases) > 1:
|
||||
used_files = {}
|
||||
for release in releases:
|
||||
for file_type in release.get('files', {}):
|
||||
for release_file in release['files'][file_type]:
|
||||
already_used = used_files.get(release_file)
|
||||
|
||||
for release_file in release.get('files', []):
|
||||
already_used = used_files.get(release_file['path'])
|
||||
|
||||
if already_used:
|
||||
if already_used < release['id']:
|
||||
fireEvent('release.delete', release['id'], single = True) # delete this one
|
||||
if already_used:
|
||||
if already_used.get('last_edit', 0) < release.get('last_edit', 0):
|
||||
fireEvent('release.delete', release['_id'], single = True) # delete current one
|
||||
else:
|
||||
fireEvent('release.delete', already_used['_id'], single = True) # delete previous one
|
||||
break
|
||||
else:
|
||||
fireEvent('release.delete', already_used, single = True) # delete previous one
|
||||
break
|
||||
else:
|
||||
used_files[release_file['path']] = release.get('id')
|
||||
used_files[release_file] = release
|
||||
del used_files
|
||||
|
||||
Env.prop('manage.last_update', time.time())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from hashlib import md5
|
||||
from CodernityDB.hash_index import HashIndex
|
||||
from CodernityDB.tree_index import TreeBasedIndex
|
||||
|
||||
|
||||
@@ -42,14 +43,13 @@ class ReleaseStatusIndex(TreeBasedIndex):
|
||||
return md5(data.get('status')).hexdigest(), {'media_id': data.get('media_id')}
|
||||
|
||||
|
||||
class ReleaseIDIndex(TreeBasedIndex):
|
||||
class ReleaseIDIndex(HashIndex):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs['key_format'] = '32s'
|
||||
super(ReleaseIDIndex, self).__init__(*args, **kwargs)
|
||||
|
||||
def make_key(self, key):
|
||||
print key
|
||||
return md5(key).hexdigest()
|
||||
|
||||
def make_key_value(self, data):
|
||||
|
||||
@@ -111,41 +111,41 @@ class Release(Plugin):
|
||||
try:
|
||||
db = get_db()
|
||||
|
||||
identifier = '%s.%s.%s' % (group['identifier'], group['meta_data'].get('audio', 'unknown'), group['meta_data']['quality']['identifier'])
|
||||
release_identifier = '%s.%s.%s' % (group['identifier'], group['meta_data'].get('audio', 'unknown'), group['meta_data']['quality']['identifier'])
|
||||
|
||||
# Add movie if it doesn't exist
|
||||
try:
|
||||
media = db.get('media', group['identifier'], with_doc = True)['doc']
|
||||
media['status'] = 'done'
|
||||
db.update(media)
|
||||
except:
|
||||
media = {
|
||||
'_t': 'media',
|
||||
media = fireEvent('movie.add', params = {
|
||||
'identifier': group['identifier'],
|
||||
'profile_id': None,
|
||||
'status': 'done'
|
||||
}
|
||||
m = db.insert(media)
|
||||
media.update(m)
|
||||
}, search_after = False, status = 'done', single = True)
|
||||
|
||||
# Add Release
|
||||
release = {
|
||||
'_t': 'release',
|
||||
'media_id': media['_id'],
|
||||
'identifier': identifier,
|
||||
'identifier': release_identifier,
|
||||
'quality': group['meta_data']['quality'].get('identifier'),
|
||||
'last_edit': int(time.time()),
|
||||
'status': 'done'
|
||||
}
|
||||
try:
|
||||
r = db.get('release_identifier', identifier, with_doc = True)['doc']
|
||||
release.update(r)
|
||||
db.update(release)
|
||||
r = db.get('release_identifier', release_identifier, with_doc = True)['doc']
|
||||
r['media_id'] = media['_id']
|
||||
except:
|
||||
r = db.insert(release)
|
||||
release.update(r)
|
||||
|
||||
# Add each file type
|
||||
# Update with ref and _id
|
||||
release.update({
|
||||
'_id': r['_id'],
|
||||
'_rev': r['_rev'],
|
||||
})
|
||||
|
||||
# Empty out empty file groups
|
||||
release['files'] = dict((k, v) for k, v in group['files'].items() if v)
|
||||
db.update(release)
|
||||
|
||||
fireEvent('media.restatus', media['_id'])
|
||||
|
||||
@@ -307,7 +307,7 @@ class Release(Plugin):
|
||||
|
||||
# Mark release as snatched
|
||||
if renamer_enabled:
|
||||
self.updateStatus(rls.id, status = snatched_status)
|
||||
self.updateStatus(rls.id, status = 'snatched')
|
||||
|
||||
# If renamer isn't used, mark media done if finished or release downloaded
|
||||
else:
|
||||
@@ -318,7 +318,7 @@ class Release(Plugin):
|
||||
log.info('Renamer disabled, marking media as finished: %s', log_movie)
|
||||
|
||||
# Mark release done
|
||||
self.updateStatus(rls.id, status = done_status)
|
||||
self.updateStatus(rls.id, status = 'done')
|
||||
|
||||
# Mark media done
|
||||
mdia = db.query(Media).filter_by(id = media['id']).first()
|
||||
@@ -329,7 +329,7 @@ class Release(Plugin):
|
||||
return True
|
||||
|
||||
# Assume release downloaded
|
||||
self.updateStatus(rls.id, status = downloaded_status)
|
||||
self.updateStatus(rls.id, status = 'downloaded')
|
||||
|
||||
except:
|
||||
log.error('Failed storing download status: %s', traceback.format_exc())
|
||||
|
||||
@@ -472,14 +472,14 @@ class Renamer(Plugin):
|
||||
if release_download['rls_id'] == release.id:
|
||||
if release_download['status'] == 'completed':
|
||||
# Set the release to downloaded
|
||||
fireEvent('release.update_status', release.id, status = downloaded_status, single = True)
|
||||
fireEvent('release.update_status', release.id, status = 'downloaded', single = True)
|
||||
elif release_download['status'] == 'seeding':
|
||||
# Set the release to seeding
|
||||
fireEvent('release.update_status', release.id, status = seeding_status, single = True)
|
||||
fireEvent('release.update_status', release.id, status = 'seeding', single = True)
|
||||
|
||||
elif release.quality.id is group['meta_data']['quality']['id']:
|
||||
# Set the release to downloaded
|
||||
fireEvent('release.update_status', release.id, status = downloaded_status, single = True)
|
||||
fireEvent('release.update_status', release.id, status = 'downloaded', single = True)
|
||||
|
||||
# Remove leftover files
|
||||
if not remove_leftovers: # Don't remove anything
|
||||
|
||||
Reference in New Issue
Block a user