aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2026-06-19 21:51:57 +0200
committerShadowghost <Ghost_of_Stone@web.de>2026-06-19 21:51:57 +0200
commit0fb042b7403ebd7578b696aba35ba0c582ccf6ba (patch)
treed7e46069c8500ecf5680283748448fc465b3ec6f /MediaBrowser.Controller
parenta5706c2fa6b09019828b2a9c5c6822f5bfa3327f (diff)
Surface the played version for resume
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Library/VersionResumeData.cs20
1 files changed, 10 insertions, 10 deletions
diff --git a/MediaBrowser.Controller/Library/VersionResumeData.cs b/MediaBrowser.Controller/Library/VersionResumeData.cs
index ca8a499d97..455fe739ce 100644
--- a/MediaBrowser.Controller/Library/VersionResumeData.cs
+++ b/MediaBrowser.Controller/Library/VersionResumeData.cs
@@ -1,29 +1,29 @@
+using System;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Dto;
namespace MediaBrowser.Controller.Library
{
/// <summary>
- /// The user data of the alternate version that should drive resume for a multi-version item.
+ /// The user data of the most recently played alternate version that should drive the completion state of a multi-version item.
/// </summary>
/// <param name="UserData">The resume version's user data.</param>
- /// <param name="RunTimeTicks">The resume version's runtime, used for the progress percentage.</param>
- public record VersionResumeData(UserItemData UserData, long? RunTimeTicks)
+ public record VersionResumeData(UserItemData UserData)
{
/// <summary>
- /// Applies the resume version's playback state to the supplied user data dto, so that an item
- /// whose most recent progress lives on an alternate version still reports that progress.
+ /// Merges the most recently played version's completion state into the supplied user data dto.
+ /// Only completion (played) propagates to the primary; the in-progress resume position stays on
+ /// the version that owns it, which is surfaced directly (e.g. in resume queries) so that playback
+ /// always targets the correct version rather than resuming the primary at another version's offset.
/// </summary>
/// <param name="dto">The user data dto to update.</param>
public void ApplyTo(UserItemDataDto dto)
{
- dto.PlaybackPositionTicks = UserData.PlaybackPositionTicks;
- dto.Played = UserData.Played;
- dto.LastPlayedDate = UserData.LastPlayedDate;
+ dto.Played = dto.Played || UserData.Played;
- if (RunTimeTicks > 0 && UserData.PlaybackPositionTicks > 0)
+ if ((UserData.LastPlayedDate ?? DateTime.MinValue) > (dto.LastPlayedDate ?? DateTime.MinValue))
{
- dto.PlayedPercentage = 100.0 * UserData.PlaybackPositionTicks / RunTimeTicks.Value;
+ dto.LastPlayedDate = UserData.LastPlayedDate;
}
}
}