mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-05-24 02:02:29 -04:00
Fixed TopParent not beeing migrated
This commit is contained in:
parent
911139e2d5
commit
2d4f7f725f
@ -144,9 +144,15 @@ namespace Emby.Server.Implementations.EntryPoints
|
||||
.Select(i =>
|
||||
{
|
||||
var dto = _userDataManager.GetUserDataDto(i, user);
|
||||
if (dto is null)
|
||||
{
|
||||
return null!;
|
||||
}
|
||||
|
||||
dto.ItemId = i.Id;
|
||||
return dto;
|
||||
})
|
||||
.Where(e => e is not null)
|
||||
.ToArray()
|
||||
};
|
||||
}
|
||||
|
@ -224,13 +224,18 @@ namespace Emby.Server.Implementations.Library
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public UserItemDataDto GetUserDataDto(BaseItem item, User user)
|
||||
public UserItemDataDto? GetUserDataDto(BaseItem item, User user)
|
||||
=> GetUserDataDto(item, null, user, new DtoOptions());
|
||||
|
||||
/// <inheritdoc />
|
||||
public UserItemDataDto GetUserDataDto(BaseItem item, BaseItemDto? itemDto, User user, DtoOptions options)
|
||||
public UserItemDataDto? GetUserDataDto(BaseItem item, BaseItemDto? itemDto, User user, DtoOptions options)
|
||||
{
|
||||
var userData = GetUserData(user, item) ?? throw new InvalidOperationException("Did not expect UserData to be null.");
|
||||
var userData = GetUserData(user, item);
|
||||
if (userData is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var dto = GetUserItemDataDto(userData);
|
||||
|
||||
item.FillUserDataDtoValues(dto, userData, itemDto, user, options);
|
||||
|
@ -967,7 +967,7 @@ public class ItemsController : BaseJellyfinApiController
|
||||
[HttpGet("UserItems/{itemId}/UserData")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public ActionResult<UserItemDataDto> GetItemUserData(
|
||||
public ActionResult<UserItemDataDto?> GetItemUserData(
|
||||
[FromQuery] Guid? userId,
|
||||
[FromRoute, Required] Guid itemId)
|
||||
{
|
||||
@ -1005,7 +1005,7 @@ public class ItemsController : BaseJellyfinApiController
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
[Obsolete("Kept for backwards compatibility")]
|
||||
[ApiExplorerSettings(IgnoreApi = true)]
|
||||
public ActionResult<UserItemDataDto> GetItemUserDataLegacy(
|
||||
public ActionResult<UserItemDataDto?> GetItemUserDataLegacy(
|
||||
[FromRoute, Required] Guid userId,
|
||||
[FromRoute, Required] Guid itemId)
|
||||
=> GetItemUserData(userId, itemId);
|
||||
@ -1022,7 +1022,7 @@ public class ItemsController : BaseJellyfinApiController
|
||||
[HttpPost("UserItems/{itemId}/UserData")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public ActionResult<UserItemDataDto> UpdateItemUserData(
|
||||
public ActionResult<UserItemDataDto?> UpdateItemUserData(
|
||||
[FromQuery] Guid? userId,
|
||||
[FromRoute, Required] Guid itemId,
|
||||
[FromBody, Required] UpdateUserItemDataDto userDataDto)
|
||||
@ -1064,7 +1064,7 @@ public class ItemsController : BaseJellyfinApiController
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
[Obsolete("Kept for backwards compatibility")]
|
||||
[ApiExplorerSettings(IgnoreApi = true)]
|
||||
public ActionResult<UserItemDataDto> UpdateItemUserDataLegacy(
|
||||
public ActionResult<UserItemDataDto?> UpdateItemUserDataLegacy(
|
||||
[FromRoute, Required] Guid userId,
|
||||
[FromRoute, Required] Guid itemId,
|
||||
[FromBody, Required] UpdateUserItemDataDto userDataDto)
|
||||
|
@ -513,7 +513,7 @@ public class PlaystateController : BaseJellyfinApiController
|
||||
item.MarkUnplayed(user);
|
||||
}
|
||||
|
||||
return _userDataRepository.GetUserDataDto(item, user);
|
||||
return _userDataRepository.GetUserDataDto(item, user)!;
|
||||
}
|
||||
|
||||
private PlayMethod ValidatePlayMethod(PlayMethod method, string? playSessionId)
|
||||
|
@ -670,7 +670,7 @@ public class UserLibraryController : BaseJellyfinApiController
|
||||
_userDataRepository.SaveUserData(user, item, data, UserDataSaveReason.UpdateUserRating, CancellationToken.None);
|
||||
}
|
||||
|
||||
return _userDataRepository.GetUserDataDto(item, user);
|
||||
return _userDataRepository.GetUserDataDto(item, user)!;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -691,6 +691,6 @@ public class UserLibraryController : BaseJellyfinApiController
|
||||
_userDataRepository.SaveUserData(user, item, data, UserDataSaveReason.UpdateUserRating, CancellationToken.None);
|
||||
}
|
||||
|
||||
return _userDataRepository.GetUserDataDto(item, user);
|
||||
return _userDataRepository.GetUserDataDto(item, user)!;
|
||||
}
|
||||
}
|
||||
|
@ -227,8 +227,8 @@ public sealed class BaseItemRepository(
|
||||
.Include(e => e.Provider)
|
||||
.Include(e => e.Images)
|
||||
.Include(e => e.LockedFields);
|
||||
dbQuery = TranslateQuery(dbQuery, context, filter)
|
||||
.DistinctBy(e => e.Id);
|
||||
dbQuery = TranslateQuery(dbQuery, context, filter);
|
||||
// .DistinctBy(e => e.Id);
|
||||
if (filter.EnableTotalRecordCount)
|
||||
{
|
||||
result.TotalRecordCount = dbQuery.Count();
|
||||
@ -1040,7 +1040,7 @@ public sealed class BaseItemRepository(
|
||||
}
|
||||
else
|
||||
{
|
||||
baseQuery = baseQuery.Where(e => queryTopParentIds.Any(w => w == e.TopParentId!.Value));
|
||||
baseQuery = baseQuery.Where(e => queryTopParentIds.Contains(e.TopParentId!.Value));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ public class MigrateLibraryDb : IMigrationRoutine
|
||||
stopwatch.Restart();
|
||||
|
||||
_logger.LogInformation("Start moving TypedBaseItem.");
|
||||
var typedBaseItemsQuery = "SELECT guid, type, data, StartDate, EndDate, ChannelId, IsMovie, IsSeries, EpisodeTitle, IsRepeat, CommunityRating, CustomRating, IndexNumber, IsLocked, PreferredMetadataLanguage, PreferredMetadataCountryCode, Width, Height, DateLastRefreshed, Name, Path, PremiereDate, Overview, ParentIndexNumber, ProductionYear, OfficialRating, ForcedSortName, RunTimeTicks, Size, DateCreated, DateModified, Genres, ParentId, Audio, ExternalServiceId, IsInMixedFolder, DateLastSaved, LockedFields, Studios, Tags, TrailerTypes, OriginalTitle, PrimaryVersionId, DateLastMediaAdded, Album, LUFS, NormalizationGain, CriticRating, IsVirtualItem, SeriesName, UserDataKey, SeasonName, SeasonId, SeriesId, PresentationUniqueKey, InheritedParentalRatingValue, ExternalSeriesId, Tagline, ProviderIds, Images, ProductionLocations, ExtraIds, TotalBitrate, ExtraType, Artists, AlbumArtists, ExternalId, SeriesPresentationUniqueKey, ShowId, OwnerId FROM TypedBaseItems";
|
||||
var typedBaseItemsQuery = "SELECT guid, type, data, StartDate, EndDate, ChannelId, IsMovie, IsSeries, EpisodeTitle, IsRepeat, CommunityRating, CustomRating, IndexNumber, IsLocked, PreferredMetadataLanguage, PreferredMetadataCountryCode, Width, Height, DateLastRefreshed, Name, Path, PremiereDate, Overview, ParentIndexNumber, ProductionYear, OfficialRating, ForcedSortName, RunTimeTicks, Size, DateCreated, DateModified, Genres, ParentId, TopParentId, Audio, ExternalServiceId, IsInMixedFolder, DateLastSaved, LockedFields, Studios, Tags, TrailerTypes, OriginalTitle, PrimaryVersionId, DateLastMediaAdded, Album, LUFS, NormalizationGain, CriticRating, IsVirtualItem, SeriesName, UserDataKey, SeasonName, SeasonId, SeriesId, PresentationUniqueKey, InheritedParentalRatingValue, ExternalSeriesId, Tagline, ProviderIds, Images, ProductionLocations, ExtraIds, TotalBitrate, ExtraType, Artists, AlbumArtists, ExternalId, SeriesPresentationUniqueKey, ShowId, OwnerId FROM TypedBaseItems";
|
||||
dbContext.BaseItems.ExecuteDelete();
|
||||
|
||||
var legacyBaseItemWithUserKeys = new Dictionary<string, BaseItemEntity>();
|
||||
@ -798,6 +798,11 @@ public class MigrateLibraryDb : IMigrationRoutine
|
||||
entity.ParentId = parentId;
|
||||
}
|
||||
|
||||
if (reader.TryGetGuid(index++, out var topParentId))
|
||||
{
|
||||
entity.TopParentId = topParentId;
|
||||
}
|
||||
|
||||
if (reader.TryGetString(index++, out var audioString) && Enum.TryParse<ProgramAudioEntity>(audioString, out var audioType))
|
||||
{
|
||||
entity.Audio = audioType;
|
||||
|
@ -52,7 +52,7 @@ namespace MediaBrowser.Controller.Library
|
||||
/// <param name="item">Item to use.</param>
|
||||
/// <param name="user">User to use.</param>
|
||||
/// <returns>User data dto.</returns>
|
||||
UserItemDataDto GetUserDataDto(BaseItem item, User user);
|
||||
UserItemDataDto? GetUserDataDto(BaseItem item, User user);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the user data dto.
|
||||
@ -62,7 +62,7 @@ namespace MediaBrowser.Controller.Library
|
||||
/// <param name="user">User to use.</param>
|
||||
/// <param name="options">Dto options to use.</param>
|
||||
/// <returns>User data dto.</returns>
|
||||
UserItemDataDto GetUserDataDto(BaseItem item, BaseItemDto? itemDto, User user, DtoOptions options);
|
||||
UserItemDataDto? GetUserDataDto(BaseItem item, BaseItemDto? itemDto, User user, DtoOptions options);
|
||||
|
||||
/// <summary>
|
||||
/// Updates playstate for an item and returns true or false indicating if it was played to completion.
|
||||
|
Loading…
x
Reference in New Issue
Block a user