about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorComradeCrow <comradecrow@vivaldi.net>2025-03-28 15:13:49 -0700
committerComradeCrow <comradecrow@vivaldi.net>2025-03-28 15:13:49 -0700
commit412d18a95da47c428ab65f4ba3b7a2553076d7f4 (patch)
treeabb722e14bf07bb74d514fe08b790e2b0b67160e
parent69d187c002e13c6f1626d7e8e93d22ab90d20011 (diff)
downloadpodweb-412d18a95da47c428ab65f4ba3b7a2553076d7f4.tar.gz
fix syncing
-rwxr-xr-xPodWeb.py70
1 files changed, 37 insertions, 33 deletions
diff --git a/PodWeb.py b/PodWeb.py
index d24f149..3cd87d3 100755
--- a/PodWeb.py
+++ b/PodWeb.py
@@ -16,8 +16,6 @@ import podcastparser
 from ruamel.yaml import YAML
 
 global options
-global serverlen
-serverlen = 0
 options = {
     "DEBUG": False,
     "serverlist": os.path.normpath(
@@ -231,12 +229,9 @@ 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"""
@@ -248,12 +243,10 @@ 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
@@ -308,12 +301,9 @@ class PodWeb:
                     break
         guid_list = []
         parsed["episodes"].reverse()
-        if progressbar:
-            bar = click.progressbar(
-                length=len(parsed["episodes"]),
-                label=f"Fetching {parsed['title']} episodes",
-            ).__enter_()
-        try:
+        with click.progressbar(
+            length=len(parsed["episodes"]), label=f"Fetching {parsed['title']} episodes"
+        ) if progressbar else nullcontext() as bar:
             number = 1
             for i in parsed["episodes"]:
                 enclosure_list = sorted(
@@ -347,10 +337,10 @@ class PodWeb:
                         "GUID": i["guid"],
                         "PODCAST_URL": feedurl,
                         "TITLE": i["title"],
-                        "DESCRIPTION": i["description"],
-                        "IMG": i["episode_art_url"],
+                        "DESCRIPTION": i.get("description"),
+                        "IMG": i.get("episode_art_url"),
                         "URL": episode_url,
-                        "WEBSITE": i["link"],
+                        "WEBSITE": i.get("link"),
                         "SEASON": i.get("number", -1),
                         "DELETED": False,
                         "NUMBER": number,
@@ -359,10 +349,8 @@ class PodWeb:
                 self.con.commit()
                 number += 1
                 guid_list.append(i["guid"])
-                bar.update(1)
-        finally:
-            if progressbar:
-                bar.__exit__()
+                if progressbar:
+                    bar.update(1)
         self.data.execute(
             """
                 SELECT \"guid\"
@@ -383,6 +371,22 @@ class PodWeb:
                     {"GUID": i},
                 )
 
+    def download_episode_index(
+        self, title: str, number: int, overwrite: bool = False
+    ) -> None:
+        response = self.data.execute(
+            """
+                SELECT "guid"
+                FROM "episodes"
+                WHERE title = :TITLE
+                AND number = :NUMBER;
+            """,
+            {"TITLE": title, "NUMBER": number},
+        )
+        guid = response.fetchone()[0]
+        if guid != None:
+            self.download_episode(guid, overwrite)
+
     def download_episode(self, guid: str, overwrite: bool = False) -> None:
         response = self.data.execute(
             """
@@ -583,25 +587,25 @@ def import_opml(obj, opml_file: str):
 
 @cli.command()
 @click.pass_obj
-@click.option("-i", "--index", type=click.IntRange(min=1, max=serverlen, clamp=False))
+def ls(obj):
+    for i in range(1, len(obj.servers) + 1):
+        click.echo(f"{i}: {obj.servers[i-1]['name']}")
+
+
+@cli.command()
+@click.pass_obj
+@click.option("-i", "--index", type=click.IntRange(min=1, max=None, clamp=False))
 def fetch(obj, index: str | None):
-    global serverlen
-    if serverlen == 0:
-        click.echo("OUUUUUUUUUUUUUUGH")
+    serverlen = len(obj.servers)
+    if index != None and index > serverlen:
+        click.echo(f"Podcast {index} does not exist.", err=True)
     elif index == None and serverlen != 1:
-        with click.progressbar(obj.servers, label="fetching episodes") as bar:
+        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']}")
+        obj._sync_episodes(obj.servers[index - 1]["url"], progressbar=True)
 
 
 if __name__ == "__main__":