podflow 20250701__py3-none-any.whl → 20250705__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 +1 -1
- podflow/main_upload.py +1 -1
- podflow/netscape/update_netscape.py +20 -0
- 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/upload_files.py +1 -8
- podflow/youtube/login.py +12 -1
- {podflow-20250701.dist-info → podflow-20250705.dist-info}/METADATA +1 -1
- {podflow-20250701.dist-info → podflow-20250705.dist-info}/RECORD +17 -14
- {podflow-20250701.dist-info → podflow-20250705.dist-info}/WHEEL +0 -0
- {podflow-20250701.dist-info → podflow-20250705.dist-info}/entry_points.txt +0 -0
- {podflow-20250701.dist-info → podflow-20250705.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
@@ -279,7 +279,7 @@ def main_podcast():
|
|
279
279
|
gVar.overall_rss = "" # 更新后的rss文本
|
280
280
|
gVar.make_up_file_format.clear() # 补全缺失媒体字典
|
281
281
|
gVar.make_up_file_format_fail.clear() # 补全缺失媒体失败字典
|
282
|
-
gVar.upload_original.clear() #
|
282
|
+
gVar.upload_original.clear() # 原始上传信息列表
|
283
283
|
# 将需要更新转为否
|
284
284
|
gVar.update_generate_rss = False
|
285
285
|
if parse.update_num != -1:
|
podflow/main_upload.py
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# podflow/netscape/update_netscape.py
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
from http.cookiejar import MozillaCookieJar
|
5
|
+
|
6
|
+
|
7
|
+
# 更新Netscape_HTTP_Cookie模块
|
8
|
+
def update_netscape(response_cookies, file: str):
|
9
|
+
netscape_cookie_jar = MozillaCookieJar(file)
|
10
|
+
try:
|
11
|
+
netscape_cookie_jar.load(ignore_discard=True, ignore_expires=True)
|
12
|
+
except Exception:
|
13
|
+
return False
|
14
|
+
for cookie in response_cookies:
|
15
|
+
netscape_cookie_jar.set_cookie(cookie)
|
16
|
+
try:
|
17
|
+
netscape_cookie_jar.save(ignore_discard=True, ignore_expires=True)
|
18
|
+
return True
|
19
|
+
except Exception:
|
20
|
+
return False
|
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/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
@@ -5,6 +5,7 @@ from podflow.basic.write_log import write_log
|
|
5
5
|
from podflow.basic.time_print import time_print
|
6
6
|
from podflow.basic.http_client import http_client
|
7
7
|
from podflow.netscape.get_cookie_dict import get_cookie_dict
|
8
|
+
from podflow.netscape.update_netscape import update_netscape
|
8
9
|
|
9
10
|
|
10
11
|
def get_youtube_cookie_fail(arg0):
|
@@ -26,7 +27,17 @@ def get_youtube_cookie(channelid_youtube_ids):
|
|
26
27
|
):
|
27
28
|
html_content = response.text
|
28
29
|
if '"LOGGED_IN":true' in html_content:
|
29
|
-
|
30
|
+
updata_data = update_netscape(
|
31
|
+
response.cookies,
|
32
|
+
"channel_data/yt_dlp_youtube.txt",
|
33
|
+
)
|
34
|
+
if updata_data:
|
35
|
+
time_print("YouTube \033[32m获取cookie成功\033[0m")
|
36
|
+
else:
|
37
|
+
return get_youtube_cookie_fail("更新YouTube cookie失败")
|
38
|
+
new_youtube_cookie = response.cookies.get_dict()
|
39
|
+
for my_cookie_name, my_cookie_value in new_youtube_cookie.items():
|
40
|
+
youtube_cookie[my_cookie_name] = my_cookie_value
|
30
41
|
return youtube_cookie
|
31
42
|
elif '"LOGGED_IN":false' in html_content:
|
32
43
|
return get_youtube_cookie_fail("登陆YouTube失败")
|
@@ -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
|
@@ -79,35 +79,38 @@ podflow/message/xml_rss.py,sha256=ogCteSUXyJJXLhOE7-ZBcRdWYzrRr2Qykjt3oppRpC4,16
|
|
79
79
|
podflow/netscape/__init__.py,sha256=SUw_BtbV3moA324UdxRECkPLv1xHkjio8r_5JTkVfxI,47
|
80
80
|
podflow/netscape/bulid_netscape.py,sha256=wmUPlDGF8G456GGyajU_6Ak5WJzsqsq4bZgPjCSTGhI,2279
|
81
81
|
podflow/netscape/get_cookie_dict.py,sha256=laqw-eriABiLyciRLzDmistVHHWqmUM-9eEbYZzsqBQ,643
|
82
|
+
podflow/netscape/update_netscape.py,sha256=b7RL0Rm0pSOyRH9-sgflqtzB8EoyPhSFJgQTSfjFsy4,592
|
82
83
|
podflow/remove/__init__.py,sha256=x1pMfpIyE6xUrmIOkdl43mbvKLwndGo5pIoOBXhJsP4,45
|
83
84
|
podflow/remove/remove_dir.py,sha256=zqgf47UgxiGiLipb1FeoWKzrSHSxcHaEuu0261bqR1s,1105
|
84
85
|
podflow/remove/remove_file.py,sha256=ZusvZsBQX_yRdLuboD7bZKiOX4z4Rxg66zZK9KDWHwE,1006
|
85
86
|
podflow/remove/remove_flush.py,sha256=HWCe5SjNJ3VXaXbgFtqGdTXeJ1R2vv5qllNilB-G0_g,1851
|
86
87
|
podflow/repair/__init__.py,sha256=Gpc1i6xiSLodKjjmzH66c_Y1z0HQ9E9CS3p95FRnVFM,45
|
87
88
|
podflow/repair/reverse_log.py,sha256=Wc_vAH0WB-z1fNdWx7FYaVH4caRPtot7tDwDwFhmpz4,1106
|
88
|
-
podflow/templates/index.html,sha256=
|
89
|
+
podflow/templates/index.html,sha256=6GS2aq_mJBnI3STK_FsjNQY8xrMk3wxYBx3TtJ_qq28,2831
|
89
90
|
podflow/templates/css/config.css,sha256=-xjFlrbP2BAeTYTLs2M2u-4--klwSSC7HE2av58QUF0,5224
|
90
|
-
podflow/templates/css/index.css,sha256=
|
91
|
+
podflow/templates/css/index.css,sha256=wibmhsKu-jlnX6dbxMExlvO1Lbx2kw_TEbVGomyXd7M,10424
|
91
92
|
podflow/templates/js/config.js,sha256=VZmpvtQWszofoccjJZNhbjvNkpl-CjGOdTrPkI83ND4,43634
|
92
93
|
podflow/templates/js/index.js,sha256=GUfFhZM3vjiwfJ7USQZIIv5c7cyZwt64QZt0VInq5TI,34051
|
93
94
|
podflow/templates/js/qrcode.min.js,sha256=xUHvBjJ4hahBW8qN9gceFBibSFUzbe9PNttUvehITzY,19927
|
94
95
|
podflow/upload/__init__.py,sha256=AtOSXDrE5EjUe3z-iBd1NTDaH8n_X9qA5WXdBLkONjA,45
|
95
96
|
podflow/upload/add_upload.py,sha256=LloIucGJSXARhxiWerAbJVW-FpTkTUxvYCAKPbl93Ew,1536
|
96
97
|
podflow/upload/build_hash.py,sha256=9opa3xLd7nJbGGX5xa3uuKPS6dxlbkAb87ZdEiUxmxI,473
|
98
|
+
podflow/upload/find_media_index.py,sha256=HAtKkp0e-mjqjyLv1jgxXcNlNYvz-RD_kWvGkFdLygY,299
|
97
99
|
podflow/upload/get_upload_original.py,sha256=TEDnRutumm2FZNIesPJIlExHyKWpfB3ZAHb3sZt7V6A,4312
|
98
100
|
podflow/upload/linked_client.py,sha256=NdSi5uh0TbZUhOHbA_mkHo4aIz1XNKoSXHhT4rMRUpc,5288
|
99
101
|
podflow/upload/linked_server.py,sha256=h-qSx13fP8_Ny2IKW3wCNPwqRqW6-Iz1pqxD9ga9-dM,2308
|
100
|
-
podflow/upload/login.py,sha256=
|
102
|
+
podflow/upload/login.py,sha256=WwQoPCr1oSGZh6wEsEuUH5E8-PEYS_k36b-Qfe00rjY,4282
|
103
|
+
podflow/upload/store_users_info.py,sha256=nnAUgPUStYR48ma1B8mtY9SFOr3rOGvnlCuKSNdee3M,679
|
101
104
|
podflow/upload/time_key.py,sha256=6jZ3cxUjzj_umYDwH27R0YNZlLXxfhNp-CqV_K22wlo,967
|
102
105
|
podflow/upload/update_upload.py,sha256=tolV9WMRFg9KqdGSSC37REBy4N_f-d3GvCihciMlOlg,3456
|
103
|
-
podflow/upload/upload_files.py,sha256=
|
106
|
+
podflow/upload/upload_files.py,sha256=vI0sSjCxUILlu0K9doMLJpmR7KrqhMRsCJmcWrCKlA0,5564
|
104
107
|
podflow/upload/upload_server.py,sha256=BFq3QrWE7U97LbC4EQiDhQXbLapEc4R00eRDBH12E6A,565
|
105
108
|
podflow/youtube/__init__.py,sha256=pgXod8gq0IijZxIkPSwgAOcb9JI5rd1mqMomoR7bcJ4,46
|
106
109
|
podflow/youtube/build.py,sha256=j6SVq3HFFGlNNqRrHfnBIThdzsH88PFmwLnejosif1U,12311
|
107
110
|
podflow/youtube/get.py,sha256=oO32GjTFvUgP5AfFX5AlIuXU2UT6QtOUOXWLFzi8XtI,17157
|
108
|
-
podflow/youtube/login.py,sha256=
|
109
|
-
podflow-
|
110
|
-
podflow-
|
111
|
-
podflow-
|
112
|
-
podflow-
|
113
|
-
podflow-
|
111
|
+
podflow/youtube/login.py,sha256=WGSa17wuTZPzkvra1Cx4rSrFcCFw1E_lw8fo8FYrl54,1830
|
112
|
+
podflow-20250705.dist-info/METADATA,sha256=xzWFm-eXaTeNz14CvbP05GcgKCcyMv8-OPaBqRMiN34,14195
|
113
|
+
podflow-20250705.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
114
|
+
podflow-20250705.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
|
115
|
+
podflow-20250705.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
|
116
|
+
podflow-20250705.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|