Split reload_metadata into separate functions by mimetype.
This commit is contained in:
parent
45d8809971
commit
e40c91a7cf
1 changed files with 47 additions and 23 deletions
|
@ -884,6 +884,48 @@ class Photo(ObjectBase):
|
||||||
new_path.assert_not_exists()
|
new_path.assert_not_exists()
|
||||||
self.rename_file(new_path.absolute_path, move=True)
|
self.rename_file(new_path.absolute_path, move=True)
|
||||||
|
|
||||||
|
def _reload_image_metadata(self):
|
||||||
|
try:
|
||||||
|
image = PIL.Image.open(self.real_path.absolute_path)
|
||||||
|
except (OSError, ValueError):
|
||||||
|
traceback.print_exc()
|
||||||
|
return
|
||||||
|
|
||||||
|
(self.width, self.height) = image.size
|
||||||
|
image.close()
|
||||||
|
|
||||||
|
def _reload_video_metadata(self):
|
||||||
|
if not constants.ffmpeg:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
probe = constants.ffmpeg.probe(self.real_path.absolute_path)
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
return
|
||||||
|
|
||||||
|
if not probe or not probe.video:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.width = probe.video.video_width
|
||||||
|
self.height = probe.video.video_height
|
||||||
|
self.duration = probe.format.duration or probe.video.duration
|
||||||
|
|
||||||
|
def _reload_audio_metadata(self):
|
||||||
|
if not constants.ffmpeg:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
probe = constants.ffmpeg.probe(self.real_path.absolute_path)
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
return
|
||||||
|
|
||||||
|
if not probe or not probe.audio:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.duration = probe.audio.duration
|
||||||
|
|
||||||
#@decorators.time_me
|
#@decorators.time_me
|
||||||
@decorators.required_feature('photo.reload_metadata')
|
@decorators.required_feature('photo.reload_metadata')
|
||||||
@decorators.transaction
|
@decorators.transaction
|
||||||
|
@ -909,31 +951,13 @@ class Photo(ObjectBase):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
elif self.simple_mimetype == 'image':
|
elif self.simple_mimetype == 'image':
|
||||||
try:
|
self._reload_image_metadata()
|
||||||
image = PIL.Image.open(self.real_path.absolute_path)
|
|
||||||
except (OSError, ValueError):
|
|
||||||
self.photodb.log.debug('Failed to read image data for %s', self)
|
|
||||||
else:
|
|
||||||
(self.width, self.height) = image.size
|
|
||||||
image.close()
|
|
||||||
|
|
||||||
elif self.simple_mimetype == 'video' and constants.ffmpeg:
|
elif self.simple_mimetype == 'video':
|
||||||
try:
|
self._reload_video_metadata()
|
||||||
probe = constants.ffmpeg.probe(self.real_path.absolute_path)
|
|
||||||
if probe and probe.video:
|
|
||||||
self.duration = probe.format.duration or probe.video.duration
|
|
||||||
self.width = probe.video.video_width
|
|
||||||
self.height = probe.video.video_height
|
|
||||||
except Exception:
|
|
||||||
traceback.print_exc()
|
|
||||||
|
|
||||||
elif self.simple_mimetype == 'audio' and constants.ffmpeg:
|
elif self.simple_mimetype == 'audio':
|
||||||
try:
|
self._reload_audio_metadata()
|
||||||
probe = constants.ffmpeg.probe(self.real_path.absolute_path)
|
|
||||||
if probe and probe.audio:
|
|
||||||
self.duration = probe.audio.duration
|
|
||||||
except Exception:
|
|
||||||
traceback.print_exc()
|
|
||||||
|
|
||||||
if self.width and self.height:
|
if self.width and self.height:
|
||||||
self.area = self.width * self.height
|
self.area = self.width * self.height
|
||||||
|
|
Loading…
Reference in a new issue