Fladder/lib/models/items/item_stream_model.dart
PartyDonut f0414439f3
feature: Version selection (#235)
Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
2025-02-23 15:53:17 +01:00

66 lines
2.4 KiB
Dart

import 'package:dart_mappable/dart_mappable.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart';
import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart' as dto;
import 'package:fladder/models/item_base_model.dart';
import 'package:fladder/models/items/episode_model.dart';
import 'package:fladder/models/items/images_models.dart';
import 'package:fladder/models/items/item_shared_models.dart';
import 'package:fladder/models/items/media_streams_model.dart';
import 'package:fladder/models/items/movie_model.dart';
import 'package:fladder/models/items/overview_model.dart';
part 'item_stream_model.mapper.dart';
@MappableClass()
class ItemStreamModel extends ItemBaseModel with ItemStreamModelMappable {
final ImagesData? parentImages;
final MediaStreamsModel mediaStreams;
const ItemStreamModel({
required this.parentImages,
required this.mediaStreams,
required super.name,
required super.id,
required super.overview,
required super.parentId,
required super.playlistId,
required super.images,
required super.childCount,
required super.primaryRatio,
required super.userData,
required super.canDelete,
required super.canDownload,
super.jellyType,
});
factory ItemStreamModel.fromBaseDto(dto.BaseItemDto item, Ref ref) {
return switch (item.type) {
BaseItemKind.episode => EpisodeModel.fromBaseDto(item, ref),
BaseItemKind.movie => MovieModel.fromBaseDto(item, ref),
_ => ItemStreamModel._fromBaseDto(item, ref)
};
}
factory ItemStreamModel._fromBaseDto(dto.BaseItemDto item, Ref ref) {
return ItemStreamModel(
name: item.name ?? "",
id: item.id ?? "",
childCount: item.childCount,
overview: OverviewModel.fromBaseItemDto(item, ref),
userData: UserData.fromDto(item.userData),
parentId: item.parentId,
playlistId: item.playlistItemId,
images: ImagesData.fromBaseItem(item, ref),
primaryRatio: item.primaryImageAspectRatio,
parentImages: ImagesData.fromBaseItemParent(item, ref),
canDelete: item.canDelete,
canDownload: item.canDownload,
mediaStreams: MediaStreamsModel.fromMediaStreamsList(item.mediaSources, ref),
);
}
String? get videoPropertiesLabel {
if (mediaStreams.displayProfile == null && mediaStreams.resolution == null) return null;
return "${mediaStreams.displayProfile?.value}";
}
}