extract thumbnail with overwrite for modified files

This commit is contained in:
mungai-njoroge
2023-07-19 18:06:58 +03:00
parent 18f6593666
commit 8b895f5efb
3 changed files with 40 additions and 15 deletions
+26 -9
View File
@@ -77,12 +77,14 @@ class Populate:
for _dir in dirs_to_scan:
files = files.union(run_fast_scandir(_dir, full=True)[1])
unmodified = self.remove_modified(tracks)
unmodified, modified_tracks = self.remove_modified(tracks)
untagged = files - unmodified
if len(untagged) != 0:
self.tag_untagged(untagged, key)
self.extract_thumb_with_overwrite(modified_tracks)
ProcessTrackThumbnails()
ProcessAlbumColors()
ProcessArtistColors()
@@ -116,24 +118,26 @@ class Populate:
since they were added to the database.
"""
unmodified = set()
modified = set()
unmodified_paths = set()
modified_tracks: list[Track] = []
modified_paths = set()
for track in tracks:
try:
if track.last_mod == os.path.getmtime(track.filepath):
unmodified.add(track.filepath)
unmodified_paths.add(track.filepath)
continue
except (FileNotFoundError, OSError) as e:
TrackStore.remove_track_obj(track)
remove_tracks_by_filepaths(track.filepath)
modified.add(track.filepath)
modified_paths.add(track.filepath)
modified_tracks.append(track)
TrackStore.remove_tracks_by_filepaths(modified)
remove_tracks_by_filepaths(modified)
TrackStore.remove_tracks_by_filepaths(modified_paths)
remove_tracks_by_filepaths(modified_paths)
return unmodified
return unmodified_paths, modified_tracks
@staticmethod
def tag_untagged(untagged: set[str], key: str):
@@ -178,6 +182,19 @@ class Populate:
log.info("Added %s/%s tracks", tagged_count, len(untagged))
@staticmethod
def extract_thumb_with_overwrite(tracks: list[Track]):
"""
Extracts the thumbnail from a list of filepaths,
overwriting the existing thumbnail if it exists,
for modified files.
"""
for track in tracks:
try:
extract_thumb(track.filepath, track.image, overwrite=True)
except FileNotFoundError:
continue
def get_image(album: Album):
"""
@@ -259,7 +276,7 @@ class FetchSimilarArtistsLastFM:
tqdm(
pool.imap_unordered(save_similar_artists, artists),
total=len(artists),
desc="Downloading similar artists",
desc="Fetching similar artists",
)
)
+13 -5
View File
@@ -24,9 +24,10 @@ def parse_album_art(filepath: str):
return None
def extract_thumb(filepath: str, webp_path: str) -> bool:
def extract_thumb(filepath: str, webp_path: str, overwrite=False) -> bool:
"""
Extracts the thumbnail from an audio file. Returns the path to the thumbnail.
Extracts the thumbnail from an audio file.
Returns the path to the thumbnail.
"""
original_img_path = os.path.join(Paths.get_original_thumb_path(), webp_path)
lg_img_path = os.path.join(Paths.get_lg_thumb_path(), webp_path)
@@ -40,7 +41,7 @@ def extract_thumb(filepath: str, webp_path: str) -> bool:
img.resize((tsize, tsize), Image.ANTIALIAS).save(lg_img_path, "webp")
img.resize((sm_tsize, sm_tsize), Image.ANTIALIAS).save(sm_img_path, "webp")
if os.path.exists(lg_img_path):
if not overwrite and os.path.exists(lg_img_path):
img_size = os.path.getsize(lg_img_path)
if img_size > 0:
@@ -67,7 +68,10 @@ def extract_thumb(filepath: str, webp_path: str) -> bool:
return False
def extract_date(date_str: str | None) -> int | None:
def parse_date(date_str: str | None) -> int | None:
"""
Extracts the date from a string and returns a timestamp.
"""
try:
date = pendulum.parse(date_str, strict=False)
return int(date.timestamp())
@@ -76,6 +80,10 @@ def extract_date(date_str: str | None) -> int | None:
def get_tags(filepath: str):
"""
Returns the tags for a given audio file.
"""
filetype = filepath.split(".")[-1]
filename = (filepath.split("/")[-1]).replace(f".{filetype}", "")
@@ -149,7 +157,7 @@ def get_tags(filepath: str):
tags.image = f"{tags.albumhash}.webp"
tags.folder = win_replace_slash(os.path.dirname(filepath))
tags.date = extract_date(tags.year) or int(last_mod)
tags.date = parse_date(tags.year) or int(last_mod)
tags.filepath = win_replace_slash(filepath)
tags.filetype = filetype
tags.last_mod = last_mod
+1 -1
View File
@@ -184,7 +184,7 @@ def add_track(filepath: str) -> None:
if not ArtistStore.artist_exists(artist.artisthash):
ArtistStore.add_artist(Artist(artist.name))
extract_thumb(filepath, track.image)
extract_thumb(filepath, track.image, overwrite=True)
def remove_track(filepath: str) -> None: