podflow 20250604__py3-none-any.whl → 20250606.1__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
@@ -119,6 +119,8 @@ class Application_gVar:
119
119
 
120
120
  self.upload_original = [] # 原始上传信息字典
121
121
  self.upload_data = {} # 上传用户账号密码字典
122
+ self.upload_json = {} # 上传登陆账号密码字典
123
+ self.upload_stop = False # 上传停止布尔值
122
124
 
123
125
  self.shortcuts_url = {} # 输出至shortcut的url字典
124
126
 
@@ -2,6 +2,8 @@
2
2
  # coding: utf-8
3
3
 
4
4
  import threading
5
+ from podflow import gVar
6
+ from podflow.upload.upload_files import all_upload
5
7
  from podflow.youtube.build import get_youtube_introduction
6
8
  from podflow.message.create_main_rss import create_main_rss
7
9
  from podflow.download.youtube_and_bilibili_download import youtube_and_bilibili_download
@@ -10,15 +12,19 @@ from podflow.download.youtube_and_bilibili_download import youtube_and_bilibili_
10
12
  def get_and_duild():
11
13
  get_youtube_introduction()
12
14
  create_main_rss()
15
+ gVar.upload_stop = True # 停止上传线程
13
16
 
14
17
 
15
18
  # 下载并构建YouTube和哔哩哔哩视频模块
16
19
  def download_and_build():
17
20
  thread_download = threading.Thread(target=youtube_and_bilibili_download)
18
21
  thread_build = threading.Thread(target=get_and_duild)
22
+ thread_upload = threading.Thread(target=all_upload)
19
23
 
20
24
  thread_download.start()
21
25
  thread_build.start()
26
+ thread_upload.start()
22
27
 
23
28
  thread_download.join()
24
29
  thread_build.join()
30
+ thread_upload.join()
@@ -343,6 +343,7 @@ class bottle_app:
343
343
  if not upload_file:
344
344
  # 打印错误信息并返回错误码
345
345
  self.print_out("upload", 404)
346
+ upload_file.file.close()
346
347
  return {
347
348
  "code": -4,
348
349
  "message": "No File Provided", # 没有上传文件
@@ -353,6 +354,7 @@ class bottle_app:
353
354
  uploadfile_hash = build_hash(uploadfile)
354
355
  if upload_hash != uploadfile_hash:
355
356
  self.print_out("upload", 401)
357
+ upload_file.file.close()
356
358
  return {
357
359
  "code": -5,
358
360
  "message": "Incomplete File", # 文件不完整
@@ -361,6 +363,7 @@ class bottle_app:
361
363
  if not channelid:
362
364
  # 打印错误信息并返回错误码
363
365
  self.print_out("upload", 404)
366
+ upload_file.file.close()
364
367
  return {
365
368
  "code": -6,
366
369
  "message": "ChannelId Does Not Exist", # 频道ID不存在
@@ -371,8 +374,9 @@ class bottle_app:
371
374
  suffix = filename.split(".")[1]
372
375
  if suffix not in ["mp4", "m4a"]:
373
376
  self.print_out("upload", 404)
377
+ upload_file.file.close()
374
378
  return {
375
- "code": -6,
379
+ "code": -7,
376
380
  "message": "File Format Error", # 文件格式错误
377
381
  }
378
382
  address = f"channel_audiovisual/{channelid}"
@@ -389,6 +393,7 @@ class bottle_app:
389
393
  original_file.seek(0)
390
394
  if upload_hash == build_hash(original_file):
391
395
  self.print_out("upload", 200)
396
+ upload_file.file.close()
392
397
  return {
393
398
  "code": 1,
394
399
  "message": "The Same File Exists", # 相同文件已存在
@@ -403,6 +408,7 @@ class bottle_app:
403
408
  file_save(uploadfile, filename, address, True)
404
409
  # 打印成功信息并返回成功码
405
410
  self.print_out("upload", 200)
411
+ upload_file.file.close()
406
412
  return {
407
413
  "code": 0,
408
414
  "message": "Upload Success", # 上传成功
podflow/main_podcast.py CHANGED
@@ -141,6 +141,8 @@ def main_podcast():
141
141
  if upload_url:
142
142
  upload_json = login_upload(upload_url)
143
143
  if upload_json:
144
+ gVar.upload_json = upload_json
145
+ else:
144
146
  gVar.config["upload"] = False
145
147
  else:
146
148
  gVar.config["upload"] = False
@@ -16,7 +16,7 @@ def remove_dir():
16
16
  if os.path.exists(directory_path):
17
17
  # 删除该目录及其内容
18
18
  shutil.rmtree(directory_path)
19
- write_log(f"{name}文件夹已删除")
19
+ write_log(f"{name}抛弃文件夹已删除")
20
20
 
21
21
  folder_names = [
22
22
  folder
@@ -14,11 +14,11 @@ def remove_file():
14
14
  for file_name in os.listdir(f"channel_audiovisual/{output_dir}"):
15
15
  if file_name not in gVar.all_youtube_content_ytid[output_dir]:
16
16
  os.remove(f"channel_audiovisual/{output_dir}/{file_name}")
17
- write_log(f"{name}|{file_name}已删除")
17
+ write_log(f"{name}|{file_name}抛弃文件已删除")
18
18
 
19
19
  channelid_bilibili_ids = gVar.channelid_bilibili_ids
20
20
  for output_dir, name in channelid_bilibili_ids.items():
21
21
  for file_name in os.listdir(f"channel_audiovisual/{output_dir}"):
22
22
  if file_name not in gVar.all_bilibili_content_bvid[output_dir]:
23
23
  os.remove(f"channel_audiovisual/{output_dir}/{file_name}")
24
- write_log(f"{name}|{file_name}已删除")
24
+ write_log(f"{name}|{file_name}抛弃文件已删除")
@@ -1,7 +1,6 @@
1
1
  # podflow/upload/upload_files.py
2
2
  # coding: utf-8
3
3
 
4
- import time
5
4
  from datetime import datetime
6
5
  from podflow import gVar
7
6
  from podflow.httpfs.to_html import ansi_to_html
@@ -25,7 +24,7 @@ def upload_file(username, password, channelid, filename):
25
24
  }
26
25
  if response := http_client(
27
26
  url="http://10.0.3.231:5000/upload",
28
- name="1",
27
+ name="",
29
28
  data=data,
30
29
  mode="post",
31
30
  file=file,
@@ -44,17 +43,14 @@ def find_media_index(upload_original, target_media_id):
44
43
  return -1
45
44
 
46
45
 
47
- # 过滤和排序媒体模块
48
- def filter_and_sort_media(media_list, day):
49
- current_time = int(time.time())
50
- one_month_ago = current_time - day * 24 * 60 * 60 # 30天前的时间戳
46
+ # 过滤和排序上传媒体模块
47
+ def filter_and_sort_media(media_list):
51
48
  filtered_sorted = sorted(
52
49
  (
53
50
  item
54
51
  for item in media_list
55
52
  if not item["upload"]
56
53
  and not item["remove"]
57
- and item["media_time"] < one_month_ago
58
54
  ),
59
55
  key=lambda x: x["media_time"],
60
56
  )
@@ -65,12 +61,24 @@ def filter_and_sort_media(media_list, day):
65
61
  return result
66
62
 
67
63
 
64
+ # 媒体文件上传模块
68
65
  def record_upload(username, password, channelid, filename):
69
66
  response, hashs = upload_file(username, password, channelid, filename)
70
67
  channelname = (
71
68
  gVar.channelid_youtube_ids_original | gVar.channelid_bilibili_ids_original
72
69
  ).get(channelid, "")
73
70
  now_time = datetime.now().strftime("%H:%M:%S")
71
+ result = {
72
+ 0: "",
73
+ 1: "存在相同文件",
74
+ -2: "用户名错误",
75
+ -3: "密码错误",
76
+ -4: "上传文件为空",
77
+ -5: "文件不完整",
78
+ -6: "频道ID不存在",
79
+ -7: "文件格式有误",
80
+ }
81
+ name = filename.split(".")[0]
74
82
  if response:
75
83
  code = response.get("code")
76
84
  data = response.get("data", {})
@@ -82,11 +90,28 @@ def record_upload(username, password, channelid, filename):
82
90
  if filename:
83
91
  gVar.upload_original[index]["upload"] = True
84
92
  gVar.upload_original[index]["hash"] = hashs
85
- gVar.upload_original[index]["filename"] = hashs
86
-
87
- bottle_text = f"{now_time}|{channelname}/{filename} Upload: {message}"
93
+ gVar.upload_original[index]["filename"] = filename
94
+ if code == 0:
95
+ bottle_text = "\033[32m上传成功\033[0m"
96
+ elif code == 1:
97
+ bottle_text = f"\033[33m上传成功\033[0m: {result.get(code, message)}"
98
+ else:
99
+ bottle_text = f"\033[31m上传失败\033[0m: {result.get(code, message)}"
88
100
  else:
89
- bottle_text = f"{now_time}|{channelname}/{filename} Upload Failed"
101
+ bottle_text = "\033[31m上传失败\033[0m: 网络连接失败"
102
+ bottle_text = f"{now_time}|{channelname}/{name}|" + bottle_text
90
103
  bottle_app_instance.bottle_print.append(bottle_text)
91
104
  gVar.index_message["http"].append(ansi_to_html(bottle_text))
92
105
  bottle_app_instance.cherry_print(False)
106
+
107
+
108
+ # 总体上传模块
109
+ def all_upload():
110
+ if gVar.config["upload"]:
111
+ result = filter_and_sort_media(gVar.upload_original)
112
+ username = gVar.upload_json["username"]
113
+ password = gVar.upload_json["password"]
114
+ for item in result:
115
+ record_upload(username, password, item["channel_id"], item["media_id"])
116
+ if gVar.upload_stop:
117
+ break
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: podflow
3
- Version: 20250604
3
+ Version: 20250606.1
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,8 +1,8 @@
1
- podflow/__init__.py,sha256=KdCh8mDeRDjjtdHQUzg025Qnpw8UGgrHdboFvkjOAm4,7506
2
- podflow/download_and_build.py,sha256=GKQ1uX8Nuwdhr4wgnGr3jP1Mu0llRUPFcboQ3S05WkU,671
1
+ podflow/__init__.py,sha256=mquu8BdWK9V4dDObCCfnPodeXOPkz-kj8_RNB7kK3Ys,7628
2
+ podflow/download_and_build.py,sha256=UPFTc8XjBEkg3GnCt3zkNjCzSbHugS3O8AreaWIgHJ0,904
3
3
  podflow/ffmpeg_judge.py,sha256=wM49pPXOFwFAA_8TKHal5fV6ka9sAA87yGQMDOssvXo,1340
4
4
  podflow/main.py,sha256=Cz2E33-Kcc_1_oxNs4Z1OoqJYhonmClsrtoCW1oQmZA,739
5
- podflow/main_podcast.py,sha256=D1eBxeGNks0q8_zhVG2uUuE1pBcPEXGDAfd1CwAtuOs,12321
5
+ podflow/main_podcast.py,sha256=SSFIg73JLu3wS5E3WAo8OAgXG4r_CHsPT-XSga0Vzrg,12386
6
6
  podflow/main_upload.py,sha256=H_T5KQMYzToqzQbjGQ6DWDGziy8iMnpmf7A1qOStJuo,2296
7
7
  podflow/parse_arguments.py,sha256=h3a7EaRZS04kNMFYbxTW9Ch29KgZ7dyS-yqEEt_etQI,2592
8
8
  podflow/basic/__init__.py,sha256=CAfI6mVQtz7KKbAiTIZ9_IbvaTXeAqxR1U7ov9GDoDo,44
@@ -40,7 +40,7 @@ podflow/download/show_progress.py,sha256=y46chchUC9eZCg4ZdNMFnx_bXJQV_IUq15jVzZt
40
40
  podflow/download/wait_animation.py,sha256=AUTvszXF89QA7XYjocFIauPKV7Qj8cFqry44teClaLQ,1314
41
41
  podflow/download/youtube_and_bilibili_download.py,sha256=VCEhz6pGXFWXusdbGWqkCzi4f4VsKQVn6sZz1pfGsns,1335
42
42
  podflow/httpfs/__init__.py,sha256=BxEXkufjcx-a0F7sDVXo65hmyANqCCbZUd6EH9i8T2c,45
43
- podflow/httpfs/app_bottle.py,sha256=UhUIpkI4afz6fXrvXH8a-hYBmjXH8WJuNIcvnCtSIrQ,21465
43
+ podflow/httpfs/app_bottle.py,sha256=po0yxEvXp6kYupJdaVTR7b-4t-Dv7C-E8D6IOwu9sNU,21703
44
44
  podflow/httpfs/browser.py,sha256=BJ4Xkfiki_tDr0Sc9RqAcEfIVpkAZ3RFOwo0aMHlY3U,197
45
45
  podflow/httpfs/download_bar.py,sha256=0n3HATEO3pdsIpx-E_IZG9OlXa6u-9SeBCoZVgUutyc,965
46
46
  podflow/httpfs/get_channelid.py,sha256=gcwy4IVHBWNQz7qPCpjwiAklGFLRGzvM33-UZz7oFvo,2296
@@ -79,8 +79,8 @@ podflow/netscape/__init__.py,sha256=SUw_BtbV3moA324UdxRECkPLv1xHkjio8r_5JTkVfxI,
79
79
  podflow/netscape/bulid_netscape.py,sha256=wmUPlDGF8G456GGyajU_6Ak5WJzsqsq4bZgPjCSTGhI,2279
80
80
  podflow/netscape/get_cookie_dict.py,sha256=laqw-eriABiLyciRLzDmistVHHWqmUM-9eEbYZzsqBQ,643
81
81
  podflow/remove/__init__.py,sha256=x1pMfpIyE6xUrmIOkdl43mbvKLwndGo5pIoOBXhJsP4,45
82
- podflow/remove/remove_dir.py,sha256=xQIhrnqnYjMzXjoSWaTvm7JwPYOFTN1muuTPdaLDXpQ,1099
83
- podflow/remove/remove_file.py,sha256=8wAJQehs-XBqvu0vPlEme2_tt0FZxc5ELwGMxXA_558,982
82
+ podflow/remove/remove_dir.py,sha256=zqgf47UgxiGiLipb1FeoWKzrSHSxcHaEuu0261bqR1s,1105
83
+ podflow/remove/remove_file.py,sha256=ZusvZsBQX_yRdLuboD7bZKiOX4z4Rxg66zZK9KDWHwE,1006
84
84
  podflow/repair/__init__.py,sha256=Gpc1i6xiSLodKjjmzH66c_Y1z0HQ9E9CS3p95FRnVFM,45
85
85
  podflow/repair/reverse_log.py,sha256=Wc_vAH0WB-z1fNdWx7FYaVH4caRPtot7tDwDwFhmpz4,1106
86
86
  podflow/templates/index.html,sha256=kGsp1TAcf_qkV6hYRE8Ueq7CaTflR73rsTWtjnWuwwY,2775
@@ -98,14 +98,14 @@ podflow/upload/linked_server.py,sha256=h-qSx13fP8_Ny2IKW3wCNPwqRqW6-Iz1pqxD9ga9-
98
98
  podflow/upload/login.py,sha256=85sqr12T-3NH-TD3kAMzy4yb1KOheV3Tr0eGee7NCJo,4007
99
99
  podflow/upload/time_key.py,sha256=6jZ3cxUjzj_umYDwH27R0YNZlLXxfhNp-CqV_K22wlo,967
100
100
  podflow/upload/update_upload.py,sha256=_5tp1zPNsC9DdDnLzm-P8bLcOBuDov4eMRHp_861j80,3183
101
- podflow/upload/upload_files.py,sha256=f6ME5t4shs1XB_aqO5tFYbJNqEOTzGkceZ2dF1m7cl4,3072
101
+ podflow/upload/upload_files.py,sha256=0IHVWtf-S2m3UekIFJyIT89lk7mHvTHzAP_CavCDonE,3887
102
102
  podflow/upload/upload_server.py,sha256=BFq3QrWE7U97LbC4EQiDhQXbLapEc4R00eRDBH12E6A,565
103
103
  podflow/youtube/__init__.py,sha256=pgXod8gq0IijZxIkPSwgAOcb9JI5rd1mqMomoR7bcJ4,46
104
104
  podflow/youtube/build.py,sha256=j6SVq3HFFGlNNqRrHfnBIThdzsH88PFmwLnejosif1U,12311
105
105
  podflow/youtube/get.py,sha256=oO32GjTFvUgP5AfFX5AlIuXU2UT6QtOUOXWLFzi8XtI,17157
106
106
  podflow/youtube/login.py,sha256=KYl--ya6Z1u0uIcOp9l8i3DIIj9hsYUDH4dtJjI0MLM,1295
107
- podflow-20250604.dist-info/METADATA,sha256=aCN1CEvbSbYV1C3uqV9GJ_D6_Smk29sWzdwyG5R4yeo,14195
108
- podflow-20250604.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
109
- podflow-20250604.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
110
- podflow-20250604.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
111
- podflow-20250604.dist-info/RECORD,,
107
+ podflow-20250606.1.dist-info/METADATA,sha256=GHtoxpy5Mpw8WYSwEom-YA2WxWbzgKXVk2Hxf6dtPPE,14197
108
+ podflow-20250606.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
109
+ podflow-20250606.1.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
110
+ podflow-20250606.1.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
111
+ podflow-20250606.1.dist-info/RECORD,,