podflow 20250701__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 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
 
@@ -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
- upload_file.file.close()
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
@@ -21,7 +21,7 @@ def main_upload():
21
21
  os.makedirs(new_tmp_dir, exist_ok=True) # 确保目录存在
22
22
  os.environ['TMPDIR'] = new_tmp_dir
23
23
  time_print(f"临时文件目录已设置为: {os.environ['TMPDIR']}")
24
- # 获取账号密码
24
+ # 获取账号密码及信息
25
25
  get_login()
26
26
  # 服务发现相关配置
27
27
  broadcast_port = 37001 # 服务发现用端口
@@ -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;
@@ -65,6 +65,11 @@
65
65
  </section>
66
66
 
67
67
  </main>
68
+
69
+ <div id="version-info">
70
+ Version: 1.0.1
71
+ </div>
72
+
68
73
  <script src="/templates/js/index.js"></script>
69
74
  <script src="/templates/js/qrcode.min.js"></script>
70
75
  <script src="/templates/js/config.js"></script>
@@ -0,0 +1,10 @@
1
+ # podflow/upload/find_media_index.py
2
+ # coding: utf-8
3
+
4
+
5
+ # 查找位置模块
6
+ def find_media_index(upload_original, target_media_id):
7
+ for index, item in enumerate(upload_original):
8
+ if item.get("media_id") == target_media_id:
9
+ return index # 返回找到的索引
10
+ return -1
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")
@@ -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/yt_dlp_youtube.txt")
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: 20250701
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
@@ -1,9 +1,9 @@
1
- podflow/__init__.py,sha256=mquu8BdWK9V4dDObCCfnPodeXOPkz-kj8_RNB7kK3Ys,7628
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=J2maKB-SRwHhOniVURKyp1zrqE6-ypkTmKQSZy4u6RE,12977
6
- podflow/main_upload.py,sha256=xuN15GAXokl2xzZrraLeusevl0j-TnHVziL0wobsBZc,2586
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=f0bPGGVGSMabIaURmWeXwRT9k_rG3-akq6V6Ql9zrWU,27978
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=kGsp1TAcf_qkV6hYRE8Ueq7CaTflR73rsTWtjnWuwwY,2775
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=dgrlonF2BYdAtIFYpDChvSBnXAndbdoyY6c2ysOgdL0,9641
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=85sqr12T-3NH-TD3kAMzy4yb1KOheV3Tr0eGee7NCJo,4007
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
104
  podflow/upload/update_upload.py,sha256=tolV9WMRFg9KqdGSSC37REBy4N_f-d3GvCihciMlOlg,3456
103
- podflow/upload/upload_files.py,sha256=zKMv27cqj7u-c8dHKNZx67UNx0gkMkQAnu2oxnk6a5M,5749
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=KYl--ya6Z1u0uIcOp9l8i3DIIj9hsYUDH4dtJjI0MLM,1295
109
- podflow-20250701.dist-info/METADATA,sha256=8Ea-bk1KpDHAD179t_i8ooFe7KBcMPA--JqBHdvv1Co,14195
110
- podflow-20250701.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
111
- podflow-20250701.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
112
- podflow-20250701.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
113
- podflow-20250701.dist-info/RECORD,,
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,,