Skip to content

Commit b653308

Browse files
author
E.S. Rosenberg a.k.a. Keeper of the Keys
committed
Improved handling of cover/art filenames, functions now behave the same.
Dropped 'folder.ext' in favor of sha512 hash of url when no filename is available.
1 parent b369ec4 commit b653308

File tree

2 files changed

+19
-41
lines changed

2 files changed

+19
-41
lines changed

src/gpodder/coverart.py

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -88,27 +88,10 @@ def get_cover(self, podcast, download=False, episode=None):
8888
try:
8989
extension = None
9090

91-
fname, ext = os.path.splitext(filename)
92-
93-
# Check if an extension is part of the filename and that it matches the filetype
94-
if ext:
95-
ext_unchanged = ext
96-
# Assume last part of filename parts is extension
97-
ext = ext.lower()
98-
# Deal with alternative extensions for supported format,
99-
# should more cases need to be added a mapping dictionary can be created.
100-
if ext == '.jpeg':
101-
ext = '.jpg'
102-
if ext in self.SUPPORTED_EXTENSIONS:
103-
if self.SUPPORTED_EXTENSIONS[ext](data):
104-
filename = fname
105-
extension = ext_unchanged
106-
# Filename did not include an extension or the extension did not match the filetype
107-
if not extension:
108-
for filetype, check in list(self.SUPPORTED_EXTENSIONS.items()):
109-
if check(data):
110-
extension = filetype
111-
break
91+
for filetype, check in list(self.SUPPORTED_EXTENSIONS.items()):
92+
if check(data):
93+
extension = filetype
94+
break
11295

11396
if not extension:
11497
msg = 'Unknown file type: %s (%r)' % (cover_url, data[:6])

src/gpodder/model.py

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ class __minidb_defaults__:
151151
current_position = 0
152152
current_position_updated = 0
153153
last_playback = 0
154+
episode_art_url = ''
154155

155156
def __init__(self, channel):
156157
self._parent = channel
@@ -468,12 +469,10 @@ def update_from_dict(self, episode_dict):
468469
@property
469470
def art_file(self):
470471
if self.episode_art_url:
471-
filename = self.guid
472-
try:
473-
url = urlparse(self.episode_art_url)
474-
filename = os.path.basename(url.path)
475-
except Exception:
476-
logger.debug('urlparse failed for episode_art_url: %s', self.episode_art_url)
472+
filename, extension = util.filename_from_url(self.episode_art_url)
473+
474+
if not filename:
475+
filename = hashlib.sha512(self.episode_art_url.encode('utf-8')).hexdigest()
477476

478477
return os.path.join(self.podcast.save_dir, filename)
479478
return None
@@ -569,16 +568,14 @@ def check_download_folder(self):
569568

570569
known_files.add(filename)
571570

572-
if self.cover_file != 'folder':
573-
known_files.add(os.path.join(self.save_dir, self.cover_file))
574-
else:
575-
known_files.update(os.path.join(self.save_dir, 'folder' + ext)
576-
for ext in coverart.CoverDownloader.EXTENSIONS)
571+
known_files.update(os.path.join(self.cover_file + ext)
572+
for ext in coverart.CoverDownloader.EXTENSIONS)
577573

578574
for episode in self.episodes:
579575
filename = episode.art_file
580576
if filename:
581-
known_files.add(os.path.join(self.save_dir, filename))
577+
known_files.update(os.path.join(episode.art_file + ext)
578+
for ext in coverart.CoverDownloader.EXTENSIONS)
582579

583580
existing_files = {filename for filename in
584581
glob.glob(os.path.join(self.save_dir, '*'))
@@ -949,14 +946,12 @@ def remove_downloaded(self):
949946

950947
@property
951948
def cover_file(self):
952-
filename = 'folder'
953-
try:
954-
url = urlparse(self.cover_url)
955-
filename = os.path.basename(url.path)
956-
except:
957-
logger.debug('urlparse failed for cover_url: %s', self.cover_url)
958-
959-
return os.path.join(self.save_dir, filename)
949+
if self.cover_url:
950+
filename, extension = util.filename_from_url(self.cover_url)
951+
if not filename:
952+
filename = hashlib.sha512(self.cover_url.encode('utf-8')).hexdigest()
953+
return os.path.join(self.save_dir, filename)
954+
return None
960955

961956

962957
class Model(object):

0 commit comments

Comments
 (0)