mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-21 23:24:17 +00:00
Merge pull request #1135 from zas/file_changed_normal
Cleanup File state, tracknumber, discnumber properties
This commit is contained in:
@@ -88,6 +88,10 @@ class File(QtCore.QObject, Item):
|
||||
class PreserveTimesUtimeError(Exception):
|
||||
pass
|
||||
|
||||
# in order to significantly speed up performance, the number of pending
|
||||
# files is cached, set @state.setter
|
||||
num_pending_files = 0
|
||||
|
||||
def __init__(self, filename):
|
||||
super().__init__()
|
||||
self.filename = filename
|
||||
@@ -298,7 +302,7 @@ class File(QtCore.QObject, Item):
|
||||
old_filename = new_filename = self.filename
|
||||
if error is not None:
|
||||
self.error = str(error)
|
||||
self.set_state(File.ERROR, update=True)
|
||||
self.state = File.ERROR
|
||||
else:
|
||||
self.filename = new_filename = result
|
||||
self.base_filename = os.path.basename(new_filename)
|
||||
@@ -321,11 +325,13 @@ class File(QtCore.QObject, Item):
|
||||
for k, v in temp_info.items():
|
||||
self.orig_metadata[k] = v
|
||||
self.error = None
|
||||
# Force update to ensure file status icon changes immediately after save
|
||||
self.clear_pending(force_update=True)
|
||||
self.clear_pending()
|
||||
self._add_path_to_metadata(self.orig_metadata)
|
||||
self.metadata_images_changed.emit()
|
||||
|
||||
# Force update to ensure file status icon changes immediately after save
|
||||
self.update()
|
||||
|
||||
if self.state != File.REMOVED:
|
||||
del self.tagger.files[old_filename]
|
||||
self.tagger.files[new_filename] = self
|
||||
@@ -540,7 +546,7 @@ class File(QtCore.QObject, Item):
|
||||
orig_values = self.orig_metadata.getall(name)
|
||||
if orig_values != new_values:
|
||||
self.similarity = self.orig_metadata.compare(new_metadata)
|
||||
if self.state in (File.CHANGED, File.NORMAL):
|
||||
if self.state == File.NORMAL:
|
||||
self.state = File.CHANGED
|
||||
break
|
||||
else:
|
||||
@@ -549,12 +555,11 @@ class File(QtCore.QObject, Item):
|
||||
self.state = File.CHANGED
|
||||
else:
|
||||
self.similarity = 1.0
|
||||
if self.state in (File.CHANGED, File.NORMAL):
|
||||
if self.state == File.CHANGED:
|
||||
self.state = File.NORMAL
|
||||
if signal:
|
||||
log.debug("Updating file %r", self)
|
||||
if self.item:
|
||||
self.item.update()
|
||||
self.update_item()
|
||||
|
||||
def can_save(self):
|
||||
"""Return if this object can be saved."""
|
||||
@@ -604,25 +609,22 @@ class File(QtCore.QObject, Item):
|
||||
metadata['~filename'] = filename
|
||||
metadata['~extension'] = extension.lower()[1:]
|
||||
|
||||
def get_state(self):
|
||||
@property
|
||||
def state(self):
|
||||
"""Current state of the File object"""
|
||||
return self._state
|
||||
|
||||
# in order to significantly speed up performance, the number of pending
|
||||
# files is cached
|
||||
num_pending_files = 0
|
||||
|
||||
def set_state(self, state, update=False):
|
||||
if state != self._state:
|
||||
if state == File.PENDING:
|
||||
File.num_pending_files += 1
|
||||
elif self._state == File.PENDING:
|
||||
File.num_pending_files -= 1
|
||||
@state.setter
|
||||
def state(self, state):
|
||||
if state == self._state:
|
||||
return
|
||||
if state == File.PENDING:
|
||||
File.num_pending_files += 1
|
||||
self.tagger.tagger_stats_changed.emit()
|
||||
elif self._state == File.PENDING:
|
||||
File.num_pending_files -= 1
|
||||
self.tagger.tagger_stats_changed.emit()
|
||||
self._state = state
|
||||
if update:
|
||||
self.update()
|
||||
self.tagger.tagger_stats_changed.emit()
|
||||
|
||||
state = property(get_state, set_state)
|
||||
|
||||
def column(self, column):
|
||||
m = self.metadata
|
||||
@@ -717,28 +719,32 @@ class File(QtCore.QObject, Item):
|
||||
def set_pending(self):
|
||||
if self.state != File.REMOVED:
|
||||
self.state = File.PENDING
|
||||
self.update()
|
||||
self.update_item()
|
||||
|
||||
def clear_pending(self, force_update=False):
|
||||
def clear_pending(self):
|
||||
if self.state == File.PENDING:
|
||||
self.state = File.NORMAL
|
||||
self.update()
|
||||
elif force_update:
|
||||
self.update()
|
||||
self.update_item()
|
||||
|
||||
def update_item(self):
|
||||
if self.item:
|
||||
self.item.update()
|
||||
|
||||
def iterfiles(self, save=False):
|
||||
yield self
|
||||
|
||||
def _get_tracknumber(self):
|
||||
@property
|
||||
def tracknumber(self):
|
||||
"""The track number as an int."""
|
||||
try:
|
||||
return int(self.metadata["tracknumber"])
|
||||
except BaseException:
|
||||
return 0
|
||||
tracknumber = property(_get_tracknumber, doc="The track number as an int.")
|
||||
|
||||
def _get_discnumber(self):
|
||||
@property
|
||||
def discnumber(self):
|
||||
"""The disc number as an int."""
|
||||
try:
|
||||
return int(self.metadata["discnumber"])
|
||||
except BaseException:
|
||||
return 0
|
||||
discnumber = property(_get_discnumber, doc="The disc number as an int.")
|
||||
|
||||
Reference in New Issue
Block a user