podflow 20250401.1__tar.gz → 20250402__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-20250401.1 → podflow-20250402}/PKG-INFO +1 -1
  2. {podflow-20250401.1 → podflow-20250402}/podflow/basic/qr_code.py +4 -1
  3. {podflow-20250401.1 → podflow-20250402}/podflow/basic/time_print.py +10 -3
  4. {podflow-20250401.1 → podflow-20250402}/podflow/basic/write_log.py +4 -4
  5. {podflow-20250401.1 → podflow-20250402}/podflow/message/save_rss.py +2 -4
  6. {podflow-20250401.1 → podflow-20250402}/podflow/templates/index.html +57 -29
  7. {podflow-20250401.1 → podflow-20250402}/podflow.egg-info/PKG-INFO +1 -1
  8. {podflow-20250401.1 → podflow-20250402}/setup.py +1 -1
  9. {podflow-20250401.1 → podflow-20250402}/MANIFEST.in +0 -0
  10. {podflow-20250401.1 → podflow-20250402}/README.md +0 -0
  11. {podflow-20250401.1 → podflow-20250402}/podflow/__init__.py +0 -0
  12. {podflow-20250401.1 → podflow-20250402}/podflow/basic/__init__.py +0 -0
  13. {podflow-20250401.1 → podflow-20250402}/podflow/basic/file_save.py +0 -0
  14. {podflow-20250401.1 → podflow-20250402}/podflow/basic/folder_build.py +0 -0
  15. {podflow-20250401.1 → podflow-20250402}/podflow/basic/get_duration.py +0 -0
  16. {podflow-20250401.1 → podflow-20250402}/podflow/basic/get_file_list.py +0 -0
  17. {podflow-20250401.1 → podflow-20250402}/podflow/basic/get_html_dict.py +0 -0
  18. {podflow-20250401.1 → podflow-20250402}/podflow/basic/http_client.py +0 -0
  19. {podflow-20250401.1 → podflow-20250402}/podflow/basic/list_merge_tidy.py +0 -0
  20. {podflow-20250401.1 → podflow-20250402}/podflow/basic/split_dict.py +0 -0
  21. {podflow-20250401.1 → podflow-20250402}/podflow/basic/time_format.py +0 -0
  22. {podflow-20250401.1 → podflow-20250402}/podflow/basic/time_stamp.py +0 -0
  23. {podflow-20250401.1 → podflow-20250402}/podflow/basic/vary_replace.py +0 -0
  24. {podflow-20250401.1 → podflow-20250402}/podflow/bilibili/__init__.py +0 -0
  25. {podflow-20250401.1 → podflow-20250402}/podflow/bilibili/build.py +0 -0
  26. {podflow-20250401.1 → podflow-20250402}/podflow/bilibili/get.py +0 -0
  27. {podflow-20250401.1 → podflow-20250402}/podflow/bilibili/login.py +0 -0
  28. {podflow-20250401.1 → podflow-20250402}/podflow/config/__init__.py +0 -0
  29. {podflow-20250401.1 → podflow-20250402}/podflow/config/build_original.py +0 -0
  30. {podflow-20250401.1 → podflow-20250402}/podflow/config/channge_icon.py +0 -0
  31. {podflow-20250401.1 → podflow-20250402}/podflow/config/correct_channelid.py +0 -0
  32. {podflow-20250401.1 → podflow-20250402}/podflow/config/correct_config.py +0 -0
  33. {podflow-20250401.1 → podflow-20250402}/podflow/config/get_channelid.py +0 -0
  34. {podflow-20250401.1 → podflow-20250402}/podflow/config/get_channelid_id.py +0 -0
  35. {podflow-20250401.1 → podflow-20250402}/podflow/config/get_config.py +0 -0
  36. {podflow-20250401.1 → podflow-20250402}/podflow/download/__init__.py +0 -0
  37. {podflow-20250401.1 → podflow-20250402}/podflow/download/convert_bytes.py +0 -0
  38. {podflow-20250401.1 → podflow-20250402}/podflow/download/delete_part.py +0 -0
  39. {podflow-20250401.1 → podflow-20250402}/podflow/download/dl_aideo_video.py +0 -0
  40. {podflow-20250401.1 → podflow-20250402}/podflow/download/show_progress.py +0 -0
  41. {podflow-20250401.1 → podflow-20250402}/podflow/download/wait_animation.py +0 -0
  42. {podflow-20250401.1 → podflow-20250402}/podflow/download/youtube_and_bilibili_download.py +0 -0
  43. {podflow-20250401.1 → podflow-20250402}/podflow/download_and_build.py +0 -0
  44. {podflow-20250401.1 → podflow-20250402}/podflow/ffmpeg_judge.py +0 -0
  45. {podflow-20250401.1 → podflow-20250402}/podflow/httpfs/__init__.py +0 -0
  46. {podflow-20250401.1 → podflow-20250402}/podflow/httpfs/app_bottle.py +0 -0
  47. {podflow-20250401.1 → podflow-20250402}/podflow/httpfs/browser.py +0 -0
  48. {podflow-20250401.1 → podflow-20250402}/podflow/httpfs/get_channelid.py +0 -0
  49. {podflow-20250401.1 → podflow-20250402}/podflow/httpfs/port_judge.py +0 -0
  50. {podflow-20250401.1 → podflow-20250402}/podflow/httpfs/to_html.py +0 -0
  51. {podflow-20250401.1 → podflow-20250402}/podflow/main.py +0 -0
  52. {podflow-20250401.1 → podflow-20250402}/podflow/main_podcast.py +0 -0
  53. {podflow-20250401.1 → podflow-20250402}/podflow/main_upload.py +0 -0
  54. {podflow-20250401.1 → podflow-20250402}/podflow/makeup/__init__.py +0 -0
  55. {podflow-20250401.1 → podflow-20250402}/podflow/makeup/del_makeup_format_fail.py +0 -0
  56. {podflow-20250401.1 → podflow-20250402}/podflow/makeup/make_up_file.py +0 -0
  57. {podflow-20250401.1 → podflow-20250402}/podflow/makeup/make_up_file_format_mod.py +0 -0
  58. {podflow-20250401.1 → podflow-20250402}/podflow/makeup/make_up_file_mod.py +0 -0
  59. {podflow-20250401.1 → podflow-20250402}/podflow/message/__init__.py +0 -0
  60. {podflow-20250401.1 → podflow-20250402}/podflow/message/backup_zip_save.py +0 -0
  61. {podflow-20250401.1 → podflow-20250402}/podflow/message/create_main_rss.py +0 -0
  62. {podflow-20250401.1 → podflow-20250402}/podflow/message/display_qrcode_and_url.py +0 -0
  63. {podflow-20250401.1 → podflow-20250402}/podflow/message/fail_message_initialize.py +0 -0
  64. {podflow-20250401.1 → podflow-20250402}/podflow/message/format_time.py +0 -0
  65. {podflow-20250401.1 → podflow-20250402}/podflow/message/get_media_name.py +0 -0
  66. {podflow-20250401.1 → podflow-20250402}/podflow/message/get_original_rss.py +0 -0
  67. {podflow-20250401.1 → podflow-20250402}/podflow/message/get_video_format.py +0 -0
  68. {podflow-20250401.1 → podflow-20250402}/podflow/message/get_video_format_multithread.py +0 -0
  69. {podflow-20250401.1 → podflow-20250402}/podflow/message/get_youtube_and_bilibili_video_format.py +0 -0
  70. {podflow-20250401.1 → podflow-20250402}/podflow/message/media_format.py +0 -0
  71. {podflow-20250401.1 → podflow-20250402}/podflow/message/original_rss_fail_print.py +0 -0
  72. {podflow-20250401.1 → podflow-20250402}/podflow/message/rss_create_hash.py +0 -0
  73. {podflow-20250401.1 → podflow-20250402}/podflow/message/title_correction.py +0 -0
  74. {podflow-20250401.1 → podflow-20250402}/podflow/message/update_information_display.py +0 -0
  75. {podflow-20250401.1 → podflow-20250402}/podflow/message/update_youtube_bilibili_rss.py +0 -0
  76. {podflow-20250401.1 → podflow-20250402}/podflow/message/want_retry.py +0 -0
  77. {podflow-20250401.1 → podflow-20250402}/podflow/message/xml_item.py +0 -0
  78. {podflow-20250401.1 → podflow-20250402}/podflow/message/xml_original_item.py +0 -0
  79. {podflow-20250401.1 → podflow-20250402}/podflow/message/xml_rss.py +0 -0
  80. {podflow-20250401.1 → podflow-20250402}/podflow/netscape/__init__.py +0 -0
  81. {podflow-20250401.1 → podflow-20250402}/podflow/netscape/bulid_netscape.py +0 -0
  82. {podflow-20250401.1 → podflow-20250402}/podflow/netscape/get_cookie_dict.py +0 -0
  83. {podflow-20250401.1 → podflow-20250402}/podflow/parse_arguments.py +0 -0
  84. {podflow-20250401.1 → podflow-20250402}/podflow/remove/__init__.py +0 -0
  85. {podflow-20250401.1 → podflow-20250402}/podflow/remove/remove_dir.py +0 -0
  86. {podflow-20250401.1 → podflow-20250402}/podflow/remove/remove_file.py +0 -0
  87. {podflow-20250401.1 → podflow-20250402}/podflow/repair/__init__.py +0 -0
  88. {podflow-20250401.1 → podflow-20250402}/podflow/repair/reverse_log.py +0 -0
  89. {podflow-20250401.1 → podflow-20250402}/podflow/upload/__init__.py +0 -0
  90. {podflow-20250401.1 → podflow-20250402}/podflow/upload/add_upload.py +0 -0
  91. {podflow-20250401.1 → podflow-20250402}/podflow/upload/build_hash.py +0 -0
  92. {podflow-20250401.1 → podflow-20250402}/podflow/upload/get_upload_original.py +0 -0
  93. {podflow-20250401.1 → podflow-20250402}/podflow/upload/linked_client.py +0 -0
  94. {podflow-20250401.1 → podflow-20250402}/podflow/upload/linked_server.py +0 -0
  95. {podflow-20250401.1 → podflow-20250402}/podflow/upload/login.py +0 -0
  96. {podflow-20250401.1 → podflow-20250402}/podflow/upload/time_key.py +0 -0
  97. {podflow-20250401.1 → podflow-20250402}/podflow/upload/update_upload.py +0 -0
  98. {podflow-20250401.1 → podflow-20250402}/podflow/upload/upload_server.py +0 -0
  99. {podflow-20250401.1 → podflow-20250402}/podflow/youtube/__init__.py +0 -0
  100. {podflow-20250401.1 → podflow-20250402}/podflow/youtube/build.py +0 -0
  101. {podflow-20250401.1 → podflow-20250402}/podflow/youtube/get.py +0 -0
  102. {podflow-20250401.1 → podflow-20250402}/podflow/youtube/login.py +0 -0
  103. {podflow-20250401.1 → podflow-20250402}/podflow.egg-info/SOURCES.txt +0 -0
  104. {podflow-20250401.1 → podflow-20250402}/podflow.egg-info/dependency_links.txt +0 -0
  105. {podflow-20250401.1 → podflow-20250402}/podflow.egg-info/entry_points.txt +0 -0
  106. {podflow-20250401.1 → podflow-20250402}/podflow.egg-info/requires.txt +0 -0
  107. {podflow-20250401.1 → podflow-20250402}/podflow.egg-info/top_level.txt +0 -0
  108. {podflow-20250401.1 → podflow-20250402}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: podflow
3
- Version: 20250401.1
3
+ Version: 20250402
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,10 +3,13 @@
3
3
 
4
4
  import math
5
5
  import pyqrcode
6
+ from podflow.httpfs.to_html import qrcode_to_html
6
7
 
7
8
 
8
9
  # 网址二维码模块
9
- def qr_code(data):
10
+ def qr_code(data, to_html=False):
11
+ if to_html:
12
+ qrcode_to_html(data)
10
13
  qr = pyqrcode.create(
11
14
  data,
12
15
  error='L', # 对应于ERROR_CORRECT_L,可选值: 'L','M','Q','H'
@@ -6,15 +6,22 @@ from podflow import gVar
6
6
  from podflow.httpfs.to_html import ansi_to_html
7
7
 
8
8
 
9
- def time_print(text, Top=False, NoEnter=False, Time=True):
9
+ def time_print(text, Top=False, NoEnter=False, Time=True, Url=""):
10
10
  if Time:
11
11
  text = f"{datetime.now().strftime('%H:%M:%S')}|{text}"
12
12
  if Top:
13
13
  text = f"\r{text}"
14
+ if Url:
15
+ text_print = f"{text}\n\033[34m{Url}\033[0m"
16
+ else:
17
+ text_print = f"{text}"
14
18
  if NoEnter:
15
- print(text, end="")
19
+ print(text_print, end="")
16
20
  else:
17
- print(text)
21
+ print(text_print)
22
+
23
+ if Url:
24
+ text = f'{text}<a href="{Url}"><span class="ansi-url">{Url}</span></a>'
18
25
  text = ansi_to_html(text)
19
26
  if not gVar.index_message["enter"] and gVar.index_message["podflow"]:
20
27
  if Top and gVar.index_message["podflow"]:
@@ -1,10 +1,10 @@
1
+
1
2
  # podflow/basic/write_log.py
2
3
  # coding: utf-8
3
4
 
4
5
  import re
5
6
  from datetime import datetime
6
- from podflow import gVar
7
- from podflow.httpfs.to_html import ansi_to_html
7
+ from podflow.basic.time_print import time_print
8
8
 
9
9
 
10
10
  # 日志模块
@@ -15,6 +15,7 @@ def write_log(
15
15
  time_display=True,
16
16
  only_log="",
17
17
  file_name="Podflow.log",
18
+ url=""
18
19
  ):
19
20
  # 获取当前的具体时间
20
21
  current_time = datetime.now()
@@ -36,5 +37,4 @@ def write_log(
36
37
  formatted_time_mini = current_time.strftime("%H:%M:%S")
37
38
  log_print = f"{formatted_time_mini}|{log}" if time_display else f"{log}"
38
39
  log_print = f"{log_print}|{suffix}" if suffix else f"{log_print}"
39
- gVar.index_message["podflow"].append(ansi_to_html(log_print))
40
- print(log_print)
40
+ time_print(log_print, Time=False, Url=url)
@@ -6,7 +6,6 @@ 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
10
9
  from podflow.message.backup_zip_save import backup_zip_save
11
10
  from podflow.message.display_qrcode_and_url import display_qrcode_and_url
12
11
 
@@ -76,11 +75,10 @@ def save_rss():
76
75
  else:
77
76
  overall_url = f"{address}/{filename}.xml"
78
77
  # 调用write_log函数,记录总播客已更新
79
- write_log("总播客已更新", f"地址:\n\033[34m{overall_url}\033[0m")
78
+ write_log("总播客已更新", "地址:", url=overall_url)
80
79
  # 如果gVar.displayed_QRcode中不包含"main",则调用qr_code函数,显示总播客的二维码,并将"main"添加到gVar.displayed_QRcode中
81
80
  if "main" not in gVar.displayed_QRcode:
82
- qr_code(overall_url)
83
- qrcode_to_html(overall_url)
81
+ qr_code(overall_url, True)
84
82
  gVar.displayed_QRcode.append("main")
85
83
 
86
84
  # 备份主rss
@@ -40,6 +40,11 @@
40
40
  }
41
41
  }
42
42
 
43
+ .ansi-url{
44
+ color: #4064a0;
45
+ text-decoration: underline;
46
+ }
47
+
43
48
  .ansi-30m { color: #000000; }
44
49
  .ansi-31m { color: #bb271b; }
45
50
  .ansi-32m { color: #61992e; }
@@ -271,6 +276,52 @@
271
276
  </main>
272
277
  <script>
273
278
  (function() {
279
+ // 生成单个二维码的函数
280
+ function generateQRCodeForNode(container) {
281
+ const rootStyles = getComputedStyle(document.documentElement);
282
+ const textColor = rootStyles.getPropertyValue('--text-color');
283
+ const inputBg = rootStyles.getPropertyValue('--input-bg');
284
+ const url = container.dataset.url;
285
+ container.innerHTML = '';
286
+ if (url) {
287
+ new QRCode(container, {
288
+ text: url,
289
+ width: 128,
290
+ height: 128,
291
+ colorDark: textColor,
292
+ colorLight: inputBg,
293
+ correctLevel: QRCode.CorrectLevel.H
294
+ });
295
+ } else {
296
+ container.textContent = 'URL 未提供';
297
+ }
298
+ }
299
+
300
+ // 为所有存在的二维码容器生成二维码
301
+ function generateQRCodes() {
302
+ const containers = document.querySelectorAll('.qrcode-container');
303
+ containers.forEach(generateQRCodeForNode);
304
+ }
305
+
306
+ // 利用 MutationObserver 动态监听 container 内新增的二维码容器
307
+ function observeQRCodes(container) {
308
+ const observer = new MutationObserver((mutationsList) => {
309
+ mutationsList.forEach(mutation => {
310
+ mutation.addedNodes.forEach(node => {
311
+ if (node.nodeType === Node.ELEMENT_NODE) {
312
+ if (node.classList.contains('qrcode-container')) {
313
+ generateQRCodeForNode(node);
314
+ } else {
315
+ const childContainers = node.querySelectorAll('.qrcode-container');
316
+ childContainers.forEach(generateQRCodeForNode);
317
+ }
318
+ }
319
+ });
320
+ });
321
+ });
322
+ observer.observe(container, { childList: true, subtree: true });
323
+ }
324
+
274
325
  // 缓存常用节点
275
326
  const menu = document.getElementById('menu');
276
327
  const toggleMenuBtn = document.getElementById('toggleMenu');
@@ -286,10 +337,12 @@
286
337
  const pasteBtn = document.getElementById('pasteBtn');
287
338
  const copyBtn = document.getElementById('copyBtn');
288
339
  const clearBtn = document.getElementById('clearBtn');
289
- const qrcodeContainers = document.querySelectorAll('.qrcode-container'); // 获取所有二维码容器
290
340
 
291
341
  let pollingTimer = null;
292
342
 
343
+ // 监听 messageArea 内动态新增的二维码容器
344
+ observeQRCodes(messageArea);
345
+
293
346
  // 菜单切换函数
294
347
  function toggleMenu() {
295
348
  menu.classList.toggle('hidden');
@@ -313,7 +366,7 @@
313
366
  }
314
367
  pageId === 'pageMessage' ? startMessagePolling() : stopMessagePolling();
315
368
  if (pageId === 'pageMessage') {
316
- generateQRCodes(); // 当切换页面时生成二维码
369
+ generateQRCodes(); // 页面切换时生成已有二维码
317
370
  }
318
371
  }
319
372
  }
@@ -404,7 +457,7 @@
404
457
  startMessagePolling();
405
458
 
406
459
  // 表单异步提交(获取 Channel-ID)
407
- inputForm.addEventListener('submit', function(event) {
460
+ inputForm && inputForm.addEventListener('submit', function(event) {
408
461
  event.preventDefault();
409
462
  const content = inputOutput.value;
410
463
  fetch('getid', {
@@ -487,31 +540,6 @@
487
540
  toggleMenuBtn.textContent = '❯';
488
541
  }
489
542
 
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
543
  // 在页面加载完成后首次生成二维码(如果当前显示的是 Channel 页面)
516
544
  window.addEventListener('load', () => {
517
545
  if (pages.pageChannel.style.display === 'block') {
@@ -521,4 +549,4 @@
521
549
  })();
522
550
  </script>
523
551
  </body>
524
- </html>
552
+ </html>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: podflow
3
- Version: 20250401.1
3
+ Version: 20250402
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
@@ -5,7 +5,7 @@ from setuptools import setup, find_packages
5
5
 
6
6
  setup(
7
7
  name="podflow",
8
- version="20250401.1",
8
+ version="20250402",
9
9
  author="gruel_zxz",
10
10
  author_email="zhuxizhouzxz@gmail.com",
11
11
  description="A podcast server that includes YouTube and BiliBili",
File without changes
File without changes
File without changes
File without changes