mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-21 07:04:02 +00:00
Collection: reduce code redundancy
Most of the code is shared between add and remove actions
This commit is contained in:
@@ -30,6 +30,8 @@ user_collections = {}
|
||||
|
||||
|
||||
class Collection(QtCore.QObject):
|
||||
COLLECTION_ADD = 1
|
||||
COLLECTION_REMOVE = 2
|
||||
|
||||
def __init__(self, collection_id, name, size):
|
||||
self.id = collection_id
|
||||
@@ -37,66 +39,52 @@ class Collection(QtCore.QObject):
|
||||
self.pending = set()
|
||||
self.size = int(size)
|
||||
self.releases = set()
|
||||
mb_api = self.tagger.mb_api
|
||||
self.api_action = {
|
||||
self.COLLECTION_ADD: mb_api.put_to_collection,
|
||||
self.COLLECTION_REMOVE: mb_api.delete_from_collection,
|
||||
}
|
||||
|
||||
def __repr__(self):
|
||||
return '<Collection %s (%s)>' % (self.name, self.id)
|
||||
|
||||
def add_releases(self, ids, callback):
|
||||
ids = ids - self.pending
|
||||
def _modify(self, kind, ids, callback):
|
||||
ids -= self.pending
|
||||
if ids:
|
||||
self.pending.update(ids)
|
||||
self.tagger.mb_api.put_to_collection(self.id, list(ids),
|
||||
partial(self._add_finished, ids, callback))
|
||||
self.pending |= ids
|
||||
when_done = partial(self._finished, kind, ids, callback)
|
||||
self.api_action[kind](self.id, list(ids), when_done)
|
||||
|
||||
def add_releases(self, ids, callback):
|
||||
self._modify(self.COLLECTION_ADD, ids, callback)
|
||||
|
||||
def remove_releases(self, ids, callback):
|
||||
ids = ids - self.pending
|
||||
if ids:
|
||||
self.pending.update(ids)
|
||||
self.tagger.mb_api.delete_from_collection(self.id, list(ids),
|
||||
partial(self._remove_finished, ids, callback))
|
||||
self._modify(self.COLLECTION_REMOVE, ids, callback)
|
||||
|
||||
def _add_finished(self, ids, callback, document, reply, error):
|
||||
self.pending.difference_update(ids)
|
||||
def _finished(self, kind, ids, callback, document, reply, error):
|
||||
self.pending -= ids
|
||||
if not error:
|
||||
count = len(ids)
|
||||
self.releases.update(ids)
|
||||
self.size += count
|
||||
if kind == self.COLLECTION_ADD:
|
||||
self.releases |= ids
|
||||
self.size += count
|
||||
status_msg = ngettext(
|
||||
'Added %(count)i release to collection "%(name)s"',
|
||||
'Added %(count)i releases to collection "%(name)s"',
|
||||
count)
|
||||
debug_msg = 'Added %(count)i releases to collection "%(name)s"'
|
||||
else:
|
||||
self.releases -= ids
|
||||
self.size -= count
|
||||
status_msg = ngettext(
|
||||
'Removed %(count)i release from collection "%(name)s"',
|
||||
'Removed %(count)i releases from collection "%(name)s"',
|
||||
count)
|
||||
debug_msg = 'Removed %(count)i releases from collection "%(name)s"'
|
||||
callback()
|
||||
mparms = {
|
||||
'count': count,
|
||||
'name': self.name
|
||||
}
|
||||
log.debug('Added %(count)i releases to collection "%(name)s"' % mparms)
|
||||
self.tagger.window.set_statusbar_message(
|
||||
ngettext('Added %(count)i release to collection "%(name)s"',
|
||||
'Added %(count)i releases to collection "%(name)s"',
|
||||
count),
|
||||
mparms,
|
||||
translate=None,
|
||||
echo=None
|
||||
)
|
||||
|
||||
def _remove_finished(self, ids, callback, document, reply, error):
|
||||
self.pending.difference_update(ids)
|
||||
if not error:
|
||||
count = len(ids)
|
||||
self.releases.difference_update(ids)
|
||||
self.size -= count
|
||||
callback()
|
||||
mparms = {
|
||||
'count': count,
|
||||
'name': self.name
|
||||
}
|
||||
log.debug('Removed %(count)i releases from collection "%(name)s"' %
|
||||
mparms)
|
||||
self.tagger.window.set_statusbar_message(
|
||||
ngettext('Removed %(count)i release from collection "%(name)s"',
|
||||
'Removed %(count)i releases from collection "%(name)s"',
|
||||
count),
|
||||
mparms,
|
||||
translate=None,
|
||||
echo=None
|
||||
)
|
||||
mparms = {'count': count, 'name': self.name}
|
||||
log.debug(debug_msg % mparms)
|
||||
self.tagger.window.set_statusbar_message(status_msg, mparms, translate=None, echo=None)
|
||||
|
||||
|
||||
def load_user_collections(callback=None):
|
||||
|
||||
Reference in New Issue
Block a user