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__":
c5d04c5adab21'>43bddf62d ^
11b695875 ^

fecad72e0 ^

25e0c26a9 ^
bb1e87ce4 ^
fecad72e0 ^


11b695875 ^
bb1e87ce4 ^
fecad72e0 ^
d68782cd3 ^

fecad72e0 ^
3294cb10a ^
fecad72e0 ^

e3d097c4e ^
fecad72e0 ^
d68782cd3 ^
f52fd8785 ^
d68782cd3 ^
f52fd8785 ^
d68782cd3 ^
4b94aba6d ^

25e0c26a9 ^





1dd9ec85b ^
f52fd8785 ^
d68782cd3 ^








1dd9ec85b ^
f52fd8785 ^
d68782cd3 ^






f52fd8785 ^

d68782cd3 ^



1dd9ec85b ^
d68782cd3 ^




1dd9ec85b ^

43bddf62d ^
fecad72e0 ^














25e0c26a9 ^


fecad72e0 ^
25e0c26a9 ^





fecad72e0 ^
25e0c26a9 ^

f52fd8785 ^
25e0c26a9 ^
fecad72e0 ^
25e0c26a9 ^





fecad72e0 ^



25e0c26a9 ^
fecad72e0 ^

25e0c26a9 ^
f52fd8785 ^
fecad72e0 ^
25e0c26a9 ^

fecad72e0 ^
25e0c26a9 ^

fecad72e0 ^
43bddf62d ^
25e0c26a9 ^
f52fd8785 ^
25e0c26a9 ^
fecad72e0 ^
25e0c26a9 ^

fecad72e0 ^
25e0c26a9 ^
43bddf62d ^
fecad72e0 ^
25e0c26a9 ^

fecad72e0 ^

25e0c26a9 ^

f52fd8785 ^
25e0c26a9 ^
fecad72e0 ^
25e0c26a9 ^

fecad72e0 ^
25e0c26a9 ^
43bddf62d ^
25e0c26a9 ^
fecad72e0 ^
25e0c26a9 ^

fecad72e0 ^
25e0c26a9 ^

fecad72e0 ^
25e0c26a9 ^
fecad72e0 ^
25e0c26a9 ^
d68782cd3 ^
32109a786 ^
bebeee46d ^





















fecad72e0 ^

bebeee46d ^
fecad72e0 ^
bebeee46d ^

25e0c26a9 ^
bebeee46d ^


fecad72e0 ^
bebeee46d ^
fecad72e0 ^
bebeee46d ^
fecad72e0 ^
bebeee46d ^
fecad72e0 ^

bebeee46d ^



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247