about summary refs log tree commit diff stats
path: root/PodWeb.py
diff options
context:
space:
mode:
authorComradeCrow <comradecrow@vivaldi.net>2025-03-07 12:49:36 -0800
committerComradeCrow <comradecrow@vivaldi.net>2025-03-07 12:49:36 -0800
commitdb7b16eceee0d3d1f32c12848497fbf28d966fc1 (patch)
treeea8a31f213ad683dbe1232e9d4a833feb8cfab10 /PodWeb.py
parent26ce625938e095fc7b139a2f44fdbd01255bf8ef (diff)
downloadpodweb-db7b16eceee0d3d1f32c12848497fbf28d966fc1.tar.gz
untested implementation of database
start to download and store information about podcast episodes
Diffstat (limited to 'PodWeb.py')
-rwxr-xr-xPodWeb.py66
1 files changed, 55 insertions, 11 deletions
diff --git a/PodWeb.py b/PodWeb.py
index 753e479..5adc86e 100755
--- a/PodWeb.py
+++ b/PodWeb.py
@@ -133,9 +133,10 @@ class PodWeb:
                         	"description"	TEXT,
                         	"img"	        TEXT,
                             "url"           TEXT,
-                            "season"        TEXT,
+                            "website"       TEXT,
+                            "season"        INTEGER,
                         	PRIMARY KEY("guid")
-        )"""
+                        )"""
         )
         self.data.execute(
             """CREATE TABLE IF NOT EXISTS "downloads" (
@@ -143,16 +144,14 @@ class PodWeb:
                             "filepath"	TEXT NOT NULL UNIQUE,
                         	PRIMARY KEY("guid"),
                             FOREIGN KEY("guid") REFERENCES "episodes"("guid")
-        )"""
+                        )"""
         )
         self.data.execute(
             """CREATE TABLE IF NOT EXISTS "podcasts" (
-            "url" TEXT NOT NULL UNIQUE,
-            "title" TEXT,
-            "image" TEXT,
-            "episodes" TEXT,
-            PRIMARY KEY("url)
-            )"""
+                            "url" TEXT NOT NULL UNIQUE,
+                            "episodes" TEXT,
+                            PRIMARY KEY("url)
+                        )"""
         )
 
     def _load_config(self) -> None:
@@ -237,8 +236,53 @@ class PodWeb:
         self.servers.append(new_feed)
         self._update_serverlist()
 
-    def sync_episodes(self) -> None:
-        pass
+    def sync_episodes(self, feedurl: str) -> None:
+        feedurl = podcastparser.normalize_feed_url(feedurl)
+        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:
+                if i["url"] == feedurl:
+                    i["url"] = new_feedurl
+                    feedurl = new_feedurl
+                    self._update_serverlist()
+                    break
+        for i in parsed["episodes"]:
+            enclosure_list = sorted(i["enclosures"], key=lambda d: d["file_size"])
+            mime = True
+            j = 0
+            size = len(enclosure_list)
+            while mime and j < size:
+                episode_url = enclosure_list[j]["url"]
+                if enclosure_list[j]["mime_type"] == "audio/mpeg":
+                    mime = False
+                else:
+                    ++j
+            self.data.execute(
+                """INSERT OR REPLACE INTO "episodes" VALUES (
+                        :GUID,
+                        :TITLE,
+                        :DESCRIPTION,
+                        :IMG,
+                        :URL,
+                        :WEBSITE,
+                        :SEASON
+                    );""",
+                {
+                    "GUID": i["guid"],
+                    "TITLE": i["title"],
+                    "DESCRIPTION": i["description"],
+                    "IMG": i["episode_art_url"],
+                    "URL": episode_url,
+                    "WEBSITE": i["link"],
+                    "SEASON": i["number"],
+                },
+            )
+            self.data.execute(
+                'UPDATE "podcasts" WHERE "url" = :URL SET "episodes" += :EPSTRING',
+                {"EPSTRING": f";{i['guid']}"},
+            )
+            self.con.commit()
 
     def import_opml(self, opml_path: str) -> None:
         body = xmlet.parse(source=opml_path).getroot().find("body")