From 54a50ef04b5ffc0205a29f893094d00a99ea8f45 Mon Sep 17 00:00:00 2001 From: redxef Date: Wed, 26 Feb 2025 22:43:57 +0100 Subject: [PATCH] feat: add logging for crashed programs, don't crash the whole process. --- .../ScheduledTasks/GenerateCollection.cs | 16 +++++++++++----- .../ScheduledTasks/GeneratePlaylist.cs | 16 +++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GenerateCollection.cs b/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GenerateCollection.cs index 3930a33..0d36148 100644 --- a/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GenerateCollection.cs +++ b/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GenerateCollection.cs @@ -72,11 +72,17 @@ namespace Jellyfin.Plugin.SmartPlaylist.ScheduledTasks { executor.environment.Set("*user*", Lisp.Object.FromBase(user)); foreach (var i in items) { executor.environment.Set("*item*", Lisp.Object.FromBase(i)); - var r = executor.eval(expression); - _logger.LogTrace("Item {0} evaluated to {1}", i, r.ToString()); - if ((r is not Lisp.Boolean r_bool) || (r_bool.Value())) { - _logger.LogDebug("Added '{0}' to Smart Collection {1}", i, name); - results.Add(i); + try { + var r = executor.eval(expression); + _logger.LogTrace("Item {0} evaluated to {1}", i, r.ToString()); + if ((r is not Lisp.Boolean r_bool) || (r_bool.Value())) { + _logger.LogDebug("Added '{0}' to Smart Collection {1}", i, name); + results.Add(i); + } + } catch (Exception e) { + _logger.LogError("Program crashed:\n{0}", expression.ToString()); + _logger.LogError("Environment:\n{0}", executor.environment); + _logger.LogError("Traceback:\n{0}", e.ToString()); } } executor = SetupExecutor(); diff --git a/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GeneratePlaylist.cs b/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GeneratePlaylist.cs index 6029ac9..7161321 100644 --- a/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GeneratePlaylist.cs +++ b/Jellyfin.Plugin.SmartPlaylist/ScheduledTasks/GeneratePlaylist.cs @@ -78,11 +78,17 @@ namespace Jellyfin.Plugin.SmartPlaylist.ScheduledTasks { executor.environment.Set("*user*", Lisp.Object.FromBase(user)); foreach (var i in items) { executor.environment.Set("*item*", Lisp.Object.FromBase(i)); - var r = executor.eval(expression); - _logger.LogTrace("Item {0} evaluated to {1}", i, r.ToString()); - if ((r is not Lisp.Boolean r_bool) || (r_bool.Value())) { - _logger.LogDebug("Added '{0}' to Smart Playlist {1}", i, smartPlaylist.Name); - results.Add(i); + try { + var r = executor.eval(expression); + _logger.LogTrace("Item {0} evaluated to {1}", i, r.ToString()); + if ((r is not Lisp.Boolean r_bool) || (r_bool.Value())) { + _logger.LogDebug("Added '{0}' to Smart Playlist {1}", i, smartPlaylist.Name); + results.Add(i); + } + } catch (Exception e) { + _logger.LogError("Program crashed:\n{0}", expression.ToString()); + _logger.LogError("Environment:\n{0}", executor.environment); + _logger.LogError("Traceback:\n{0}", e.ToString()); } } executor = SetupExecutor();