Skip to content

Commit 8fbbde7

Browse files
committed
fix: handle component update errors when page disconnects
1 parent 3123364 commit 8fbbde7

1 file changed

Lines changed: 57 additions & 26 deletions

File tree

app/core/stream_manager.py

Lines changed: 57 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -233,12 +233,16 @@ async def start_ffmpeg(
233233
if return_code not in safe_return_code and stderr:
234234
logger.error(f"FFmpeg Stderr Output: {str(stderr.decode()).splitlines()[0]}")
235235
self.recording.status_info = RecordingStatus.RECORDING_ERROR
236-
self.app.record_manager.stop_recording(self.recording)
237-
await self.app.record_card_manager.update_card(self.recording)
238-
self.app.page.pubsub.send_others_on_topic("update", self.recording)
239-
await self.app.snack_bar.show_snack_bar(
240-
record_name + " " + self._["record_stream_error"], duration=2000
241-
)
236+
237+
try:
238+
self.app.record_manager.stop_recording(self.recording)
239+
await self.app.record_card_manager.update_card(self.recording)
240+
self.app.page.pubsub.send_others_on_topic("update", self.recording)
241+
await self.app.snack_bar.show_snack_bar(
242+
record_name + " " + self._["record_stream_error"], duration=2000
243+
)
244+
except Exception as e:
245+
logger.debug(f"Failed to update UI: {e}")
242246

243247
if return_code in safe_return_code:
244248
if self.recording.monitor_status:
@@ -255,36 +259,63 @@ async def start_ffmpeg(
255259
self.recording.recording = False
256260
logger.success(f"Live recording completed: {record_name}")
257261

258-
self.recording.update({"display_title": display_title})
259-
await self.app.record_card_manager.update_card(self.recording)
260-
self.app.page.pubsub.send_others_on_topic("update", self.recording)
261-
if self.app.recording_enabled and process in self.app.process_manager.ffmpeg_processes:
262-
self.app.page.run_task(self.app.record_manager.check_if_live, self.recording)
263-
else:
264-
self.recording.status_info = RecordingStatus.NOT_RECORDING_SPACE
262+
try:
263+
self.recording.update({"display_title": display_title})
264+
await self.app.record_card_manager.update_card(self.recording)
265+
self.app.page.pubsub.send_others_on_topic("update", self.recording)
266+
if self.app.recording_enabled and process in self.app.process_manager.ffmpeg_processes:
267+
self.app.page.run_task(self.app.record_manager.check_if_live, self.recording)
268+
else:
269+
self.recording.status_info = RecordingStatus.NOT_RECORDING_SPACE
270+
except Exception as e:
271+
logger.debug(f"Failed to update UI: {e}")
265272

266273
if self.user_config.get("convert_to_mp4") and self.save_format == "ts":
267274
if self.segment_record:
268275
file_paths = utils.get_file_paths(os.path.dirname(save_file_path))
269276
prefix = os.path.basename(save_file_path).rsplit("_", maxsplit=1)[0]
270277
for path in file_paths:
271278
if prefix in path:
272-
self.app.page.run_task(self.converts_mp4, path, self.user_config["delete_original"])
279+
try:
280+
self.app.page.run_task(
281+
self.converts_mp4, path, self.user_config["delete_original"]
282+
)
283+
except Exception as e:
284+
logger.error(f"Failed to convert video: {e}")
285+
await self.converts_mp4(path, self.user_config["delete_original"])
273286
else:
274-
self.app.page.run_task(self.converts_mp4, save_file_path, self.user_config["delete_original"])
287+
try:
288+
self.app.page.run_task(
289+
self.converts_mp4, save_file_path, self.user_config["delete_original"]
290+
)
291+
except Exception as e:
292+
logger.error(f"Failed to convert video: {e}")
293+
await self.converts_mp4(save_file_path, self.user_config["delete_original"])
275294

276295
if self.user_config.get("execute_custom_script") and script_command:
277296
logger.info("Prepare a direct script in the background")
278-
self.app.page.run_task(
279-
self.custom_script_execute,
280-
script_command,
281-
record_name,
282-
save_file_path,
283-
save_type,
284-
self.segment_record,
285-
self.user_config.get("convert_to_mp4")
286-
)
287-
logger.success("Successfully added script execution")
297+
try:
298+
self.app.page.run_task(
299+
self.custom_script_execute,
300+
script_command,
301+
record_name,
302+
save_file_path,
303+
save_type,
304+
self.segment_record,
305+
self.user_config.get("convert_to_mp4")
306+
)
307+
logger.success("Successfully added script execution")
308+
except Exception as e:
309+
logger.error(f"Failed to execute custom script: {e}")
310+
await self.custom_script_execute(
311+
script_command,
312+
record_name,
313+
save_file_path,
314+
save_type,
315+
self.segment_record,
316+
self.user_config.get("convert_to_mp4")
317+
)
318+
288319

289320
except Exception as e:
290321
logger.error(f"An error occurred during the subprocess execution: {e}")
@@ -409,4 +440,4 @@ def get_headers_params(live_url, platform_key):
409440
"lang": "referer:https://www.lang.live",
410441
"shopee": "origin:" + live_domain
411442
}
412-
return record_headers.get(platform_key)
443+
return record_headers.get(platform_key)

0 commit comments

Comments
 (0)