Redo status update for media
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
from datetime import timedelta
|
||||
from operator import itemgetter
|
||||
import time
|
||||
import traceback
|
||||
from string import ascii_lowercase
|
||||
|
||||
@@ -452,20 +455,20 @@ class MediaPlugin(MediaBase):
|
||||
if not m['profile_id']:
|
||||
m['status'] = 'done'
|
||||
else:
|
||||
move_to_wanted = True
|
||||
m['status'] = 'active'
|
||||
|
||||
try:
|
||||
profile = db.get('id', m['profile_id'])
|
||||
media_releases = fireEvent('release.for_media', m['_id'], single = True)
|
||||
profile = db.get('id', m['profile_id'])
|
||||
media_releases = fireEvent('release.for_media', m['_id'], single = True)
|
||||
done_releases = [release for release in media_releases if release.get('status') == 'done']
|
||||
|
||||
for q_identifier in profile['qualities']:
|
||||
index = profile['qualities'].index(q_identifier)
|
||||
if done_releases:
|
||||
# Only look at latest added release
|
||||
release = sorted(done_releases, key = itemgetter('last_edit'), reverse = True)[0]
|
||||
|
||||
for release in media_releases:
|
||||
if q_identifier == release['quality'] and (release.get('status') == 'done' and profile['finish'][index]):
|
||||
move_to_wanted = False
|
||||
|
||||
m['status'] = 'active' if move_to_wanted else 'done'
|
||||
# Check if we are finished with the media
|
||||
if fireEvent('quality.isfinish', {'identifier': release['quality'], 'is_3d': release.get('is_3d', False)}, profile, timedelta(seconds = time.time() - release['last_edit']).days, single = True):
|
||||
m['status'] = 'done'
|
||||
except RecordNotFound:
|
||||
log.debug('Failed restatus: %s', traceback.format_exc())
|
||||
|
||||
@@ -473,7 +476,7 @@ class MediaPlugin(MediaBase):
|
||||
if previous_status != m['status']:
|
||||
db.update(m)
|
||||
|
||||
return True
|
||||
return m['status']
|
||||
except:
|
||||
log.error('Failed restatus: %s', traceback.format_exc())
|
||||
|
||||
|
||||
@@ -121,8 +121,19 @@ class MovieSearcher(SearcherBase, MovieTypeBase):
|
||||
|
||||
if not movie['profile_id'] or (movie['status'] == 'done' and not manual):
|
||||
log.debug('Movie doesn\'t have a profile or already done, assuming in manage tab.')
|
||||
fireEvent('media.restatus', movie['_id'])
|
||||
return
|
||||
|
||||
default_title = getTitle(movie)
|
||||
if not default_title:
|
||||
log.error('No proper info found for movie, removing it from library to stop it from causing more issues.')
|
||||
fireEvent('media.delete', movie['_id'], single = True)
|
||||
return
|
||||
|
||||
# Update media status and check if it is still not done (due to the stop searching after feature
|
||||
if fireEvent('media.restatus', movie['_id'], single = True) == 'done':
|
||||
log.debug('No better quality found, marking movie %s as done.', default_title)
|
||||
|
||||
pre_releases = fireEvent('quality.pre_releases', single = True)
|
||||
release_dates = fireEvent('movie.update_release_dates', movie['_id'], merge = True)
|
||||
|
||||
@@ -134,33 +145,9 @@ class MovieSearcher(SearcherBase, MovieTypeBase):
|
||||
ignore_eta = manual
|
||||
total_result_count = 0
|
||||
|
||||
default_title = getTitle(movie)
|
||||
if not default_title:
|
||||
log.error('No proper info found for movie, removing it from library to cause it from having more issues.')
|
||||
fireEvent('media.delete', movie['_id'], single = True)
|
||||
return
|
||||
|
||||
db = get_db()
|
||||
profile = db.get('id', movie['profile_id'])
|
||||
|
||||
# Find out if we need to stop searching because 'stop_after' is met. Compare with the newest release found.
|
||||
done_releases = [release for release in previous_releases if release.get('status') == 'done']
|
||||
|
||||
if done_releases:
|
||||
done_release = sorted(done_releases, key = itemgetter('last_edit'), reverse = True)[0]
|
||||
if fireEvent('quality.isfinish', {'identifier': done_release['quality'], 'is_3d': done_release.get('is_3d', False)}, profile, timedelta(seconds = time.time() - done_release['last_edit']).days, single = True):
|
||||
|
||||
log.debug('No better quality than %s%s found for %s days, marking movie %s as done.', \
|
||||
(done_release['quality'], ' 3D' if done_release.get('is_3d', False) else '', profile['stop_after'][0], default_title))
|
||||
|
||||
# Mark media done
|
||||
mdia = db.get('id', movie['_id'])
|
||||
mdia['status'] = 'done'
|
||||
mdia['last_edit'] = int(time.time())
|
||||
db.update(mdia)
|
||||
|
||||
return
|
||||
|
||||
fireEvent('notify.frontend', type = 'movie.searcher.started', data = {'_id': movie['_id']}, message = 'Searching for "%s"' % default_title)
|
||||
|
||||
# Ignore eta once every 7 days
|
||||
|
||||
@@ -100,7 +100,7 @@ class Release(Plugin):
|
||||
if rel['status'] in ['available']:
|
||||
self.delete(rel['_id'])
|
||||
|
||||
# Set all snatched and downloaded releases to ignored to make sure they are ignored when re-adding the move
|
||||
# Set all snatched and downloaded releases to ignored to make sure they are ignored when re-adding the media
|
||||
elif rel['status'] in ['snatched', 'downloaded']:
|
||||
self.updateStatus(rel['_id'], status = 'ignored')
|
||||
|
||||
|
||||
@@ -452,20 +452,15 @@ class Renamer(Plugin):
|
||||
try:
|
||||
profile = db.get('id', media['profile_id'])
|
||||
except:
|
||||
# Set profile to None as it does not exist anymore
|
||||
media['profile_id'] = None
|
||||
db.update(media)
|
||||
log.error('Error getting quality profile for %s: %s', (media_title, traceback.format_exc()))
|
||||
else:
|
||||
log.debug('Media has no quality profile: %s', media_title)
|
||||
|
||||
# Mark movie "done" once it's found the quality with the finish check
|
||||
if media.get('status') == 'active':
|
||||
if fireEvent('quality.isfinish', group['meta_data']['quality'], profile, single = True):
|
||||
mdia = db.get('id', media['_id'])
|
||||
mdia['status'] = 'done'
|
||||
mdia['last_edit'] = int(time.time())
|
||||
db.update(mdia)
|
||||
|
||||
# List movie on dashboard
|
||||
fireEvent('media.tag', media['_id'], 'recent', single = True)
|
||||
# # List movie on dashboard
|
||||
# fireEvent('media.tag', media['_id'], 'recent', single = True)
|
||||
|
||||
# Mark media for dashboard
|
||||
mark_as_recent = False
|
||||
|
||||
Reference in New Issue
Block a user