podflow 20250331.3__tar.gz → 20250401.1__tar.gz

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.
Files changed (108) hide show
  1. {podflow-20250331.3 → podflow-20250401.1}/PKG-INFO +1 -1
  2. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/time_print.py +4 -4
  3. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/write_log.py +1 -1
  4. {podflow-20250331.3 → podflow-20250401.1}/podflow/httpfs/app_bottle.py +1 -1
  5. podflow-20250331.3/podflow/httpfs/ansi_to_html.py → podflow-20250401.1/podflow/httpfs/to_html.py +7 -1
  6. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/save_rss.py +2 -0
  7. {podflow-20250331.3 → podflow-20250401.1}/podflow/templates/index.html +56 -12
  8. {podflow-20250331.3 → podflow-20250401.1}/podflow.egg-info/PKG-INFO +1 -1
  9. {podflow-20250331.3 → podflow-20250401.1}/podflow.egg-info/SOURCES.txt +1 -1
  10. {podflow-20250331.3 → podflow-20250401.1}/podflow.egg-info/requires.txt +1 -1
  11. {podflow-20250331.3 → podflow-20250401.1}/setup.py +2 -2
  12. {podflow-20250331.3 → podflow-20250401.1}/MANIFEST.in +0 -0
  13. {podflow-20250331.3 → podflow-20250401.1}/README.md +0 -0
  14. {podflow-20250331.3 → podflow-20250401.1}/podflow/__init__.py +0 -0
  15. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/__init__.py +0 -0
  16. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/file_save.py +0 -0
  17. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/folder_build.py +0 -0
  18. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/get_duration.py +0 -0
  19. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/get_file_list.py +0 -0
  20. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/get_html_dict.py +0 -0
  21. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/http_client.py +0 -0
  22. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/list_merge_tidy.py +0 -0
  23. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/qr_code.py +0 -0
  24. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/split_dict.py +0 -0
  25. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/time_format.py +0 -0
  26. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/time_stamp.py +0 -0
  27. {podflow-20250331.3 → podflow-20250401.1}/podflow/basic/vary_replace.py +0 -0
  28. {podflow-20250331.3 → podflow-20250401.1}/podflow/bilibili/__init__.py +0 -0
  29. {podflow-20250331.3 → podflow-20250401.1}/podflow/bilibili/build.py +0 -0
  30. {podflow-20250331.3 → podflow-20250401.1}/podflow/bilibili/get.py +0 -0
  31. {podflow-20250331.3 → podflow-20250401.1}/podflow/bilibili/login.py +0 -0
  32. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/__init__.py +0 -0
  33. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/build_original.py +0 -0
  34. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/channge_icon.py +0 -0
  35. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/correct_channelid.py +0 -0
  36. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/correct_config.py +0 -0
  37. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/get_channelid.py +0 -0
  38. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/get_channelid_id.py +0 -0
  39. {podflow-20250331.3 → podflow-20250401.1}/podflow/config/get_config.py +0 -0
  40. {podflow-20250331.3 → podflow-20250401.1}/podflow/download/__init__.py +0 -0
  41. {podflow-20250331.3 → podflow-20250401.1}/podflow/download/convert_bytes.py +0 -0
  42. {podflow-20250331.3 → podflow-20250401.1}/podflow/download/delete_part.py +0 -0
  43. {podflow-20250331.3 → podflow-20250401.1}/podflow/download/dl_aideo_video.py +0 -0
  44. {podflow-20250331.3 → podflow-20250401.1}/podflow/download/show_progress.py +0 -0
  45. {podflow-20250331.3 → podflow-20250401.1}/podflow/download/wait_animation.py +0 -0
  46. {podflow-20250331.3 → podflow-20250401.1}/podflow/download/youtube_and_bilibili_download.py +0 -0
  47. {podflow-20250331.3 → podflow-20250401.1}/podflow/download_and_build.py +0 -0
  48. {podflow-20250331.3 → podflow-20250401.1}/podflow/ffmpeg_judge.py +0 -0
  49. {podflow-20250331.3 → podflow-20250401.1}/podflow/httpfs/__init__.py +0 -0
  50. {podflow-20250331.3 → podflow-20250401.1}/podflow/httpfs/browser.py +0 -0
  51. {podflow-20250331.3 → podflow-20250401.1}/podflow/httpfs/get_channelid.py +0 -0
  52. {podflow-20250331.3 → podflow-20250401.1}/podflow/httpfs/port_judge.py +0 -0
  53. {podflow-20250331.3 → podflow-20250401.1}/podflow/main.py +0 -0
  54. {podflow-20250331.3 → podflow-20250401.1}/podflow/main_podcast.py +0 -0
  55. {podflow-20250331.3 → podflow-20250401.1}/podflow/main_upload.py +0 -0
  56. {podflow-20250331.3 → podflow-20250401.1}/podflow/makeup/__init__.py +0 -0
  57. {podflow-20250331.3 → podflow-20250401.1}/podflow/makeup/del_makeup_format_fail.py +0 -0
  58. {podflow-20250331.3 → podflow-20250401.1}/podflow/makeup/make_up_file.py +0 -0
  59. {podflow-20250331.3 → podflow-20250401.1}/podflow/makeup/make_up_file_format_mod.py +0 -0
  60. {podflow-20250331.3 → podflow-20250401.1}/podflow/makeup/make_up_file_mod.py +0 -0
  61. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/__init__.py +0 -0
  62. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/backup_zip_save.py +0 -0
  63. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/create_main_rss.py +0 -0
  64. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/display_qrcode_and_url.py +0 -0
  65. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/fail_message_initialize.py +0 -0
  66. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/format_time.py +0 -0
  67. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/get_media_name.py +0 -0
  68. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/get_original_rss.py +0 -0
  69. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/get_video_format.py +0 -0
  70. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/get_video_format_multithread.py +0 -0
  71. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/get_youtube_and_bilibili_video_format.py +0 -0
  72. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/media_format.py +0 -0
  73. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/original_rss_fail_print.py +0 -0
  74. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/rss_create_hash.py +0 -0
  75. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/title_correction.py +0 -0
  76. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/update_information_display.py +0 -0
  77. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/update_youtube_bilibili_rss.py +0 -0
  78. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/want_retry.py +0 -0
  79. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/xml_item.py +0 -0
  80. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/xml_original_item.py +0 -0
  81. {podflow-20250331.3 → podflow-20250401.1}/podflow/message/xml_rss.py +0 -0
  82. {podflow-20250331.3 → podflow-20250401.1}/podflow/netscape/__init__.py +0 -0
  83. {podflow-20250331.3 → podflow-20250401.1}/podflow/netscape/bulid_netscape.py +0 -0
  84. {podflow-20250331.3 → podflow-20250401.1}/podflow/netscape/get_cookie_dict.py +0 -0
  85. {podflow-20250331.3 → podflow-20250401.1}/podflow/parse_arguments.py +0 -0
  86. {podflow-20250331.3 → podflow-20250401.1}/podflow/remove/__init__.py +0 -0
  87. {podflow-20250331.3 → podflow-20250401.1}/podflow/remove/remove_dir.py +0 -0
  88. {podflow-20250331.3 → podflow-20250401.1}/podflow/remove/remove_file.py +0 -0
  89. {podflow-20250331.3 → podflow-20250401.1}/podflow/repair/__init__.py +0 -0
  90. {podflow-20250331.3 → podflow-20250401.1}/podflow/repair/reverse_log.py +0 -0
  91. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/__init__.py +0 -0
  92. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/add_upload.py +0 -0
  93. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/build_hash.py +0 -0
  94. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/get_upload_original.py +0 -0
  95. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/linked_client.py +0 -0
  96. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/linked_server.py +0 -0
  97. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/login.py +0 -0
  98. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/time_key.py +0 -0
  99. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/update_upload.py +0 -0
  100. {podflow-20250331.3 → podflow-20250401.1}/podflow/upload/upload_server.py +0 -0
  101. {podflow-20250331.3 → podflow-20250401.1}/podflow/youtube/__init__.py +0 -0
  102. {podflow-20250331.3 → podflow-20250401.1}/podflow/youtube/build.py +0 -0
  103. {podflow-20250331.3 → podflow-20250401.1}/podflow/youtube/get.py +0 -0
  104. {podflow-20250331.3 → podflow-20250401.1}/podflow/youtube/login.py +0 -0
  105. {podflow-20250331.3 → podflow-20250401.1}/podflow.egg-info/dependency_links.txt +0 -0
  106. {podflow-20250331.3 → podflow-20250401.1}/podflow.egg-info/entry_points.txt +0 -0
  107. {podflow-20250331.3 → podflow-20250401.1}/podflow.egg-info/top_level.txt +0 -0
  108. {podflow-20250331.3 → podflow-20250401.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: podflow
3
- Version: 20250331.3
3
+ Version: 20250401.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
@@ -3,7 +3,7 @@
3
3
 
4
4
  from datetime import datetime
5
5
  from podflow import gVar
6
- from podflow.httpfs.ansi_to_html import ansi_to_html
6
+ from podflow.httpfs.to_html import ansi_to_html
7
7
 
8
8
 
9
9
  def time_print(text, Top=False, NoEnter=False, Time=True):
@@ -17,10 +17,10 @@ def time_print(text, Top=False, NoEnter=False, Time=True):
17
17
  print(text)
18
18
  text = ansi_to_html(text)
19
19
  if not gVar.index_message["enter"] and gVar.index_message["podflow"]:
20
- if Top:
21
- gVar.index_message["podflow"][0] = text
20
+ if Top and gVar.index_message["podflow"]:
21
+ gVar.index_message["podflow"][-1] = text
22
22
  else:
23
- gVar.index_message["podflow"][0] += (text)
23
+ gVar.index_message["podflow"][-1] += (text)
24
24
  else:
25
25
  gVar.index_message["podflow"].append(text)
26
26
  if NoEnter:
@@ -4,7 +4,7 @@
4
4
  import re
5
5
  from datetime import datetime
6
6
  from podflow import gVar
7
- from podflow.httpfs.ansi_to_html import ansi_to_html
7
+ from podflow.httpfs.to_html import ansi_to_html
8
8
 
9
9
 
10
10
  # 日志模块
@@ -13,7 +13,7 @@ from podflow.basic.file_save import file_save
13
13
  from podflow.basic.write_log import write_log
14
14
  from podflow.upload.build_hash import build_hash
15
15
  from podflow.upload.time_key import check_time_key
16
- from podflow.httpfs.ansi_to_html import ansi_to_html
16
+ from podflow.httpfs.to_html import ansi_to_html
17
17
  from podflow.httpfs.get_channelid import get_channelid
18
18
 
19
19
 
@@ -1,8 +1,9 @@
1
- # podflow/httpfs/ansi_to_htmlpy
1
+ # podflow/httpfs/to_html.py
2
2
  # coding: utf-8
3
3
 
4
4
  import re
5
5
  import html
6
+ from podflow import gVar
6
7
 
7
8
 
8
9
  def ansi_to_html(ansi_text):
@@ -48,3 +49,8 @@ def ansi_to_html(ansi_text):
48
49
  html_output += "</span>"
49
50
 
50
51
  return html_output
52
+
53
+
54
+ def qrcode_to_html(url):
55
+ text = f'<span class="qrcode-container" data-url="{url}"></span>'
56
+ gVar.index_message["podflow"].append(text)
@@ -6,6 +6,7 @@ from podflow.basic.qr_code import qr_code
6
6
  from podflow.message.xml_rss import xml_rss
7
7
  from podflow.basic.file_save import file_save
8
8
  from podflow.basic.write_log import write_log
9
+ from podflow.httpfs.to_html import qrcode_to_html
9
10
  from podflow.message.backup_zip_save import backup_zip_save
10
11
  from podflow.message.display_qrcode_and_url import display_qrcode_and_url
11
12
 
@@ -79,6 +80,7 @@ def save_rss():
79
80
  # 如果gVar.displayed_QRcode中不包含"main",则调用qr_code函数,显示总播客的二维码,并将"main"添加到gVar.displayed_QRcode中
80
81
  if "main" not in gVar.displayed_QRcode:
81
82
  qr_code(overall_url)
83
+ qrcode_to_html(overall_url)
82
84
  gVar.displayed_QRcode.append("main")
83
85
 
84
86
  # 备份主rss
@@ -21,7 +21,7 @@
21
21
  --menu-width: 170px;
22
22
  --menu-selected-bg: #cccccc;
23
23
  }
24
-
24
+
25
25
  /* 深色模式变量 */
26
26
  @media (prefers-color-scheme: dark) {
27
27
  :root {
@@ -55,7 +55,7 @@
55
55
  .ansi-94m { color: #7c9ecb; }
56
56
  .ansi-95m { color: #de30c5; }
57
57
  .ansi-96m { color: #51b2bb; }
58
- .ansi-97m { color: #eeeeec; }.
58
+ .ansi-97m { color: #eeeeec; }
59
59
 
60
60
  @media (prefers-color-scheme: dark) {
61
61
  .ansi-30m { color: #ffffff; }
@@ -130,7 +130,7 @@
130
130
  main.full {
131
131
  margin-left: 0;
132
132
  }
133
-
133
+
134
134
  /* 表单与消息区域共用样式 */
135
135
  .common-area {
136
136
  width: 100%;
@@ -147,14 +147,16 @@
147
147
  overflow-y: auto;
148
148
  }
149
149
  textarea {
150
- height: 250px;
150
+ height: 350px;
151
151
  font-size: 16px;
152
152
  }
153
153
  #messageArea {
154
- height: 250px;
154
+ height: 350px;
155
+ font-size: 12px;
155
156
  }
156
157
  #messageHttp {
157
158
  height: 150px;
159
+ font-size: 12px;
158
160
  }
159
161
  .button-container {
160
162
  margin-top: 10px;
@@ -202,7 +204,7 @@
202
204
  #toggleMenu:hover {
203
205
  color: var(--button-hover);
204
206
  }
205
-
207
+
206
208
  /* 手机端优化 */
207
209
  @media (max-width: 600px) {
208
210
  #messageArea, textarea {
@@ -217,10 +219,16 @@
217
219
  }
218
220
  .message {
219
221
  padding: 0px;
220
- margin: 0;
221
- font-size: 11px;
222
+ margin: 0px;
223
+ }
224
+
225
+ /* 二维码容器样式 */
226
+ .qrcode-container {
227
+ display: inline-block; /* 让容器并排显示 */
228
+ margin: 0px;
222
229
  }
223
230
  </style>
231
+ <script src="https://cdn.jsdelivr.net/gh/davidshimjs/qrcodejs/qrcode.min.js"></script>
224
232
  </head>
225
233
  <body>
226
234
  <!-- 菜单栏 -->
@@ -278,6 +286,7 @@
278
286
  const pasteBtn = document.getElementById('pasteBtn');
279
287
  const copyBtn = document.getElementById('copyBtn');
280
288
  const clearBtn = document.getElementById('clearBtn');
289
+ const qrcodeContainers = document.querySelectorAll('.qrcode-container'); // 获取所有二维码容器
281
290
 
282
291
  let pollingTimer = null;
283
292
 
@@ -303,6 +312,9 @@
303
312
  toggleMenu();
304
313
  }
305
314
  pageId === 'pageMessage' ? startMessagePolling() : stopMessagePolling();
315
+ if (pageId === 'pageMessage') {
316
+ generateQRCodes(); // 当切换页面时生成二维码
317
+ }
306
318
  }
307
319
  }
308
320
 
@@ -311,7 +323,7 @@
311
323
 
312
324
  let lastMessage = { podflow: [], http: [] };
313
325
  let userScrolled = false;
314
-
326
+
315
327
  // 监听滚动事件,检测用户是否手动滚动
316
328
  function onUserScroll(event) {
317
329
  const element = event.target;
@@ -319,7 +331,7 @@
319
331
  const nearBottom = element.scrollHeight - element.scrollTop <= element.clientHeight + 10;
320
332
  userScrolled = !nearBottom;
321
333
  }
322
-
334
+
323
335
  messageArea.addEventListener('scroll', onUserScroll);
324
336
  messageHttp.addEventListener('scroll', onUserScroll);
325
337
 
@@ -341,7 +353,7 @@
341
353
  function appendMessages(container, newMessages, oldMessages) {
342
354
  // 判断当前是否在底部
343
355
  const isAtBottom = container.scrollHeight - container.scrollTop <= container.clientHeight + 10;
344
-
356
+
345
357
  // 只追加新数据,避免重复渲染
346
358
  if (newMessages.length === oldMessages.length && newMessages.length > 0) {
347
359
  const lastNewMessage = newMessages[newMessages.length - 1];
@@ -370,7 +382,7 @@
370
382
  container.appendChild(p);
371
383
  });
372
384
  }
373
-
385
+
374
386
  // 如果用户没有主动滚动,才自动滚动到底部
375
387
  if (!userScrolled) {
376
388
  container.scrollTop = container.scrollHeight;
@@ -474,6 +486,38 @@
474
486
  toggleMenuBtn.style.left = '0px';
475
487
  toggleMenuBtn.textContent = '❯';
476
488
  }
489
+
490
+ // 生成二维码的函数
491
+ function generateQRCodes() {
492
+ const rootStyles = getComputedStyle(document.documentElement);
493
+ const textColor = rootStyles.getPropertyValue('--text-color');
494
+ const inputBg = rootStyles.getPropertyValue('--input-bg');
495
+
496
+ qrcodeContainers.forEach(container => {
497
+ const url = container.dataset.url;
498
+ // 清空容器中可能已有的内容
499
+ container.innerHTML = '';
500
+ if (url) {
501
+ new QRCode(container, {
502
+ text: url,
503
+ width: 128,
504
+ height: 128,
505
+ colorDark: textColor,
506
+ colorLight: inputBg,
507
+ correctLevel: QRCode.CorrectLevel.H
508
+ });
509
+ } else {
510
+ container.textContent = 'URL 未提供';
511
+ }
512
+ });
513
+ }
514
+
515
+ // 在页面加载完成后首次生成二维码(如果当前显示的是 Channel 页面)
516
+ window.addEventListener('load', () => {
517
+ if (pages.pageChannel.style.display === 'block') {
518
+ generateQRCodes();
519
+ }
520
+ });
477
521
  })();
478
522
  </script>
479
523
  </body>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: podflow
3
- Version: 20250331.3
3
+ Version: 20250401.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
@@ -49,11 +49,11 @@ podflow/download/show_progress.py
49
49
  podflow/download/wait_animation.py
50
50
  podflow/download/youtube_and_bilibili_download.py
51
51
  podflow/httpfs/__init__.py
52
- podflow/httpfs/ansi_to_html.py
53
52
  podflow/httpfs/app_bottle.py
54
53
  podflow/httpfs/browser.py
55
54
  podflow/httpfs/get_channelid.py
56
55
  podflow/httpfs/port_judge.py
56
+ podflow/httpfs/to_html.py
57
57
  podflow/makeup/__init__.py
58
58
  podflow/makeup/del_makeup_format_fail.py
59
59
  podflow/makeup/make_up_file.py
@@ -1,6 +1,6 @@
1
1
  astral>=3.2
2
2
  bottle>=0.13.2
3
- yt-dlp>=2025.3.27
3
+ yt-dlp>=2025.3.31
4
4
  chardet>=5.2.0
5
5
  cherrypy>=18.10.0
6
6
  pyqrcode>=1.2.1
@@ -5,7 +5,7 @@ from setuptools import setup, find_packages
5
5
 
6
6
  setup(
7
7
  name="podflow",
8
- version="20250331.3",
8
+ version="20250401.1",
9
9
  author="gruel_zxz",
10
10
  author_email="zhuxizhouzxz@gmail.com",
11
11
  description="A podcast server that includes YouTube and BiliBili",
@@ -31,7 +31,7 @@ setup(
31
31
  install_requires=[
32
32
  "astral>=3.2",
33
33
  "bottle>=0.13.2",
34
- "yt-dlp>=2025.3.27",
34
+ "yt-dlp>=2025.3.31",
35
35
  "chardet>=5.2.0",
36
36
  "cherrypy>=18.10.0",
37
37
  "pyqrcode>=1.2.1",
File without changes
File without changes
File without changes