@@ -94,6 +94,7 @@ class EpisodeModelFields(minidb.Model):
9494 chapters = minidb .JSON
9595 subtitle = str
9696 description_html = str
97+ episode_art_url = str
9798
9899
99100class PodcastModelFields (minidb .Model ):
@@ -148,6 +149,7 @@ class __minidb_defaults__:
148149 current_position = 0
149150 current_position_updated = 0
150151 last_playback = 0
152+ episode_art_url = ''
151153
152154 def __init__ (self , channel ):
153155 self ._parent = channel
@@ -462,6 +464,17 @@ def update_from_dict(self, episode_dict):
462464 if k in episode_dict :
463465 setattr (self , k , episode_dict [k ])
464466
467+ @property
468+ def art_file (self ):
469+ if self .episode_art_url :
470+ filename , extension = util .filename_from_url (self .episode_art_url )
471+
472+ if not filename :
473+ filename = hashlib .sha512 (self .episode_art_url .encode ('utf-8' )).hexdigest ()
474+
475+ return os .path .join (self .podcast .save_dir , filename )
476+ return None
477+
465478
466479class PodcastChannel (PodcastModelFields , PodcastModelMixin ):
467480 _common_prefix = str
@@ -553,9 +566,15 @@ def check_download_folder(self):
553566
554567 known_files .add (filename )
555568
556- known_files .update (os .path .join (self .save_dir , 'folder' + ext )
569+ known_files .update (os .path .join (self .cover_file + ext )
557570 for ext in coverart .CoverDownloader .EXTENSIONS )
558571
572+ for episode in self .episodes :
573+ filename = episode .art_file
574+ if filename :
575+ known_files .update (os .path .join (episode .art_file + ext )
576+ for ext in coverart .CoverDownloader .EXTENSIONS )
577+
559578 existing_files = {filename for filename in
560579 glob .glob (os .path .join (self .save_dir , '*' ))
561580 if not filename .endswith ('.partial' )}
@@ -737,6 +756,10 @@ def _consume_custom_feed(self, custom_feed):
737756 # Add new episodes to episodes
738757 self .episodes .extend (new_episodes )
739758
759+ # Verify that all episode art is up-to-date
760+ for episode in self .episodes :
761+ self .model .core .cover_downloader .get_cover (self , download = True , episode = episode )
762+
740763 # Sort episodes by pubdate, descending
741764 self .episodes .sort (key = lambda e : e .published , reverse = True )
742765
@@ -753,8 +776,9 @@ def update(self):
753776 logger .info ('URL updated: {} -> {}' .format (old_url , self .url ))
754777 self ._consume_custom_feed (result )
755778
756- # Download the cover art if it's not yet available
757- self .model .core .cover_downloader .get_cover (self , download = True )
779+ # Download the cover art if it's not yet available, don't run if no save_dir was created yet.
780+ if self .save_dir :
781+ self .model .core .cover_downloader .get_cover (self , download = True )
758782
759783 self .save ()
760784
@@ -920,7 +944,12 @@ def remove_downloaded(self):
920944
921945 @property
922946 def cover_file (self ):
923- return os .path .join (self .save_dir , 'folder' )
947+ if self .cover_url :
948+ filename , extension = util .filename_from_url (self .cover_url )
949+ if not filename :
950+ filename = hashlib .sha512 (self .cover_url .encode ('utf-8' )).hexdigest ()
951+ return os .path .join (self .save_dir , filename )
952+ return None
924953
925954
926955class Model (object ):
0 commit comments