diff options
Diffstat (limited to 'PodWeb.py')
-rwxr-xr-x | PodWeb.py | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/PodWeb.py b/PodWeb.py index 77fd9bf..3974192 100755 --- a/PodWeb.py +++ b/PodWeb.py @@ -152,6 +152,7 @@ class PodWeb: "downloads" ( "guid" TEXT NOT NULL UNIQUE, "podcast_url" TEXT NOT NULL, + "mime_type" TEXT NOT NULL, "filepath" TEXT NOT NULL UNIQUE, PRIMARY KEY("guid","podcast_url"), FOREIGN KEY("guid") REFERENCES "episodes"("guid") @@ -275,11 +276,15 @@ class PodWeb: new_feed.update({"category": category}) self.servers.append(new_feed) self._update_serverlist() + self._sync_episodes(feedurl, parsed=parsed) - def _sync_episodes(self, feedurl: str, min_size: bool = True) -> None: + def _sync_episodes( + self, feedurl: str, min_size: bool = True, parsed: dict | None = None + ) -> None: """syncs the available episodes for download for the given feedurl""" feedurl = podcastparser.normalize_feed_url(feedurl) - parsed = podcastparser.parse(feedurl, urllib.request.urlopen(feedurl)) + if parsed == None: + parsed = podcastparser.parse(feedurl, urllib.request.urlopen(feedurl)) if parsed.get("newLocation") != None: new_feedurl = podcastparser.normalize_feed_url(parsed.get("newLocation")) for i in self.servers: @@ -351,7 +356,17 @@ class PodWeb: {"GUID": i}, ) - def download_episode(self, guid: str) -> None: + def download_episode(self, guid: str, overwrite: bool = False) -> None: + response = self.data.execute( + """ + SELECT COUNT(1) + FROM "downloads" + WHERE guid = :GUID; + """, + {"GUID": guid}, + ) + if response.fetchone()[0] == 1 and not overwrite: + return None response = self.data.execute( """ SELECT "url","podcast_url","title","rowid" @@ -374,8 +389,9 @@ class PodWeb: self._sync_episodes(feedurl) audio_response = urllib.request.urlopen(request_obj) audio_data = audio_response.read() + mime_type = audio_response.info().get_content_type() podcast = next(iter([i for i in self.servers if i["url"] == feedurl])) - filename = f"{rowid}.{guid}.{self.safe_filename(title)}.mp3" + filename = f"{rowid:09}.{guid}.{self.safe_filename(title)}.mp3" filepath = os.path.join(options["downloadlocation"], podcast["name"]) if not os.path.exists(filepath): os.makedirs(filepath) @@ -389,10 +405,16 @@ class PodWeb: VALUES ( :GUID, :PODCAST_URL, + :MIME_TYPE, :FILEPATH ); """, - {"GUID": guid, "PODCAST_URL": feedurl, "FILEPATH": filepath}, + { + "GUID": guid, + "PODCAST_URL": feedurl, + "MIME_TYPE": mime_type, + "FILEPATH": filepath, + }, ) self.con.commit() |