podflow 20250630__py3-none-any.whl → 20250703__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- podflow/__init__.py +2 -1
- podflow/httpfs/app_bottle.py +22 -1
- podflow/main_podcast.py +12 -19
- podflow/main_upload.py +1 -1
- podflow/templates/css/index.css +20 -0
- podflow/templates/index.html +5 -0
- podflow/upload/find_media_index.py +10 -0
- podflow/upload/login.py +6 -0
- podflow/upload/store_users_info.py +22 -0
- podflow/upload/update_upload.py +9 -3
- podflow/upload/upload_files.py +1 -8
- podflow/youtube/login.py +6 -1
- {podflow-20250630.dist-info → podflow-20250703.dist-info}/METADATA +2 -2
- {podflow-20250630.dist-info → podflow-20250703.dist-info}/RECORD +17 -15
- {podflow-20250630.dist-info → podflow-20250703.dist-info}/WHEEL +0 -0
- {podflow-20250630.dist-info → podflow-20250703.dist-info}/entry_points.txt +0 -0
- {podflow-20250630.dist-info → podflow-20250703.dist-info}/top_level.txt +0 -0
podflow/__init__.py
CHANGED
@@ -117,10 +117,11 @@ class Application_gVar:
|
|
117
117
|
self.make_up_file_format = {} # 补全缺失媒体字典
|
118
118
|
self.make_up_file_format_fail = {} # 补全缺失媒体失败字典
|
119
119
|
|
120
|
-
self.upload_original = [] #
|
120
|
+
self.upload_original = [] # 原始上传信息列表
|
121
121
|
self.upload_data = {} # 上传用户账号密码字典
|
122
122
|
self.upload_json = {} # 上传登陆账号密码字典
|
123
123
|
self.upload_stop = False # 上传停止布尔值
|
124
|
+
self.upload_message = [] # 上传用户媒体信息列表
|
124
125
|
|
125
126
|
self.shortcuts_url = {} # 输出至shortcut的url字典
|
126
127
|
|
podflow/httpfs/app_bottle.py
CHANGED
@@ -21,6 +21,7 @@ from podflow.upload.time_key import check_time_key
|
|
21
21
|
from podflow.basic.folder_build import folder_build
|
22
22
|
from podflow.httpfs.get_channelid import get_channelid
|
23
23
|
from podflow.basic.random_sequence import random_sequence
|
24
|
+
from podflow.upload.store_users_info import store_users_info
|
24
25
|
|
25
26
|
|
26
27
|
class bottle_app:
|
@@ -391,11 +392,23 @@ class bottle_app:
|
|
391
392
|
}
|
392
393
|
# 获取实际的文件句柄
|
393
394
|
uploadfile_obj = upload_file.file
|
395
|
+
# 去除临时文件模块
|
396
|
+
def close_file():
|
397
|
+
if (
|
398
|
+
upload_file
|
399
|
+
and hasattr(upload_file, "file")
|
400
|
+
and not upload_file.file.closed
|
401
|
+
):
|
402
|
+
try:
|
403
|
+
upload_file.file.close()
|
404
|
+
except Exception:
|
405
|
+
pass
|
394
406
|
# 判断文件是否完整
|
395
407
|
uploadfile_obj.seek(0) # 确保从文件开头计算哈希
|
396
408
|
uploadfile_hash = build_hash(uploadfile_obj)
|
397
409
|
if upload_hash != uploadfile_hash:
|
398
410
|
self.print_out("upload", 401)
|
411
|
+
close_file()
|
399
412
|
return {
|
400
413
|
"code": -5,
|
401
414
|
"message": "Incomplete File", # 文件不完整
|
@@ -418,6 +431,8 @@ class bottle_app:
|
|
418
431
|
original_file.seek(0)
|
419
432
|
if upload_hash == build_hash(original_file):
|
420
433
|
self.print_out("upload same", 200)
|
434
|
+
store_users_info(username,filename)
|
435
|
+
close_file()
|
421
436
|
return {
|
422
437
|
"code": 1,
|
423
438
|
"message": "The Same File Exists", # 相同文件已存在
|
@@ -437,6 +452,8 @@ class bottle_app:
|
|
437
452
|
) # 传递文件对象
|
438
453
|
# 打印成功信息并返回成功码
|
439
454
|
self.print_out("upload", 200)
|
455
|
+
store_users_info(username,filename)
|
456
|
+
close_file()
|
440
457
|
return {
|
441
458
|
"code": 0,
|
442
459
|
"message": "Upload Success", # 上传成功
|
@@ -458,7 +475,10 @@ class bottle_app:
|
|
458
475
|
and hasattr(upload_file, "file")
|
459
476
|
and not upload_file.file.closed
|
460
477
|
):
|
461
|
-
|
478
|
+
try:
|
479
|
+
upload_file.file.close()
|
480
|
+
except Exception:
|
481
|
+
pass
|
462
482
|
else:
|
463
483
|
num = 0
|
464
484
|
while True:
|
@@ -475,6 +495,7 @@ class bottle_app:
|
|
475
495
|
original_file.seek(0)
|
476
496
|
if upload_hash == build_hash(original_file):
|
477
497
|
self.print_out("upload same", 200)
|
498
|
+
store_users_info(username,filename)
|
478
499
|
return {
|
479
500
|
"code": 1,
|
480
501
|
"message": "The Same File Exists", # 相同文件已存在
|
podflow/main_podcast.py
CHANGED
@@ -72,17 +72,17 @@ def main_podcast():
|
|
72
72
|
# 初始化
|
73
73
|
build_original()
|
74
74
|
# http共享
|
75
|
-
port = gVar.config.get("port", 8000)
|
75
|
+
port = gVar.config.get("port", 8000) # 使用 .get 获取端口
|
76
76
|
hostip = "0.0.0.0"
|
77
77
|
|
78
|
-
if port_judge(hostip, port):
|
78
|
+
if port_judge(hostip, port): # 假设 port_judge 存在
|
79
79
|
# 设置路由 (确保此时 gVar.config 等已就绪)
|
80
|
-
bottle_app_instance.setup_routes(upload=False)
|
80
|
+
bottle_app_instance.setup_routes(upload=False) # 或者根据需要设置为 True
|
81
81
|
|
82
82
|
# 设置logname
|
83
83
|
bottle_app_instance.set_logname(
|
84
84
|
logname="httpfs.log",
|
85
|
-
http_fs=gVar.config.get("httpfs", False),
|
85
|
+
http_fs=gVar.config.get("httpfs", False), # 使用 .get
|
86
86
|
)
|
87
87
|
|
88
88
|
# 启动 CherryPy 服务器
|
@@ -99,7 +99,7 @@ def main_podcast():
|
|
99
99
|
"log.access_file": "", # 关闭访问日志
|
100
100
|
"log.error_file": "", # 关闭错误日志
|
101
101
|
# 添加线程池配置,对于长连接 (SSE) 可能有帮助
|
102
|
-
|
102
|
+
"server.thread_pool": 30, # 示例值,根据需要调整
|
103
103
|
}
|
104
104
|
}
|
105
105
|
)
|
@@ -122,7 +122,7 @@ def main_podcast():
|
|
122
122
|
gVar.server_process_print_flag[0] = "pause"
|
123
123
|
# 获取YouTube cookie
|
124
124
|
gVar.youtube_cookie = get_youtube_cookie(gVar.channelid_youtube_ids_original)
|
125
|
-
progress_update(0.01
|
125
|
+
progress_update(0.01, num=0.0049)
|
126
126
|
# 更新哔哩哔哩data
|
127
127
|
gVar.channelid_bilibili_ids, gVar.bilibili_data = get_bilibili_data(
|
128
128
|
gVar.channelid_bilibili_ids_original
|
@@ -131,7 +131,9 @@ def main_podcast():
|
|
131
131
|
# 恢复进程打印
|
132
132
|
bottle_app_instance.cherry_print()
|
133
133
|
# 获取原始xml字典和rss文本
|
134
|
-
gVar.xmls_original, gVar.hash_rss_original, gVar.xmls_original_fail
|
134
|
+
gVar.xmls_original, gVar.hash_rss_original, gVar.xmls_original_fail = (
|
135
|
+
get_original_rss()
|
136
|
+
)
|
135
137
|
progress_update(0.025, num=-0.0024)
|
136
138
|
# 暂停进程打印
|
137
139
|
gVar.server_process_print_flag[0] = "pause"
|
@@ -147,15 +149,10 @@ def main_podcast():
|
|
147
149
|
# 初始化原始上传信息
|
148
150
|
get_upload_original()
|
149
151
|
progress_update(0.04)
|
150
|
-
|
151
152
|
# 如果有上传服务器,则启动上传线程
|
152
153
|
if upload_url:
|
153
|
-
thread_upload = threading.Thread(
|
154
|
-
target=all_upload,
|
155
|
-
args=(upload_url,)
|
156
|
-
)
|
154
|
+
thread_upload = threading.Thread(target=all_upload, args=(upload_url,))
|
157
155
|
thread_upload.start()
|
158
|
-
|
159
156
|
# 更新Youtube和哔哩哔哩频道xml
|
160
157
|
update_youtube_bilibili_rss()
|
161
158
|
progress_update(0.1)
|
@@ -198,11 +195,9 @@ def main_podcast():
|
|
198
195
|
# 下载并构建YouTube和哔哩哔哩视频
|
199
196
|
download_and_build()
|
200
197
|
progress_update(0.8)
|
201
|
-
|
202
198
|
# 如果有上传服务器,则等待上传线程完成
|
203
199
|
if upload_url:
|
204
200
|
thread_upload.join()
|
205
|
-
|
206
201
|
# 添加新媒体至上传列表
|
207
202
|
add_upload()
|
208
203
|
progress_update(0.81, num=0.0049)
|
@@ -257,12 +252,10 @@ def main_podcast():
|
|
257
252
|
# 清理缓存文件
|
258
253
|
remove_flush(upload_url)
|
259
254
|
else:
|
260
|
-
|
261
255
|
# 如果没有更新内容,则停止上传线程
|
262
|
-
gVar.upload_stop = True
|
256
|
+
gVar.upload_stop = True
|
263
257
|
if upload_url:
|
264
258
|
thread_upload.join()
|
265
|
-
|
266
259
|
time_print("频道无更新内容")
|
267
260
|
# 清空变量内数据
|
268
261
|
gVar.channelid_youtube_ids_update.clear() # 需更新的YouTube频道字典
|
@@ -286,7 +279,7 @@ def main_podcast():
|
|
286
279
|
gVar.overall_rss = "" # 更新后的rss文本
|
287
280
|
gVar.make_up_file_format.clear() # 补全缺失媒体字典
|
288
281
|
gVar.make_up_file_format_fail.clear() # 补全缺失媒体失败字典
|
289
|
-
gVar.upload_original.clear() #
|
282
|
+
gVar.upload_original.clear() # 原始上传信息列表
|
290
283
|
# 将需要更新转为否
|
291
284
|
gVar.update_generate_rss = False
|
292
285
|
if parse.update_num != -1:
|
podflow/main_upload.py
CHANGED
podflow/templates/css/index.css
CHANGED
@@ -239,6 +239,20 @@ button:hover {
|
|
239
239
|
color: var(--button-hover);
|
240
240
|
}
|
241
241
|
|
242
|
+
/* 版本号样式 */
|
243
|
+
#version-info {
|
244
|
+
position: fixed; /* 固定定位,相对于视口 */
|
245
|
+
top: 10px; /* 距离底部 10px */
|
246
|
+
right: 10px; /* 距离右侧 10px */
|
247
|
+
font-size: 12px; /* 字体大小 */
|
248
|
+
color: var(--secondary-text); /* 使用定义的次要文本颜色 */
|
249
|
+
background-color: var(--bg-color); /* 背景颜色,确保在不同模式下可见 */
|
250
|
+
padding: 5px 8px; /* 内边距 */
|
251
|
+
border-radius: 5px; /* 圆角 */
|
252
|
+
z-index: 1001; /* 确保在其他内容之上 */
|
253
|
+
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* 轻微的阴影效果 */
|
254
|
+
}
|
255
|
+
|
242
256
|
/* 手机端优化 */
|
243
257
|
@media (max-width: 600px) {
|
244
258
|
#messageArea, textarea {
|
@@ -255,6 +269,12 @@ button:hover {
|
|
255
269
|
width: 100%;
|
256
270
|
overflow-x: hidden;
|
257
271
|
}
|
272
|
+
#version-info {
|
273
|
+
top: 5px; /* 在手机上可以更靠近底部 */
|
274
|
+
right: 5px; /* 在手机上可以更靠近右侧 */
|
275
|
+
font-size: 10px; /* 手机上字体可以更小 */
|
276
|
+
padding: 3px 6px;
|
277
|
+
}
|
258
278
|
}
|
259
279
|
.message {
|
260
280
|
padding: 0px;
|
podflow/templates/index.html
CHANGED
podflow/upload/login.py
CHANGED
@@ -20,6 +20,12 @@ def get_login():
|
|
20
20
|
gVar.upload_data = json.loads(upload_data)
|
21
21
|
except Exception:
|
22
22
|
file_save(gVar.upload_data, "upload_login.json", "channel_data")
|
23
|
+
try:
|
24
|
+
with open("channel_data/upload_message.json", "r") as file:
|
25
|
+
upload_message = file.read()
|
26
|
+
gVar.upload_message = json.loads(upload_message)
|
27
|
+
except Exception:
|
28
|
+
file_save(gVar.upload_message, "upload_message.json", "channel_data")
|
23
29
|
|
24
30
|
|
25
31
|
def create():
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# podflow/upload/store_users_info.py
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
from podflow import gVar
|
5
|
+
from podflow.basic.file_save import file_save
|
6
|
+
from podflow.upload.find_media_index import find_media_index
|
7
|
+
|
8
|
+
|
9
|
+
def store_users_info(username,filename):
|
10
|
+
index = find_media_index(gVar.upload_message, filename)
|
11
|
+
if index == -1:
|
12
|
+
gVar.upload_message.append(
|
13
|
+
{
|
14
|
+
"media_id": filename,
|
15
|
+
"users": [username]
|
16
|
+
}
|
17
|
+
)
|
18
|
+
elif username not in gVar.upload_message[index]["users"]:
|
19
|
+
gVar.upload_message[index]["users"].append(username)
|
20
|
+
else:
|
21
|
+
return
|
22
|
+
file_save(gVar.upload_message, "upload_message.json", "channel_data")
|
podflow/upload/update_upload.py
CHANGED
@@ -22,15 +22,21 @@ def update_upload():
|
|
22
22
|
upload_original = gVar.upload_original
|
23
23
|
# 获取所有项目
|
24
24
|
all_items = gVar.all_items
|
25
|
+
# 获取原始 XML 数据
|
26
|
+
xmls_original = gVar.xmls_original
|
27
|
+
# 获取无法更新channel_id
|
28
|
+
fail_upload_parts = list(set(xmls_original.keys()) - set(all_items.keys()))
|
25
29
|
# 遍历所有项目,获取每个输出目录的媒体名称
|
26
30
|
for output_dir, items_dict in all_items.items():
|
27
31
|
media_name[output_dir] = get_media_name(items_dict["type"], items_dict["items"])
|
28
32
|
# 遍历原始上传列表,筛选出需要上传的媒体部分
|
29
33
|
for upload_part in upload_original:
|
30
34
|
if (
|
31
|
-
|
32
|
-
|
33
|
-
|
35
|
+
(
|
36
|
+
upload_part["channel_id"] in media_name
|
37
|
+
and upload_part["media_id"] in media_name[upload_part["channel_id"]]
|
38
|
+
)
|
39
|
+
or upload_part["channel_id"] in fail_upload_parts):
|
34
40
|
main_upload.append(upload_part)
|
35
41
|
|
36
42
|
# 获取需要上传的媒体部分的ID
|
podflow/upload/upload_files.py
CHANGED
@@ -5,6 +5,7 @@ from podflow import gVar
|
|
5
5
|
from podflow.upload.build_hash import build_hash
|
6
6
|
from podflow.basic.http_client import http_client
|
7
7
|
from podflow.httpfs.app_bottle import bottle_app_instance
|
8
|
+
from podflow.upload.find_media_index import find_media_index
|
8
9
|
|
9
10
|
|
10
11
|
# 上传文件模块
|
@@ -53,14 +54,6 @@ def upload_file(
|
|
53
54
|
return None, hashs, ""
|
54
55
|
|
55
56
|
|
56
|
-
# 查找位置模块
|
57
|
-
def find_media_index(upload_original, target_media_id):
|
58
|
-
for index, item in enumerate(upload_original):
|
59
|
-
if item.get("media_id") == target_media_id:
|
60
|
-
return index # 返回找到的索引
|
61
|
-
return -1
|
62
|
-
|
63
|
-
|
64
57
|
# 过滤和排序上传媒体模块
|
65
58
|
def filter_and_sort_media(media_list):
|
66
59
|
filtered_sorted = sorted(
|
podflow/youtube/login.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# podflow/youtube/login.py
|
2
2
|
# coding: utf-8
|
3
3
|
|
4
|
+
import shutil
|
4
5
|
from podflow.basic.write_log import write_log
|
5
6
|
from podflow.basic.time_print import time_print
|
6
7
|
from podflow.basic.http_client import http_client
|
@@ -17,7 +18,7 @@ def get_youtube_cookie_fail(arg0):
|
|
17
18
|
def get_youtube_cookie(channelid_youtube_ids):
|
18
19
|
if not channelid_youtube_ids:
|
19
20
|
return
|
20
|
-
youtube_cookie = get_cookie_dict("channel_data/
|
21
|
+
youtube_cookie = get_cookie_dict("channel_data/youtube_cookie.txt")
|
21
22
|
if youtube_cookie is None:
|
22
23
|
write_log("YouTube \033[31m获取cookie失败\033[0m")
|
23
24
|
return None
|
@@ -27,6 +28,10 @@ def get_youtube_cookie(channelid_youtube_ids):
|
|
27
28
|
html_content = response.text
|
28
29
|
if '"LOGGED_IN":true' in html_content:
|
29
30
|
time_print("YouTube \033[32m获取cookie成功\033[0m")
|
31
|
+
shutil.copyfile(
|
32
|
+
"channel_data/youtube_cookie.txt",
|
33
|
+
"channel_data/yt_dlp_youtube.txt",
|
34
|
+
)
|
30
35
|
return youtube_cookie
|
31
36
|
elif '"LOGGED_IN":false' in html_content:
|
32
37
|
return get_youtube_cookie_fail("登陆YouTube失败")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: podflow
|
3
|
-
Version:
|
3
|
+
Version: 20250703
|
4
4
|
Summary: A podcast server that includes YouTube and BiliBili
|
5
5
|
Home-page: https://github.com/gruel-zxz/podflow
|
6
6
|
Author: gruel_zxz
|
@@ -14,7 +14,7 @@ Requires-Python: >=3.8
|
|
14
14
|
Description-Content-Type: text/markdown
|
15
15
|
Requires-Dist: astral>=3.2
|
16
16
|
Requires-Dist: bottle>=0.13.2
|
17
|
-
Requires-Dist: yt-dlp>=2025.6.
|
17
|
+
Requires-Dist: yt-dlp>=2025.6.30
|
18
18
|
Requires-Dist: chardet>=5.2.0
|
19
19
|
Requires-Dist: cherrypy>=18.10.0
|
20
20
|
Requires-Dist: pyqrcode>=1.2.1
|
@@ -1,9 +1,9 @@
|
|
1
|
-
podflow/__init__.py,sha256=
|
1
|
+
podflow/__init__.py,sha256=hpC5LyzhH6gYwn2DRHUBjQY4eHADFA5oIDztzhES-Ew,7695
|
2
2
|
podflow/download_and_build.py,sha256=x7S7N26B1G9Yn2yr7YthDJgKUwEKBLtHBLlaqpofLas,746
|
3
3
|
podflow/ffmpeg_judge.py,sha256=wM49pPXOFwFAA_8TKHal5fV6ka9sAA87yGQMDOssvXo,1340
|
4
4
|
podflow/main.py,sha256=7zWdpw80jqPaYu1Un1nPqaZoiAb7Dqg8zaF-cUioU4c,755
|
5
|
-
podflow/main_podcast.py,sha256=
|
6
|
-
podflow/main_upload.py,sha256=
|
5
|
+
podflow/main_podcast.py,sha256=8lCQqZ5vP5su1pLKcPu65yJRnty1CqPKfDNJyvYU76M,12977
|
6
|
+
podflow/main_upload.py,sha256=VOihPtjr37lxRNEr2cJp70DB6W5q7lHvpanApFKA9qE,2595
|
7
7
|
podflow/parse_arguments.py,sha256=h3a7EaRZS04kNMFYbxTW9Ch29KgZ7dyS-yqEEt_etQI,2592
|
8
8
|
podflow/basic/__init__.py,sha256=CAfI6mVQtz7KKbAiTIZ9_IbvaTXeAqxR1U7ov9GDoDo,44
|
9
9
|
podflow/basic/file_save.py,sha256=6vu4EkbsN4df5-ci6sJOgIOUEhh-WaRBOyMJ8rpouXo,1233
|
@@ -41,7 +41,7 @@ podflow/download/show_progress.py,sha256=y46chchUC9eZCg4ZdNMFnx_bXJQV_IUq15jVzZt
|
|
41
41
|
podflow/download/wait_animation.py,sha256=AUTvszXF89QA7XYjocFIauPKV7Qj8cFqry44teClaLQ,1314
|
42
42
|
podflow/download/youtube_and_bilibili_download.py,sha256=VCEhz6pGXFWXusdbGWqkCzi4f4VsKQVn6sZz1pfGsns,1335
|
43
43
|
podflow/httpfs/__init__.py,sha256=BxEXkufjcx-a0F7sDVXo65hmyANqCCbZUd6EH9i8T2c,45
|
44
|
-
podflow/httpfs/app_bottle.py,sha256=
|
44
|
+
podflow/httpfs/app_bottle.py,sha256=RunI3OVcYelgTk8lkYRJwwF8O2RxHOurih7Xn1RBPxo,28885
|
45
45
|
podflow/httpfs/browser.py,sha256=BJ4Xkfiki_tDr0Sc9RqAcEfIVpkAZ3RFOwo0aMHlY3U,197
|
46
46
|
podflow/httpfs/download_bar.py,sha256=0n3HATEO3pdsIpx-E_IZG9OlXa6u-9SeBCoZVgUutyc,965
|
47
47
|
podflow/httpfs/get_channelid.py,sha256=gcwy4IVHBWNQz7qPCpjwiAklGFLRGzvM33-UZz7oFvo,2296
|
@@ -85,29 +85,31 @@ podflow/remove/remove_file.py,sha256=ZusvZsBQX_yRdLuboD7bZKiOX4z4Rxg66zZK9KDWHwE
|
|
85
85
|
podflow/remove/remove_flush.py,sha256=HWCe5SjNJ3VXaXbgFtqGdTXeJ1R2vv5qllNilB-G0_g,1851
|
86
86
|
podflow/repair/__init__.py,sha256=Gpc1i6xiSLodKjjmzH66c_Y1z0HQ9E9CS3p95FRnVFM,45
|
87
87
|
podflow/repair/reverse_log.py,sha256=Wc_vAH0WB-z1fNdWx7FYaVH4caRPtot7tDwDwFhmpz4,1106
|
88
|
-
podflow/templates/index.html,sha256=
|
88
|
+
podflow/templates/index.html,sha256=clCTccfAXSX69il80gv3Z3p0ftrZ_n8RjY2kiecWVFg,2831
|
89
89
|
podflow/templates/css/config.css,sha256=-xjFlrbP2BAeTYTLs2M2u-4--klwSSC7HE2av58QUF0,5224
|
90
|
-
podflow/templates/css/index.css,sha256=
|
90
|
+
podflow/templates/css/index.css,sha256=wibmhsKu-jlnX6dbxMExlvO1Lbx2kw_TEbVGomyXd7M,10424
|
91
91
|
podflow/templates/js/config.js,sha256=VZmpvtQWszofoccjJZNhbjvNkpl-CjGOdTrPkI83ND4,43634
|
92
92
|
podflow/templates/js/index.js,sha256=GUfFhZM3vjiwfJ7USQZIIv5c7cyZwt64QZt0VInq5TI,34051
|
93
93
|
podflow/templates/js/qrcode.min.js,sha256=xUHvBjJ4hahBW8qN9gceFBibSFUzbe9PNttUvehITzY,19927
|
94
94
|
podflow/upload/__init__.py,sha256=AtOSXDrE5EjUe3z-iBd1NTDaH8n_X9qA5WXdBLkONjA,45
|
95
95
|
podflow/upload/add_upload.py,sha256=LloIucGJSXARhxiWerAbJVW-FpTkTUxvYCAKPbl93Ew,1536
|
96
96
|
podflow/upload/build_hash.py,sha256=9opa3xLd7nJbGGX5xa3uuKPS6dxlbkAb87ZdEiUxmxI,473
|
97
|
+
podflow/upload/find_media_index.py,sha256=HAtKkp0e-mjqjyLv1jgxXcNlNYvz-RD_kWvGkFdLygY,299
|
97
98
|
podflow/upload/get_upload_original.py,sha256=TEDnRutumm2FZNIesPJIlExHyKWpfB3ZAHb3sZt7V6A,4312
|
98
99
|
podflow/upload/linked_client.py,sha256=NdSi5uh0TbZUhOHbA_mkHo4aIz1XNKoSXHhT4rMRUpc,5288
|
99
100
|
podflow/upload/linked_server.py,sha256=h-qSx13fP8_Ny2IKW3wCNPwqRqW6-Iz1pqxD9ga9-dM,2308
|
100
|
-
podflow/upload/login.py,sha256=
|
101
|
+
podflow/upload/login.py,sha256=WwQoPCr1oSGZh6wEsEuUH5E8-PEYS_k36b-Qfe00rjY,4282
|
102
|
+
podflow/upload/store_users_info.py,sha256=nnAUgPUStYR48ma1B8mtY9SFOr3rOGvnlCuKSNdee3M,679
|
101
103
|
podflow/upload/time_key.py,sha256=6jZ3cxUjzj_umYDwH27R0YNZlLXxfhNp-CqV_K22wlo,967
|
102
|
-
podflow/upload/update_upload.py,sha256=
|
103
|
-
podflow/upload/upload_files.py,sha256=
|
104
|
+
podflow/upload/update_upload.py,sha256=tolV9WMRFg9KqdGSSC37REBy4N_f-d3GvCihciMlOlg,3456
|
105
|
+
podflow/upload/upload_files.py,sha256=vI0sSjCxUILlu0K9doMLJpmR7KrqhMRsCJmcWrCKlA0,5564
|
104
106
|
podflow/upload/upload_server.py,sha256=BFq3QrWE7U97LbC4EQiDhQXbLapEc4R00eRDBH12E6A,565
|
105
107
|
podflow/youtube/__init__.py,sha256=pgXod8gq0IijZxIkPSwgAOcb9JI5rd1mqMomoR7bcJ4,46
|
106
108
|
podflow/youtube/build.py,sha256=j6SVq3HFFGlNNqRrHfnBIThdzsH88PFmwLnejosif1U,12311
|
107
109
|
podflow/youtube/get.py,sha256=oO32GjTFvUgP5AfFX5AlIuXU2UT6QtOUOXWLFzi8XtI,17157
|
108
|
-
podflow/youtube/login.py,sha256=
|
109
|
-
podflow-
|
110
|
-
podflow-
|
111
|
-
podflow-
|
112
|
-
podflow-
|
113
|
-
podflow-
|
110
|
+
podflow/youtube/login.py,sha256=8sMtCkmw1DH6KR47tS6kOZ5bpPyP0SyHtlQyvIBJd_k,1454
|
111
|
+
podflow-20250703.dist-info/METADATA,sha256=gWs31WUuYVehzIyqoqeUo-npKtNYg8VQoycnhcPc7uE,14195
|
112
|
+
podflow-20250703.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
113
|
+
podflow-20250703.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
|
114
|
+
podflow-20250703.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
|
115
|
+
podflow-20250703.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|