aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Library/VersionResumeData.cs
blob: 455fe739cefe30b25a7390de7fe305fea580c781 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Dto;

namespace MediaBrowser.Controller.Library
{
    /// <summary>
    /// 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>
    public record VersionResumeData(UserItemData UserData)
    {
        /// <summary>
        /// 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.Played = dto.Played || UserData.Played;

            if ((UserData.LastPlayedDate ?? DateTime.MinValue) > (dto.LastPlayedDate ?? DateTime.MinValue))
            {
                dto.LastPlayedDate = UserData.LastPlayedDate;
            }
        }
    }
}