about summary refs log tree commit diff stats
path: root/PodWeb.py
diff options
context:
space:
mode:
Diffstat (limited to 'PodWeb.py')
-rwxr-xr-xPodWeb.py32
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()