From 89ba4163fcd7d548404776830ccbfb54b1b733b8 Mon Sep 17 00:00:00 2001 From: nanxun Date: Mon, 27 Apr 2026 20:33:12 +0800 Subject: [PATCH] feat: improve polling recovery and session cleanup --- frontend/src/types.ts | 4 +- frontend/src/views/LiveRoomsView.vue | 12 +- frontend/src/views/LogsView.vue | 55 +++++- frontend/src/views/RecordTasksView.vue | 165 ++++++++++++++---- frontend/src/views/RecoveryView.vue | 9 +- frontend/src/views/SettingsView.vue | 18 +- .../Common/AutoStartDecisionCodes.cs | 4 + .../Common/ChinaTime.cs | 37 ++++ .../Models/RecordTasks/RecordSessionModels.cs | 5 + .../Models/Settings/SettingsModels.cs | 12 +- .../Services/RecordService.cs | 7 +- .../Services/RecordSessionService.cs | 63 +++++++ .../Services/SystemSettingsService.cs | 17 +- .../Persistence/DatabaseInitializer.cs | 4 +- .../Services/EmailNotificationService.cs | 9 +- .../Services/EventScriptService.cs | 7 +- .../Services/FfmpegService.Runtime.cs | 5 + .../Services/FfmpegService.cs | 3 + .../Services/ILiveRoomPollingSignal.cs | 6 + .../LiveRoomPollingBackgroundService.cs | 65 ++++++- .../Controllers/RecordSessionsController.cs | 6 + src/LiveRecorder.WebApi/Program.cs | 4 +- 22 files changed, 442 insertions(+), 75 deletions(-) create mode 100644 src/LiveRecorder.Application/Common/ChinaTime.cs create mode 100644 src/LiveRecorder.Infrastructure/Services/ILiveRoomPollingSignal.cs diff --git a/frontend/src/types.ts b/frontend/src/types.ts index c92fd7b..22c0e4d 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -572,7 +572,9 @@ export const autoStartDecisionLabelMap: Record = { skipped_active_session: "已有活动会话", skipped_offline: "房间未开播", skipped_debounce: "触发防抖中", - failed_startup: "启动失败" + failed_startup: "启动失败", + poll_failed_transient: "轮询临时失败", + poll_failed: "轮询失败" }; export const platformLabelMap: Record = { diff --git a/frontend/src/views/LiveRoomsView.vue b/frontend/src/views/LiveRoomsView.vue index 73e0fdb..6dd8b7d 100644 --- a/frontend/src/views/LiveRoomsView.vue +++ b/frontend/src/views/LiveRoomsView.vue @@ -517,11 +517,16 @@ function autoStartDecisionTagType(code?: string) { return "success"; } - if (code === "failed_startup") { + if (code === "failed_startup" || code === "poll_failed") { return "danger"; } - if (code === "skipped_storage" || code === "skipped_active_session" || code === "skipped_debounce") { + if ( + code === "skipped_storage" || + code === "skipped_active_session" || + code === "skipped_debounce" || + code === "poll_failed_transient" + ) { return "warning"; } @@ -1242,8 +1247,7 @@ onBeforeUnmount(() => { } .rooms-table-shell { - margin-inline: -4px; - padding-inline: 4px; + overflow: visible; } .rooms-table { diff --git a/frontend/src/views/LogsView.vue b/frontend/src/views/LogsView.vue index bcf342b..7058eeb 100644 --- a/frontend/src/views/LogsView.vue +++ b/frontend/src/views/LogsView.vue @@ -1,10 +1,12 @@