about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorComradeCrow <comradecrow@vivaldi.net>2025-03-28 12:53:12 -0700
committerComradeCrow <comradecrow@vivaldi.net>2025-03-28 12:53:12 -0700
commit69d187c002e13c6f1626d7e8e93d22ab90d20011 (patch)
tree4eda6da3f59a4cfba5c5a3af46ba3c163911d97e
parentcd3fdeebb206e050066a087b7b2eeca5ca37efb4 (diff)
downloadpodweb-69d187c002e13c6f1626d7e8e93d22ab90d20011.tar.gz
working on fetching
Added a progress bar and broke fetching.  Need a get.
-rwxr-xr-xPodWeb.py133
1 files changed, 85 insertions, 48 deletions
diff --git a/PodWeb.py b/PodWeb.py
index 954e71e..d24f149 100755
--- a/PodWeb.py
+++ b/PodWeb.py
@@ -16,6 +16,8 @@ import podcastparser
 from ruamel.yaml import YAML
 
 global options
+global serverlen
+serverlen = 0
 options = {
     "DEBUG": False,
     "serverlist": os.path.normpath(
@@ -229,9 +231,12 @@ class PodWeb:
         if do_return:
             return content
         if content:
+            global serverlen
             for i in content:
                 i["url"] = podcastparser.normalize_feed_url(i["url"])
             self.servers = content
+            serverlen = len(self.servers)
+            breakpoint()
 
     def _create_serverlist(self) -> None:
         """Checks if the serverlist does not exist and creates it if not"""
@@ -243,10 +248,12 @@ class PodWeb:
         """Overwrites the current serverlist with the stored serverlist"""
         serverlist = self._load_serverlist(True)
         if len(self.servers):
+            global serverlen
             with open(self.options["serverlist"], "w") as f:
                 if serverlist is None:
                     f.write(self.DEFAULT_SERVERLIST_HEADING)
                 yaml.dump(self.servers, f)
+            serverlen = len(self.servers)
 
     def add_podcast(
         self, feedurl: str, name=None, category=None, site=None, img=None
@@ -281,7 +288,11 @@ class PodWeb:
         self._sync_episodes(feedurl, parsed=parsed)
 
     def _sync_episodes(
-        self, feedurl: str, min_size: bool = True, parsed: dict | None = None
+        self,
+        feedurl: str,
+        min_size: bool = True,
+        parsed: dict | None = None,
+        progressbar: bool = False,
     ) -> None:
         """syncs the available episodes for download for the given feedurl"""
         feedurl = podcastparser.normalize_feed_url(feedurl)
@@ -297,51 +308,61 @@ class PodWeb:
                     break
         guid_list = []
         parsed["episodes"].reverse()
-        number = 1
-        for i in parsed["episodes"]:
-            enclosure_list = sorted(
-                i["enclosures"], key=lambda d: d["file_size"], reverse=min_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 += 1
-            self.data.execute(
-                """
-                    INSERT OR REPLACE INTO "episodes" VALUES (
-                        :GUID,
-                        :PODCAST_URL,
-                        :TITLE,
-                        :DESCRIPTION,
-                        :IMG,
-                        :URL,
-                        :WEBSITE,
-                        :SEASON,
-                        :DELETED,
-                        :NUMBER
-                    );
-                """,
-                {
-                    "GUID": i["guid"],
-                    "PODCAST_URL": feedurl,
-                    "TITLE": i["title"],
-                    "DESCRIPTION": i["description"],
-                    "IMG": i["episode_art_url"],
-                    "URL": episode_url,
-                    "WEBSITE": i["link"],
-                    "SEASON": i.get("number", -1),
-                    "DELETED": False,
-                    "NUMBER": number,
-                },
-            )
-            self.con.commit()
-            number += 1
-            guid_list.append(i["guid"])
+        if progressbar:
+            bar = click.progressbar(
+                length=len(parsed["episodes"]),
+                label=f"Fetching {parsed['title']} episodes",
+            ).__enter_()
+        try:
+            number = 1
+            for i in parsed["episodes"]:
+                enclosure_list = sorted(
+                    i["enclosures"], key=lambda d: d["file_size"], reverse=min_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 += 1
+                self.data.execute(
+                    """
+                        INSERT OR REPLACE INTO "episodes" VALUES (
+                            :GUID,
+                            :PODCAST_URL,
+                            :TITLE,
+                            :DESCRIPTION,
+                            :IMG,
+                            :URL,
+                            :WEBSITE,
+                            :SEASON,
+                            :DELETED,
+                            :NUMBER
+                        );
+                    """,
+                    {
+                        "GUID": i["guid"],
+                        "PODCAST_URL": feedurl,
+                        "TITLE": i["title"],
+                        "DESCRIPTION": i["description"],
+                        "IMG": i["episode_art_url"],
+                        "URL": episode_url,
+                        "WEBSITE": i["link"],
+                        "SEASON": i.get("number", -1),
+                        "DELETED": False,
+                        "NUMBER": number,
+                    },
+                )
+                self.con.commit()
+                number += 1
+                guid_list.append(i["guid"])
+                bar.update(1)
+        finally:
+            if progressbar:
+                bar.__exit__()
         self.data.execute(
             """
                 SELECT \"guid\"
@@ -562,9 +583,25 @@ def import_opml(obj, opml_file: str):
 
 @cli.command()
 @click.pass_obj
-@click.option("-i", "--index")
+@click.option("-i", "--index", type=click.IntRange(min=1, max=serverlen, clamp=False))
 def fetch(obj, index: str | None):
-    obj.fetch(index)
+    global serverlen
+    if serverlen == 0:
+        click.echo("OUUUUUUUUUUUUUUGH")
+    elif index == None and serverlen != 1:
+        with click.progressbar(obj.servers, label="fetching episodes") as bar:
+            for i in bar:
+                click.echo(i["name"])
+                obj._sync_episodes(i["url"])
+    else:
+        obj._sync_episodes(obj.servers[index - 1], progressbar=True)
+
+
+@cli.command()
+@click.pass_obj
+def list(obj):
+    for i in range(1, len(obj.servers) + 1):
+        click.echo(f"{i}: {obj.servers[i-1]['name']}")
 
 
 if __name__ == "__main__":