Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Continue Watching With Multiple Local Versions Fix #11285

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,32 @@ public UserItemData GetUserData(long userId, string key)
}
}

public UserItemData GetUserDataByPresentationUniqueKey(long userId, string key)
{
if (userId <= 0)
{
throw new ArgumentNullException(nameof(userId));
}

ArgumentException.ThrowIfNullOrEmpty(key);

using (var connection = GetConnection())
{
using (var statement = connection.PrepareStatement("select key,userid,rating,played,playCount,isFavorite,playbackPositionTicks,lastPlayedDate,AudioStreamIndex,SubtitleStreamIndex from UserDatas where REPLACE(Key, '-', '')=@Key and userId=@UserId"))
{
statement.TryBind("@UserId", userId);
statement.TryBind("@Key", key);

foreach (var row in statement.ExecuteQuery())
{
return ReadRow(row);
}
}

return null;
}
}

public UserItemData GetUserData(long userId, List<string> keys)
{
ArgumentNullException.ThrowIfNull(keys);
Expand Down
6 changes: 6 additions & 0 deletions Emby.Server.Implementations/Library/UserDataManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,12 @@ public UserItemData GetUserData(User user, BaseItem item)
public UserItemDataDto GetUserDataDto(BaseItem item, User user)
=> GetUserDataDto(item, null, user, new DtoOptions());

/// <inheritdoc />
public UserItemData GetUserDataByPresentationUniqueKey(User user, BaseItem item)
{
return _repository.GetUserDataByPresentationUniqueKey(user.InternalId, item.PresentationUniqueKey);
}

/// <inheritdoc />
public UserItemDataDto GetUserDataDto(BaseItem item, BaseItemDto? itemDto, User user, DtoOptions options)
{
Expand Down
22 changes: 22 additions & 0 deletions Jellyfin.Api/Controllers/ItemsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -891,6 +891,28 @@ public ActionResult<QueryResult<BaseItemDto>> GetResumeItems(
ExcludeItemIds = excludeItemIds
});

var videoItems = itemsResult.Items.Where(item => item.MediaType == MediaType.Video);

foreach (var videoItem in videoItems)
{
var childItemIds = ((Video)videoItem).GetLocalAlternateVersionIds();

foreach (var childItemId in childItemIds)
{
var item = _libraryManager.GetItemById(childItemId);

if (item != null)
{
var userData = _userDataRepository.GetUserDataByPresentationUniqueKey(user, item);

if (item != null && userData != null && userData.PlaybackPositionTicks > 0)
{
itemsResult.Items = itemsResult.Items.Append(item).ToList();
}
}
}
}

var returnItems = _dtoService.GetBaseItemDtos(itemsResult.Items, dtoOptions, user);

return new QueryResult<BaseItemDto>(
Expand Down
8 changes: 8 additions & 0 deletions MediaBrowser.Controller/Library/IUserDataManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,14 @@ public interface IUserDataManager
/// <returns>User data.</returns>
UserItemData GetUserData(User user, BaseItem item);

/// <summary>
/// Gets the user data by presentation unique key..
/// </summary>
/// <param name="user">User to use.</param>
/// <param name="item">Item to use.</param>
/// <returns>User data.</returns>
UserItemData GetUserDataByPresentationUniqueKey(User user, BaseItem item);

/// <summary>
/// Gets the user data dto.
/// </summary>
Expand Down
8 changes: 8 additions & 0 deletions MediaBrowser.Controller/Persistence/IUserDataRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ public interface IUserDataRepository : IDisposable
/// <returns>The user data.</returns>
UserItemData GetUserData(long userId, List<string> keys);

/// <summary>
/// Gets the user data.
/// </summary>
/// <param name="userId">The user id.</param>
/// <param name="key">The key.</param>
/// <returns>The user data.</returns>
UserItemData GetUserDataByPresentationUniqueKey(long userId, string key);

/// <summary>
/// Return all user data associated with the given user.
/// </summary>
Expand Down
Loading