From 4872007adce335adaeb8a6f6342ce88d065ee325 Mon Sep 17 00:00:00 2001
From: ForgQi <34411314+ForgQi@users.noreply.github.com>
Date: Tue, 28 May 2024 23:12:13 +0800
Subject: [PATCH] add upload delay
---
app/ui/plugins/global.tsx | 9 ++-----
biliup/__init__.py | 6 +++++
biliup/engine/download.py | 54 ++++++---------------------------------
biliup/handler.py | 12 ++++++++-
4 files changed, 27 insertions(+), 54 deletions(-)
diff --git a/app/ui/plugins/global.tsx b/app/ui/plugins/global.tsx
index f3f346d..4b50be8 100644
--- a/app/ui/plugins/global.tsx
+++ b/app/ui/plugins/global.tsx
@@ -128,16 +128,11 @@ const Global: React.FC = () => {
label="下播延迟检测(delay)"
extraText={
- 当检测到主播下播后,延迟一定时间再次检测确认,避免特殊情况提早启动上传导致漏录。
+ 当检测到主播下播后,延迟一定时间再次检测确认,避免特殊情况提早启动上传导致分稿件。
单位:秒
- 默认延迟时间为 0 秒,若没有快速上传的需求,推荐设置
- 5 分钟(300),或按需设置。
-
- 若设置的延迟时间超过 60
- 秒,则会启用分段检测机制,每隔 60
- 秒进行一次开播状态的检测。
+ 默认延迟时间为 0 秒
}
placeholder="0"
diff --git a/biliup/__init__.py b/biliup/__init__.py
index 2139526..57f5b67 100644
--- a/biliup/__init__.py
+++ b/biliup/__init__.py
@@ -53,3 +53,9 @@ if (3, 10, 6) > sys.version_info >= (3, 8) and platform.system() == 'Windows':
proactor_events._ProactorBasePipeTransport.__del__ = silence_event_loop_closed(
proactor_events._ProactorBasePipeTransport.__del__)
+
+
+if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
+ import multiprocessing
+ multiprocessing.freeze_support()
+ print('running in a PyInstaller bundle')
\ No newline at end of file
diff --git a/biliup/engine/download.py b/biliup/engine/download.py
index 3ae7f71..f1e5539 100644
--- a/biliup/engine/download.py
+++ b/biliup/engine/download.py
@@ -291,63 +291,25 @@ class DownloadBase(ABC):
start_time = time.localtime()
# 结束时间
end_time = None
- # 下播延迟检测
- delay = int(config.get('delay', 0))
- # 重试次数
- retry_count = 0
- # delay 重试次数
- retry_count_delay = 0
- # delay 总重试次数 向上取整
- delay_all_retry_count = -(-delay // 60)
with SessionLocal() as db:
self.database_row_id = add_stream_info(db, self.fname, self.url, start_time) # 返回数据库中此行记录的 id
-
- while True:
+ ret = True
+ while ret:
# 下载结果
- ret = False
try:
ret = self.run()
- except:
+ except Exception:
logger.warning(f'下载失败: {self.__class__.__name__} - {self.fname}', exc_info=True)
finally:
self.close()
- if ret:
- # 下载模式如果下载成功直接跳出
- if self.is_download:
- break
- # 成功下载重置重试次数
- retry_count = 0
- retry_count_delay = 0
- # 最后一次下载完成时间
- end_time = time.localtime()
- else:
- if retry_count < 3:
- retry_count += 1
- logger.info(
- f'获取流失败: {self.__class__.__name__} - {self.fname},重试次数 {retry_count} / 3,等待 10 秒')
- time.sleep(10)
- continue
+ # 下载模式跳过下播延迟检测
+ if self.is_download:
+ break
- # 下载模式跳过下播延迟检测
- if self.is_download:
- break
-
- if delay and retry_count_delay < delay_all_retry_count:
- retry_count_delay += 1
- if delay < 60:
- logger.info(
- f'下播延迟检测: {self.__class__.__name__} - {self.fname},将在 {delay} 秒后检测开播状态')
- time.sleep(delay)
- else:
- logger.info(
- f'下播延迟检测: {self.__class__.__name__} - {self.fname},每隔 60 秒检测开播状态,检测次数 {retry_count_delay} / {delay_all_retry_count}')
- time.sleep(60)
- continue
- else:
- # 未设置下播延迟检测 or 下播检测次数已到
- break
+ # 最后一次下载完成时间
+ end_time = time.localtime()
self.download_cover(
time.strftime(self.gen_download_filename().encode("unicode-escape").decode(), end_time if end_time else time.localtime()
diff --git a/biliup/handler.py b/biliup/handler.py
index 526517c..cb8400f 100644
--- a/biliup/handler.py
+++ b/biliup/handler.py
@@ -68,6 +68,7 @@ def process(name, url):
@event_manager.register(DOWNLOADED, block='Asynchronous1')
def processed(stream_info):
name = stream_info['name']
+ url = stream_info['url']
# 下载后处理 上传前处理
downloaded_processor = config['streamers'].get(name, {}).get('downloaded_processor')
if downloaded_processor:
@@ -75,7 +76,7 @@ def processed(stream_info):
file_list = UploadBase.file_list(name)
processor(downloaded_processor, json.dumps({
"name": name,
- "url": stream_info.get('url'),
+ "url": url,
"room_title": stream_info.get('title', name),
"start_time": int(time.mktime(stream_info.get('date', default_date))),
"end_time": int(time.mktime(stream_info.get('end_time', default_date))),
@@ -92,6 +93,15 @@ def process_upload(stream_info):
url_upload_count = context['url_upload_count']
# 上传开始
try:
+ url_status = context['PluginInfo'].url_status
+ # 上传延迟检测
+ delay = int(config.get('delay', 0))
+ if delay:
+ logger.info(f'{name} -> {url} {delay}s 后检测是否上传')
+ time.sleep(delay)
+ if url_status[url] == 1:
+ # 上传延迟检测,启用的话会在一段时间后检测是否存在下载任务,若存在则跳过本次上传
+ return logger.info(f'{name} -> {url} 存在下载任务, 跳过本次上传')
file_list = UploadBase.file_list(name)
if len(file_list) <= 0:
logger.debug("无需上传")