This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user