Files
sm-emby-share/lib/features/detail/model/selected_episode_merge.dart
T

39 lines
1.2 KiB
Dart
Raw Normal View History

2026-07-14 11:11:36 +08:00
import '../../../core/contracts/library.dart';
EmbyRawItem mergeSelectedEpisodeDetail({
required EmbyRawItem detail,
required EmbyRawItem listItem,
}) {
final mergedRunTime = detail.RunTimeTicks ?? listItem.RunTimeTicks;
final mergedUserData = _mergeUserData(detail.UserData, listItem.UserData);
if (mergedRunTime == detail.RunTimeTicks &&
identical(mergedUserData, detail.UserData)) {
return detail;
}
return detail.copyWith(RunTimeTicks: mergedRunTime, UserData: mergedUserData);
}
EmbyRawUserData? _mergeUserData(
EmbyRawUserData? detail,
EmbyRawUserData? listItem,
) {
if (listItem == null) return detail;
if (detail == null) return listItem;
if (detail.PlaybackPositionTicks == null &&
listItem.PlaybackPositionTicks != null) {
return detail.copyWith(
PlaybackPositionTicks: listItem.PlaybackPositionTicks,
);
}
return detail;
}
EmbyRawItem applyPlaybackReturnProgress(EmbyRawItem item, int? positionTicks) {
if (positionTicks == null || positionTicks <= 0) return item;
final userData = (item.UserData ?? const EmbyRawUserData()).copyWith(
PlaybackPositionTicks: positionTicks,
);
return item.copyWith(UserData: userData);
}