Added sync group page and settings
Build Plugin / build (push) Failing after 10s

This commit is contained in:
2025-12-14 11:25:58 +01:00
parent 52120529ff
commit 9723c13bd3
6 changed files with 529 additions and 3 deletions
@@ -5,6 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Data.Enums;
using Jellyfin.Plugin.JellyLMS.Models;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Session;
using Microsoft.Extensions.DependencyInjection;
@@ -177,13 +178,15 @@ public class LmsDeviceDiscoveryService : IHostedService, IDisposable
var isNew = !_registeredDeviceIds.ContainsKey(player.MacAddress);
// Add our controller to the session using EnsureController pattern
var libraryManager = _serviceProvider.GetRequiredService<ILibraryManager>();
var (controller, created) = session.EnsureController<LmsSessionController>(
s => new LmsSessionController(
_logger,
_lmsClient,
player,
s,
sessionManager));
sessionManager,
libraryManager));
if (created)
{
@@ -3,6 +3,8 @@ using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Plugin.JellyLMS.Models;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Session;
using Microsoft.Extensions.Logging;
@@ -20,8 +22,10 @@ public class LmsSessionController : ISessionController, IDisposable
private readonly LmsPlayer _player;
private readonly SessionInfo _session;
private readonly ISessionManager _sessionManager;
private readonly ILibraryManager _libraryManager;
private Timer? _progressTimer;
private bool _disposed;
private BaseItem? _currentItem;
/// <summary>
/// Initializes a new instance of the <see cref="LmsSessionController"/> class.
@@ -31,18 +35,21 @@ public class LmsSessionController : ISessionController, IDisposable
/// <param name="player">The LMS player this controller manages.</param>
/// <param name="session">The Jellyfin session associated with this controller.</param>
/// <param name="sessionManager">The session manager for reporting playback events.</param>
/// <param name="libraryManager">The library manager for item lookups.</param>
public LmsSessionController(
ILogger logger,
ILmsApiClient lmsClient,
LmsPlayer player,
SessionInfo session,
ISessionManager sessionManager)
ISessionManager sessionManager,
ILibraryManager libraryManager)
{
_logger = logger;
_lmsClient = lmsClient;
_player = player;
_session = session;
_sessionManager = sessionManager;
_libraryManager = libraryManager;
}
/// <summary>
@@ -145,6 +152,9 @@ public class LmsSessionController : ISessionController, IDisposable
IsPlaying = true;
IsPaused = false;
// Look up the item for duration info
_currentItem = _libraryManager.GetItemById(itemId);
// Seek to start position if specified
var startPositionTicks = 0L;
if (playRequest.StartPositionTicks.HasValue && playRequest.StartPositionTicks.Value > 0)
@@ -177,7 +187,10 @@ public class LmsSessionController : ISessionController, IDisposable
IsMuted = false
};
_logger.LogInformation("Reporting playback start for item {ItemId}", itemId);
_logger.LogInformation(
"Reporting playback start for item {ItemId}, duration: {Duration}",
itemId,
_currentItem?.RunTimeTicks);
await _sessionManager.OnPlaybackStart(startInfo).ConfigureAwait(false);
}
catch (Exception ex)