diff options
author | ComradeCrow <comradecrow@vivaldi.net> | 2025-03-28 12:53:12 -0700 |
---|---|---|
committer | ComradeCrow <comradecrow@vivaldi.net> | 2025-03-28 12:53:12 -0700 |
commit | 69d187c002e13c6f1626d7e8e93d22ab90d20011 (patch) | |
tree | 4eda6da3f59a4cfba5c5a3af46ba3c163911d97e | |
parent | cd3fdeebb206e050066a087b7b2eeca5ca37efb4 (diff) | |
download | podweb-69d187c002e13c6f1626d7e8e93d22ab90d20011.tar.gz |
working on fetching
Added a progress bar and broke fetching. Need a get.
-rwxr-xr-x | PodWeb.py | 133 |
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__": |