diff --git a/.fvmrc b/.fvmrc index 4cac08f..b91fa3c 100644 --- a/.fvmrc +++ b/.fvmrc @@ -1,3 +1,3 @@ { - "flutter": "3.29.2" + "flutter": "3.32.1" } \ No newline at end of file diff --git a/.gitignore b/.gitignore index ae927e8..c277ce1 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,6 @@ local.properties # Inno Setup builds Output + +# Generated localizations +lib/l10n/generated diff --git a/.vscode/launch.json b/.vscode/launch.json index a09b032..db1705f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -80,7 +80,8 @@ "deviceId": "chrome", "args": [ "--web-port", - "9090" + "9090", + "--web-experimental-hot-reload" ], }, { @@ -91,7 +92,8 @@ "flutterMode": "release", "args": [ "--web-port", - "9090" + "9090", + "--web-experimental-hot-reload" ], }, ], diff --git a/.vscode/settings.json b/.vscode/settings.json index fca954e..58c95f1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ "LTWH", "outro" ], - "dart.flutterSdkPath": ".fvm/versions/3.29.2", + "dart.flutterSdkPath": ".fvm/versions/3.32.1", "search.exclude": { "**/.fvm": true }, @@ -15,5 +15,13 @@ "**/.fvm": true }, "editor.detectIndentation": true, - "dart.lineLength": 120 + "dart.lineLength": 120, + "dart.analysisExcludedFolders": [ + "build", + ".dart_tool", + ".fvm", + "packages", + "lib/jellyfin", + "lib/l10n" + ] } \ No newline at end of file diff --git a/analysis_options.yaml b/analysis_options.yaml index ae5a2af..f5a4656 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -3,12 +3,15 @@ include: package:lints/recommended.yaml analyzer: exclude: - build/** + - .dart_tool/** + - .fvm/** + - pubspec.yaml + - packages/** - lib/jellyfin/** - lib/**/**.g.dart - lib/**/**.freezed.dart - lib/**/**.mapped.dart - - packages/** - - pubspec.yaml + - lib/l10n/** strong-mode: implicit-casts: false implicit-dynamic: false diff --git a/build.yaml b/build.yaml index 82d02cd..4acfabe 100644 --- a/build.yaml +++ b/build.yaml @@ -27,6 +27,9 @@ targets: - "**/**_page.dart" freezed|freezed: options: + copy_with: false + equal: false + tostring: generate_for: - "**/**.f.dart" - "**/**.g.dart" @@ -34,7 +37,7 @@ targets: options: ignoreNull: true discriminatorKey: type - generateMethods: [decode, encode, copy, stringify] + generateMethods: [copy] chopper_generator: options: header: "//Generated jellyfin api code" diff --git a/l10n.yaml b/l10n.yaml index b1cc141..5340fac 100644 --- a/l10n.yaml +++ b/l10n.yaml @@ -2,3 +2,5 @@ arb-dir: lib/l10n template-arb-file: app_en.arb output-localization-file: app_localizations.dart nullable-getter: false +synthetic-package: false +output-dir: lib/l10n/generated diff --git a/lib/main.dart b/lib/main.dart index af06e73..86f3aeb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:dynamic_color/dynamic_color.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:isar/isar.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -18,6 +17,7 @@ import 'package:smtc_windows/smtc_windows.dart' if (dart.library.html) 'package: import 'package:universal_html/html.dart' as html; import 'package:window_manager/window_manager.dart'; +import 'package:fladder/l10n/generated/app_localizations.dart'; import 'package:fladder/models/account_model.dart'; import 'package:fladder/models/settings/arguments_model.dart'; import 'package:fladder/models/syncing/i_synced_item.dart'; diff --git a/lib/models/account_model.dart b/lib/models/account_model.dart index 0e2a990..16bd46f 100644 --- a/lib/models/account_model.dart +++ b/lib/models/account_model.dart @@ -4,8 +4,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/credentials_model.dart'; @@ -16,7 +16,7 @@ import 'package:fladder/util/localization_helper.dart'; part 'account_model.freezed.dart'; part 'account_model.g.dart'; -@freezed +@Freezed(copyWith: true) class AccountModel with _$AccountModel { const AccountModel._(); diff --git a/lib/models/account_model.freezed.dart b/lib/models/account_model.freezed.dart index d370519..e251539 100644 --- a/lib/models/account_model.freezed.dart +++ b/lib/models/account_model.freezed.dart @@ -395,56 +395,6 @@ class _$AccountModelImpl extends _AccountModel with DiagnosticableTreeMixin { ..add(DiagnosticsProperty('userConfiguration', userConfiguration)); } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$AccountModelImpl && - (identical(other.name, name) || other.name == name) && - (identical(other.id, id) || other.id == id) && - (identical(other.avatar, avatar) || other.avatar == avatar) && - (identical(other.lastUsed, lastUsed) || - other.lastUsed == lastUsed) && - (identical(other.authMethod, authMethod) || - other.authMethod == authMethod) && - (identical(other.localPin, localPin) || - other.localPin == localPin) && - (identical(other.credentials, credentials) || - other.credentials == credentials) && - const DeepCollectionEquality() - .equals(other._latestItemsExcludes, _latestItemsExcludes) && - const DeepCollectionEquality() - .equals(other._searchQueryHistory, _searchQueryHistory) && - (identical(other.quickConnectState, quickConnectState) || - other.quickConnectState == quickConnectState) && - const DeepCollectionEquality() - .equals(other._savedFilters, _savedFilters) && - (identical(other.policy, policy) || other.policy == policy) && - (identical(other.serverConfiguration, serverConfiguration) || - other.serverConfiguration == serverConfiguration) && - (identical(other.userConfiguration, userConfiguration) || - other.userConfiguration == userConfiguration)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hash( - runtimeType, - name, - id, - avatar, - lastUsed, - authMethod, - localPin, - credentials, - const DeepCollectionEquality().hash(_latestItemsExcludes), - const DeepCollectionEquality().hash(_searchQueryHistory), - quickConnectState, - const DeepCollectionEquality().hash(_savedFilters), - policy, - serverConfiguration, - userConfiguration); - /// Create a copy of AccountModel /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/models/boxset_model.mapper.dart b/lib/models/boxset_model.mapper.dart index 3904439..14ca869 100644 --- a/lib/models/boxset_model.mapper.dart +++ b/lib/models/boxset_model.mapper.dart @@ -108,34 +108,11 @@ class BoxSetModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static BoxSetModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static BoxSetModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin BoxSetModelMappable { - String toJson() { - return BoxSetModelMapper.ensureInitialized() - .encodeJson(this as BoxSetModel); - } - - Map toMap() { - return BoxSetModelMapper.ensureInitialized() - .encodeMap(this as BoxSetModel); - } - BoxSetModelCopyWith get copyWith => _BoxSetModelCopyWithImpl(this as BoxSetModel, $identity, $identity); - @override - String toString() { - return BoxSetModelMapper.ensureInitialized() - .stringifyValue(this as BoxSetModel); - } } extension BoxSetModelValueCopy<$R, $Out> diff --git a/lib/models/item_base_model.mapper.dart b/lib/models/item_base_model.mapper.dart index fe85f01..e3a288f 100644 --- a/lib/models/item_base_model.mapper.dart +++ b/lib/models/item_base_model.mapper.dart @@ -93,35 +93,12 @@ class ItemBaseModelMapper extends ClassMapperBase { @override final Function instantiate = _instantiate; - - static ItemBaseModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static ItemBaseModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin ItemBaseModelMappable { - String toJson() { - return ItemBaseModelMapper.ensureInitialized() - .encodeJson(this as ItemBaseModel); - } - - Map toMap() { - return ItemBaseModelMapper.ensureInitialized() - .encodeMap(this as ItemBaseModel); - } - ItemBaseModelCopyWith get copyWith => _ItemBaseModelCopyWithImpl( this as ItemBaseModel, $identity, $identity); - @override - String toString() { - return ItemBaseModelMapper.ensureInitialized() - .stringifyValue(this as ItemBaseModel); - } } extension ItemBaseModelValueCopy<$R, $Out> diff --git a/lib/models/items/episode_model.mapper.dart b/lib/models/items/episode_model.mapper.dart index bebdd8e..f5714d1 100644 --- a/lib/models/items/episode_model.mapper.dart +++ b/lib/models/items/episode_model.mapper.dart @@ -141,34 +141,11 @@ class EpisodeModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static EpisodeModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static EpisodeModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin EpisodeModelMappable { - String toJson() { - return EpisodeModelMapper.ensureInitialized() - .encodeJson(this as EpisodeModel); - } - - Map toMap() { - return EpisodeModelMapper.ensureInitialized() - .encodeMap(this as EpisodeModel); - } - EpisodeModelCopyWith get copyWith => _EpisodeModelCopyWithImpl(this as EpisodeModel, $identity, $identity); - @override - String toString() { - return EpisodeModelMapper.ensureInitialized() - .stringifyValue(this as EpisodeModel); - } } extension EpisodeModelValueCopy<$R, $Out> diff --git a/lib/models/items/folder_model.mapper.dart b/lib/models/items/folder_model.mapper.dart index f36f7fd..8dde469 100644 --- a/lib/models/items/folder_model.mapper.dart +++ b/lib/models/items/folder_model.mapper.dart @@ -108,34 +108,11 @@ class FolderModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static FolderModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static FolderModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin FolderModelMappable { - String toJson() { - return FolderModelMapper.ensureInitialized() - .encodeJson(this as FolderModel); - } - - Map toMap() { - return FolderModelMapper.ensureInitialized() - .encodeMap(this as FolderModel); - } - FolderModelCopyWith get copyWith => _FolderModelCopyWithImpl(this as FolderModel, $identity, $identity); - @override - String toString() { - return FolderModelMapper.ensureInitialized() - .stringifyValue(this as FolderModel); - } } extension FolderModelValueCopy<$R, $Out> diff --git a/lib/models/items/item_properties_model.freezed.dart b/lib/models/items/item_properties_model.freezed.dart index 6531a37..1f775a8 100644 --- a/lib/models/items/item_properties_model.freezed.dart +++ b/lib/models/items/item_properties_model.freezed.dart @@ -18,92 +18,6 @@ final _privateConstructorUsedError = UnsupportedError( mixin _$ItemPropertiesModel { bool get canDelete => throw _privateConstructorUsedError; bool get canDownload => throw _privateConstructorUsedError; - - /// Create a copy of ItemPropertiesModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $ItemPropertiesModelCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ItemPropertiesModelCopyWith<$Res> { - factory $ItemPropertiesModelCopyWith( - ItemPropertiesModel value, $Res Function(ItemPropertiesModel) then) = - _$ItemPropertiesModelCopyWithImpl<$Res, ItemPropertiesModel>; - @useResult - $Res call({bool canDelete, bool canDownload}); -} - -/// @nodoc -class _$ItemPropertiesModelCopyWithImpl<$Res, $Val extends ItemPropertiesModel> - implements $ItemPropertiesModelCopyWith<$Res> { - _$ItemPropertiesModelCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of ItemPropertiesModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? canDelete = null, - Object? canDownload = null, - }) { - return _then(_value.copyWith( - canDelete: null == canDelete - ? _value.canDelete - : canDelete // ignore: cast_nullable_to_non_nullable - as bool, - canDownload: null == canDownload - ? _value.canDownload - : canDownload // ignore: cast_nullable_to_non_nullable - as bool, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$ItemPropertiesModelImplCopyWith<$Res> - implements $ItemPropertiesModelCopyWith<$Res> { - factory _$$ItemPropertiesModelImplCopyWith(_$ItemPropertiesModelImpl value, - $Res Function(_$ItemPropertiesModelImpl) then) = - __$$ItemPropertiesModelImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({bool canDelete, bool canDownload}); -} - -/// @nodoc -class __$$ItemPropertiesModelImplCopyWithImpl<$Res> - extends _$ItemPropertiesModelCopyWithImpl<$Res, _$ItemPropertiesModelImpl> - implements _$$ItemPropertiesModelImplCopyWith<$Res> { - __$$ItemPropertiesModelImplCopyWithImpl(_$ItemPropertiesModelImpl _value, - $Res Function(_$ItemPropertiesModelImpl) _then) - : super(_value, _then); - - /// Create a copy of ItemPropertiesModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? canDelete = null, - Object? canDownload = null, - }) { - return _then(_$ItemPropertiesModelImpl( - canDelete: null == canDelete - ? _value.canDelete - : canDelete // ignore: cast_nullable_to_non_nullable - as bool, - canDownload: null == canDownload - ? _value.canDownload - : canDownload // ignore: cast_nullable_to_non_nullable - as bool, - )); - } } /// @nodoc @@ -122,29 +36,6 @@ class _$ItemPropertiesModelImpl extends _ItemPropertiesModel { String toString() { return 'ItemPropertiesModel._internal(canDelete: $canDelete, canDownload: $canDownload)'; } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ItemPropertiesModelImpl && - (identical(other.canDelete, canDelete) || - other.canDelete == canDelete) && - (identical(other.canDownload, canDownload) || - other.canDownload == canDownload)); - } - - @override - int get hashCode => Object.hash(runtimeType, canDelete, canDownload); - - /// Create a copy of ItemPropertiesModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$ItemPropertiesModelImplCopyWith<_$ItemPropertiesModelImpl> get copyWith => - __$$ItemPropertiesModelImplCopyWithImpl<_$ItemPropertiesModelImpl>( - this, _$identity); } abstract class _ItemPropertiesModel extends ItemPropertiesModel { @@ -157,11 +48,4 @@ abstract class _ItemPropertiesModel extends ItemPropertiesModel { bool get canDelete; @override bool get canDownload; - - /// Create a copy of ItemPropertiesModel - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$ItemPropertiesModelImplCopyWith<_$ItemPropertiesModelImpl> get copyWith => - throw _privateConstructorUsedError; } diff --git a/lib/models/items/item_shared_models.dart b/lib/models/items/item_shared_models.dart index 45cc175..f20acc6 100644 --- a/lib/models/items/item_shared_models.dart +++ b/lib/models/items/item_shared_models.dart @@ -14,7 +14,7 @@ import 'package:fladder/models/items/images_models.dart'; part 'item_shared_models.mapper.dart'; -@MappableClass() +@MappableClass(generateMethods: GenerateMethods.encode | GenerateMethods.decode | GenerateMethods.copy) class UserData with UserDataMappable { final bool isFavourite; final int playCount; diff --git a/lib/models/items/item_shared_models.mapper.dart b/lib/models/items/item_shared_models.mapper.dart index 9a17f2b..34cde3e 100644 --- a/lib/models/items/item_shared_models.mapper.dart +++ b/lib/models/items/item_shared_models.mapper.dart @@ -92,10 +92,6 @@ mixin UserDataMappable { UserDataCopyWith get copyWith => _UserDataCopyWithImpl(this as UserData, $identity, $identity); - @override - String toString() { - return UserDataMapper.ensureInitialized().stringifyValue(this as UserData); - } } extension UserDataValueCopy<$R, $Out> on ObjectCopyWith<$R, UserData, $Out> { diff --git a/lib/models/items/item_stream_model.mapper.dart b/lib/models/items/item_stream_model.mapper.dart index d83984c..550275a 100644 --- a/lib/models/items/item_stream_model.mapper.dart +++ b/lib/models/items/item_stream_model.mapper.dart @@ -112,35 +112,12 @@ class ItemStreamModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static ItemStreamModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static ItemStreamModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin ItemStreamModelMappable { - String toJson() { - return ItemStreamModelMapper.ensureInitialized() - .encodeJson(this as ItemStreamModel); - } - - Map toMap() { - return ItemStreamModelMapper.ensureInitialized() - .encodeMap(this as ItemStreamModel); - } - ItemStreamModelCopyWith get copyWith => _ItemStreamModelCopyWithImpl( this as ItemStreamModel, $identity, $identity); - @override - String toString() { - return ItemStreamModelMapper.ensureInitialized() - .stringifyValue(this as ItemStreamModel); - } } extension ItemStreamModelValueCopy<$R, $Out> diff --git a/lib/models/items/media_segments_model.freezed.dart b/lib/models/items/media_segments_model.freezed.dart index f2c6bf9..cae9d70 100644 --- a/lib/models/items/media_segments_model.freezed.dart +++ b/lib/models/items/media_segments_model.freezed.dart @@ -24,82 +24,6 @@ mixin _$MediaSegmentsModel { /// Serializes this MediaSegmentsModel to a JSON map. Map toJson() => throw _privateConstructorUsedError; - - /// Create a copy of MediaSegmentsModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $MediaSegmentsModelCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $MediaSegmentsModelCopyWith<$Res> { - factory $MediaSegmentsModelCopyWith( - MediaSegmentsModel value, $Res Function(MediaSegmentsModel) then) = - _$MediaSegmentsModelCopyWithImpl<$Res, MediaSegmentsModel>; - @useResult - $Res call({List segments}); -} - -/// @nodoc -class _$MediaSegmentsModelCopyWithImpl<$Res, $Val extends MediaSegmentsModel> - implements $MediaSegmentsModelCopyWith<$Res> { - _$MediaSegmentsModelCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of MediaSegmentsModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? segments = null, - }) { - return _then(_value.copyWith( - segments: null == segments - ? _value.segments - : segments // ignore: cast_nullable_to_non_nullable - as List, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$MediaSegmentsModelImplCopyWith<$Res> - implements $MediaSegmentsModelCopyWith<$Res> { - factory _$$MediaSegmentsModelImplCopyWith(_$MediaSegmentsModelImpl value, - $Res Function(_$MediaSegmentsModelImpl) then) = - __$$MediaSegmentsModelImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({List segments}); -} - -/// @nodoc -class __$$MediaSegmentsModelImplCopyWithImpl<$Res> - extends _$MediaSegmentsModelCopyWithImpl<$Res, _$MediaSegmentsModelImpl> - implements _$$MediaSegmentsModelImplCopyWith<$Res> { - __$$MediaSegmentsModelImplCopyWithImpl(_$MediaSegmentsModelImpl _value, - $Res Function(_$MediaSegmentsModelImpl) _then) - : super(_value, _then); - - /// Create a copy of MediaSegmentsModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? segments = null, - }) { - return _then(_$MediaSegmentsModelImpl( - segments: null == segments - ? _value._segments - : segments // ignore: cast_nullable_to_non_nullable - as List, - )); - } } /// @nodoc @@ -126,28 +50,6 @@ class _$MediaSegmentsModelImpl extends _MediaSegmentsModel { return 'MediaSegmentsModel(segments: $segments)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$MediaSegmentsModelImpl && - const DeepCollectionEquality().equals(other._segments, _segments)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => - Object.hash(runtimeType, const DeepCollectionEquality().hash(_segments)); - - /// Create a copy of MediaSegmentsModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$MediaSegmentsModelImplCopyWith<_$MediaSegmentsModelImpl> get copyWith => - __$$MediaSegmentsModelImplCopyWithImpl<_$MediaSegmentsModelImpl>( - this, _$identity); - @override Map toJson() { return _$$MediaSegmentsModelImplToJson( @@ -166,13 +68,6 @@ abstract class _MediaSegmentsModel extends MediaSegmentsModel { @override List get segments; - - /// Create a copy of MediaSegmentsModel - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$MediaSegmentsModelImplCopyWith<_$MediaSegmentsModelImpl> get copyWith => - throw _privateConstructorUsedError; } MediaSegment _$MediaSegmentFromJson(Map json) { @@ -187,102 +82,6 @@ mixin _$MediaSegment { /// Serializes this MediaSegment to a JSON map. Map toJson() => throw _privateConstructorUsedError; - - /// Create a copy of MediaSegment - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $MediaSegmentCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $MediaSegmentCopyWith<$Res> { - factory $MediaSegmentCopyWith( - MediaSegment value, $Res Function(MediaSegment) then) = - _$MediaSegmentCopyWithImpl<$Res, MediaSegment>; - @useResult - $Res call({MediaSegmentType type, Duration start, Duration end}); -} - -/// @nodoc -class _$MediaSegmentCopyWithImpl<$Res, $Val extends MediaSegment> - implements $MediaSegmentCopyWith<$Res> { - _$MediaSegmentCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of MediaSegment - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? type = null, - Object? start = null, - Object? end = null, - }) { - return _then(_value.copyWith( - type: null == type - ? _value.type - : type // ignore: cast_nullable_to_non_nullable - as MediaSegmentType, - start: null == start - ? _value.start - : start // ignore: cast_nullable_to_non_nullable - as Duration, - end: null == end - ? _value.end - : end // ignore: cast_nullable_to_non_nullable - as Duration, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$MediaSegmentImplCopyWith<$Res> - implements $MediaSegmentCopyWith<$Res> { - factory _$$MediaSegmentImplCopyWith( - _$MediaSegmentImpl value, $Res Function(_$MediaSegmentImpl) then) = - __$$MediaSegmentImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({MediaSegmentType type, Duration start, Duration end}); -} - -/// @nodoc -class __$$MediaSegmentImplCopyWithImpl<$Res> - extends _$MediaSegmentCopyWithImpl<$Res, _$MediaSegmentImpl> - implements _$$MediaSegmentImplCopyWith<$Res> { - __$$MediaSegmentImplCopyWithImpl( - _$MediaSegmentImpl _value, $Res Function(_$MediaSegmentImpl) _then) - : super(_value, _then); - - /// Create a copy of MediaSegment - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? type = null, - Object? start = null, - Object? end = null, - }) { - return _then(_$MediaSegmentImpl( - type: null == type - ? _value.type - : type // ignore: cast_nullable_to_non_nullable - as MediaSegmentType, - start: null == start - ? _value.start - : start // ignore: cast_nullable_to_non_nullable - as Duration, - end: null == end - ? _value.end - : end // ignore: cast_nullable_to_non_nullable - as Duration, - )); - } } /// @nodoc @@ -307,28 +106,6 @@ class _$MediaSegmentImpl extends _MediaSegment { return 'MediaSegment(type: $type, start: $start, end: $end)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$MediaSegmentImpl && - (identical(other.type, type) || other.type == type) && - (identical(other.start, start) || other.start == start) && - (identical(other.end, end) || other.end == end)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hash(runtimeType, type, start, end); - - /// Create a copy of MediaSegment - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$MediaSegmentImplCopyWith<_$MediaSegmentImpl> get copyWith => - __$$MediaSegmentImplCopyWithImpl<_$MediaSegmentImpl>(this, _$identity); - @override Map toJson() { return _$$MediaSegmentImplToJson( @@ -353,11 +130,4 @@ abstract class _MediaSegment extends MediaSegment { Duration get start; @override Duration get end; - - /// Create a copy of MediaSegment - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$MediaSegmentImplCopyWith<_$MediaSegmentImpl> get copyWith => - throw _privateConstructorUsedError; } diff --git a/lib/models/items/movie_model.mapper.dart b/lib/models/items/movie_model.mapper.dart index 56b8f4c..122798c 100644 --- a/lib/models/items/movie_model.mapper.dart +++ b/lib/models/items/movie_model.mapper.dart @@ -147,34 +147,11 @@ class MovieModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static MovieModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static MovieModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin MovieModelMappable { - String toJson() { - return MovieModelMapper.ensureInitialized() - .encodeJson(this as MovieModel); - } - - Map toMap() { - return MovieModelMapper.ensureInitialized() - .encodeMap(this as MovieModel); - } - MovieModelCopyWith get copyWith => _MovieModelCopyWithImpl(this as MovieModel, $identity, $identity); - @override - String toString() { - return MovieModelMapper.ensureInitialized() - .stringifyValue(this as MovieModel); - } } extension MovieModelValueCopy<$R, $Out> diff --git a/lib/models/items/overview_model.dart b/lib/models/items/overview_model.dart index 6747026..76e21fc 100644 --- a/lib/models/items/overview_model.dart +++ b/lib/models/items/overview_model.dart @@ -1,3 +1,4 @@ +import 'package:dart_mappable/dart_mappable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; @@ -6,8 +7,6 @@ import 'package:fladder/models/items/item_shared_models.dart'; import 'package:fladder/models/items/trick_play_model.dart'; import 'package:fladder/util/duration_extensions.dart'; -import 'package:dart_mappable/dart_mappable.dart'; - part 'overview_model.mapper.dart'; @MappableClass() @@ -76,7 +75,4 @@ class OverviewModel with OverviewModelMappable { people: Person.peopleFromDto(item.people ?? [], ref), ); } - - factory OverviewModel.fromMap(Map map) => OverviewModelMapper.fromMap(map); - factory OverviewModel.fromJson(String json) => OverviewModelMapper.fromJson(json); } diff --git a/lib/models/items/overview_model.mapper.dart b/lib/models/items/overview_model.mapper.dart index 9afaf5b..c86fcdc 100644 --- a/lib/models/items/overview_model.mapper.dart +++ b/lib/models/items/overview_model.mapper.dart @@ -114,35 +114,12 @@ class OverviewModelMapper extends ClassMapperBase { @override final Function instantiate = _instantiate; - - static OverviewModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static OverviewModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin OverviewModelMappable { - String toJson() { - return OverviewModelMapper.ensureInitialized() - .encodeJson(this as OverviewModel); - } - - Map toMap() { - return OverviewModelMapper.ensureInitialized() - .encodeMap(this as OverviewModel); - } - OverviewModelCopyWith get copyWith => _OverviewModelCopyWithImpl( this as OverviewModel, $identity, $identity); - @override - String toString() { - return OverviewModelMapper.ensureInitialized() - .stringifyValue(this as OverviewModel); - } } extension OverviewModelValueCopy<$R, $Out> diff --git a/lib/models/items/person_model.mapper.dart b/lib/models/items/person_model.mapper.dart index 2577548..8429fa2 100644 --- a/lib/models/items/person_model.mapper.dart +++ b/lib/models/items/person_model.mapper.dart @@ -124,34 +124,11 @@ class PersonModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static PersonModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static PersonModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin PersonModelMappable { - String toJson() { - return PersonModelMapper.ensureInitialized() - .encodeJson(this as PersonModel); - } - - Map toMap() { - return PersonModelMapper.ensureInitialized() - .encodeMap(this as PersonModel); - } - PersonModelCopyWith get copyWith => _PersonModelCopyWithImpl(this as PersonModel, $identity, $identity); - @override - String toString() { - return PersonModelMapper.ensureInitialized() - .stringifyValue(this as PersonModel); - } } extension PersonModelValueCopy<$R, $Out> diff --git a/lib/models/items/photos_model.mapper.dart b/lib/models/items/photos_model.mapper.dart index b19c827..5810dd5 100644 --- a/lib/models/items/photos_model.mapper.dart +++ b/lib/models/items/photos_model.mapper.dart @@ -108,35 +108,12 @@ class PhotoAlbumModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static PhotoAlbumModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static PhotoAlbumModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin PhotoAlbumModelMappable { - String toJson() { - return PhotoAlbumModelMapper.ensureInitialized() - .encodeJson(this as PhotoAlbumModel); - } - - Map toMap() { - return PhotoAlbumModelMapper.ensureInitialized() - .encodeMap(this as PhotoAlbumModel); - } - PhotoAlbumModelCopyWith get copyWith => _PhotoAlbumModelCopyWithImpl( this as PhotoAlbumModel, $identity, $identity); - @override - String toString() { - return PhotoAlbumModelMapper.ensureInitialized() - .stringifyValue(this as PhotoAlbumModel); - } } extension PhotoAlbumModelValueCopy<$R, $Out> @@ -359,34 +336,11 @@ class PhotoModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static PhotoModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static PhotoModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin PhotoModelMappable { - String toJson() { - return PhotoModelMapper.ensureInitialized() - .encodeJson(this as PhotoModel); - } - - Map toMap() { - return PhotoModelMapper.ensureInitialized() - .encodeMap(this as PhotoModel); - } - PhotoModelCopyWith get copyWith => _PhotoModelCopyWithImpl(this as PhotoModel, $identity, $identity); - @override - String toString() { - return PhotoModelMapper.ensureInitialized() - .stringifyValue(this as PhotoModel); - } } extension PhotoModelValueCopy<$R, $Out> diff --git a/lib/models/items/season_model.mapper.dart b/lib/models/items/season_model.mapper.dart index 4c5e5d3..733b10d 100644 --- a/lib/models/items/season_model.mapper.dart +++ b/lib/models/items/season_model.mapper.dart @@ -137,34 +137,11 @@ class SeasonModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static SeasonModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static SeasonModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin SeasonModelMappable { - String toJson() { - return SeasonModelMapper.ensureInitialized() - .encodeJson(this as SeasonModel); - } - - Map toMap() { - return SeasonModelMapper.ensureInitialized() - .encodeMap(this as SeasonModel); - } - SeasonModelCopyWith get copyWith => _SeasonModelCopyWithImpl(this as SeasonModel, $identity, $identity); - @override - String toString() { - return SeasonModelMapper.ensureInitialized() - .stringifyValue(this as SeasonModel); - } } extension SeasonModelValueCopy<$R, $Out> diff --git a/lib/models/items/series_model.mapper.dart b/lib/models/items/series_model.mapper.dart index 7f9b7cf..44f2c80 100644 --- a/lib/models/items/series_model.mapper.dart +++ b/lib/models/items/series_model.mapper.dart @@ -135,34 +135,11 @@ class SeriesModelMapper extends SubClassMapperBase { @override final Function instantiate = _instantiate; - - static SeriesModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static SeriesModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin SeriesModelMappable { - String toJson() { - return SeriesModelMapper.ensureInitialized() - .encodeJson(this as SeriesModel); - } - - Map toMap() { - return SeriesModelMapper.ensureInitialized() - .encodeMap(this as SeriesModel); - } - SeriesModelCopyWith get copyWith => _SeriesModelCopyWithImpl(this as SeriesModel, $identity, $identity); - @override - String toString() { - return SeriesModelMapper.ensureInitialized() - .stringifyValue(this as SeriesModel); - } } extension SeriesModelValueCopy<$R, $Out> diff --git a/lib/models/items/trick_play_model.dart b/lib/models/items/trick_play_model.dart index 0015f94..adc5ee4 100644 --- a/lib/models/items/trick_play_model.dart +++ b/lib/models/items/trick_play_model.dart @@ -5,7 +5,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'trick_play_model.freezed.dart'; part 'trick_play_model.g.dart'; -@freezed +@Freezed(copyWith: true) class TrickPlayModel with _$TrickPlayModel { factory TrickPlayModel({ required int width, diff --git a/lib/models/items/trick_play_model.freezed.dart b/lib/models/items/trick_play_model.freezed.dart index 8e5fe57..1b77683 100644 --- a/lib/models/items/trick_play_model.freezed.dart +++ b/lib/models/items/trick_play_model.freezed.dart @@ -225,36 +225,6 @@ class _$TrickPlayModelImpl extends _TrickPlayModel { return 'TrickPlayModel(width: $width, height: $height, tileWidth: $tileWidth, tileHeight: $tileHeight, thumbnailCount: $thumbnailCount, interval: $interval, images: $images)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$TrickPlayModelImpl && - (identical(other.width, width) || other.width == width) && - (identical(other.height, height) || other.height == height) && - (identical(other.tileWidth, tileWidth) || - other.tileWidth == tileWidth) && - (identical(other.tileHeight, tileHeight) || - other.tileHeight == tileHeight) && - (identical(other.thumbnailCount, thumbnailCount) || - other.thumbnailCount == thumbnailCount) && - (identical(other.interval, interval) || - other.interval == interval) && - const DeepCollectionEquality().equals(other._images, _images)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hash( - runtimeType, - width, - height, - tileWidth, - tileHeight, - thumbnailCount, - interval, - const DeepCollectionEquality().hash(_images)); - /// Create a copy of TrickPlayModel /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/models/library_filters_model.dart b/lib/models/library_filters_model.dart index 9224010..165cbc2 100644 --- a/lib/models/library_filters_model.dart +++ b/lib/models/library_filters_model.dart @@ -14,7 +14,7 @@ import 'package:fladder/util/map_bool_helper.dart'; part 'library_filters_model.freezed.dart'; part 'library_filters_model.g.dart'; -@freezed +@Freezed(copyWith: true) class LibraryFiltersModel with _$LibraryFiltersModel { const LibraryFiltersModel._(); @@ -40,11 +40,16 @@ class LibraryFiltersModel with _$LibraryFiltersModel { factory LibraryFiltersModel.fromJson(Map json) => _$LibraryFiltersModelFromJson(json); - factory LibraryFiltersModel.fromLibrarySearch(String name, LibrarySearchModel searchModel) { + factory LibraryFiltersModel.fromLibrarySearch( + String name, + LibrarySearchModel searchModel, { + bool? isFavourite, + String? id, + }) { return LibraryFiltersModel._internal( - id: Xid().toString(), + id: id ?? Xid().toString(), name: name, - isFavourite: false, + isFavourite: isFavourite ?? false, ids: searchModel.views.included.map((e) => e.id).toList(), genres: searchModel.genres, filters: searchModel.filters, diff --git a/lib/models/library_filters_model.freezed.dart b/lib/models/library_filters_model.freezed.dart index 0a37d13..e7a72a7 100644 --- a/lib/models/library_filters_model.freezed.dart +++ b/lib/models/library_filters_model.freezed.dart @@ -436,59 +436,6 @@ class _$LibraryFiltersModelImpl extends _LibraryFiltersModel { return 'LibraryFiltersModel._internal(id: $id, name: $name, isFavourite: $isFavourite, ids: $ids, genres: $genres, filters: $filters, studios: $studios, tags: $tags, years: $years, officialRatings: $officialRatings, types: $types, sortingOption: $sortingOption, sortOrder: $sortOrder, favourites: $favourites, hideEmptyShows: $hideEmptyShows, recursive: $recursive, groupBy: $groupBy)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$LibraryFiltersModelImpl && - (identical(other.id, id) || other.id == id) && - (identical(other.name, name) || other.name == name) && - (identical(other.isFavourite, isFavourite) || - other.isFavourite == isFavourite) && - const DeepCollectionEquality().equals(other._ids, _ids) && - const DeepCollectionEquality().equals(other._genres, _genres) && - const DeepCollectionEquality().equals(other._filters, _filters) && - const DeepCollectionEquality().equals(other._studios, _studios) && - const DeepCollectionEquality().equals(other._tags, _tags) && - const DeepCollectionEquality().equals(other._years, _years) && - const DeepCollectionEquality() - .equals(other._officialRatings, _officialRatings) && - const DeepCollectionEquality().equals(other._types, _types) && - (identical(other.sortingOption, sortingOption) || - other.sortingOption == sortingOption) && - (identical(other.sortOrder, sortOrder) || - other.sortOrder == sortOrder) && - (identical(other.favourites, favourites) || - other.favourites == favourites) && - (identical(other.hideEmptyShows, hideEmptyShows) || - other.hideEmptyShows == hideEmptyShows) && - (identical(other.recursive, recursive) || - other.recursive == recursive) && - (identical(other.groupBy, groupBy) || other.groupBy == groupBy)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hash( - runtimeType, - id, - name, - isFavourite, - const DeepCollectionEquality().hash(_ids), - const DeepCollectionEquality().hash(_genres), - const DeepCollectionEquality().hash(_filters), - const DeepCollectionEquality().hash(_studios), - const DeepCollectionEquality().hash(_tags), - const DeepCollectionEquality().hash(_years), - const DeepCollectionEquality().hash(_officialRatings), - const DeepCollectionEquality().hash(_types), - sortingOption, - sortOrder, - favourites, - hideEmptyShows, - recursive, - groupBy); - /// Create a copy of LibraryFiltersModel /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/models/library_search/library_search_model.mapper.dart b/lib/models/library_search/library_search_model.mapper.dart index 53e2469..33b6dac 100644 --- a/lib/models/library_search/library_search_model.mapper.dart +++ b/lib/models/library_search/library_search_model.mapper.dart @@ -177,36 +177,13 @@ class LibrarySearchModelMapper extends ClassMapperBase { @override final Function instantiate = _instantiate; - - static LibrarySearchModel fromMap(Map map) { - return ensureInitialized().decodeMap(map); - } - - static LibrarySearchModel fromJson(String json) { - return ensureInitialized().decodeJson(json); - } } mixin LibrarySearchModelMappable { - String toJson() { - return LibrarySearchModelMapper.ensureInitialized() - .encodeJson(this as LibrarySearchModel); - } - - Map toMap() { - return LibrarySearchModelMapper.ensureInitialized() - .encodeMap(this as LibrarySearchModel); - } - LibrarySearchModelCopyWith get copyWith => _LibrarySearchModelCopyWithImpl( this as LibrarySearchModel, $identity, $identity); - @override - String toString() { - return LibrarySearchModelMapper.ensureInitialized() - .stringifyValue(this as LibrarySearchModel); - } } extension LibrarySearchModelValueCopy<$R, $Out> diff --git a/lib/models/settings/arguments_model.freezed.dart b/lib/models/settings/arguments_model.freezed.dart index f3b7669..881c561 100644 --- a/lib/models/settings/arguments_model.freezed.dart +++ b/lib/models/settings/arguments_model.freezed.dart @@ -17,82 +17,6 @@ final _privateConstructorUsedError = UnsupportedError( /// @nodoc mixin _$ArgumentsModel { bool get htpcMode => throw _privateConstructorUsedError; - - /// Create a copy of ArgumentsModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $ArgumentsModelCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ArgumentsModelCopyWith<$Res> { - factory $ArgumentsModelCopyWith( - ArgumentsModel value, $Res Function(ArgumentsModel) then) = - _$ArgumentsModelCopyWithImpl<$Res, ArgumentsModel>; - @useResult - $Res call({bool htpcMode}); -} - -/// @nodoc -class _$ArgumentsModelCopyWithImpl<$Res, $Val extends ArgumentsModel> - implements $ArgumentsModelCopyWith<$Res> { - _$ArgumentsModelCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of ArgumentsModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? htpcMode = null, - }) { - return _then(_value.copyWith( - htpcMode: null == htpcMode - ? _value.htpcMode - : htpcMode // ignore: cast_nullable_to_non_nullable - as bool, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$ArgumentsModelImplCopyWith<$Res> - implements $ArgumentsModelCopyWith<$Res> { - factory _$$ArgumentsModelImplCopyWith(_$ArgumentsModelImpl value, - $Res Function(_$ArgumentsModelImpl) then) = - __$$ArgumentsModelImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({bool htpcMode}); -} - -/// @nodoc -class __$$ArgumentsModelImplCopyWithImpl<$Res> - extends _$ArgumentsModelCopyWithImpl<$Res, _$ArgumentsModelImpl> - implements _$$ArgumentsModelImplCopyWith<$Res> { - __$$ArgumentsModelImplCopyWithImpl( - _$ArgumentsModelImpl _value, $Res Function(_$ArgumentsModelImpl) _then) - : super(_value, _then); - - /// Create a copy of ArgumentsModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? htpcMode = null, - }) { - return _then(_$ArgumentsModelImpl( - htpcMode: null == htpcMode - ? _value.htpcMode - : htpcMode // ignore: cast_nullable_to_non_nullable - as bool, - )); - } } /// @nodoc @@ -108,27 +32,6 @@ class _$ArgumentsModelImpl extends _ArgumentsModel { String toString() { return 'ArgumentsModel(htpcMode: $htpcMode)'; } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ArgumentsModelImpl && - (identical(other.htpcMode, htpcMode) || - other.htpcMode == htpcMode)); - } - - @override - int get hashCode => Object.hash(runtimeType, htpcMode); - - /// Create a copy of ArgumentsModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$ArgumentsModelImplCopyWith<_$ArgumentsModelImpl> get copyWith => - __$$ArgumentsModelImplCopyWithImpl<_$ArgumentsModelImpl>( - this, _$identity); } abstract class _ArgumentsModel extends ArgumentsModel { @@ -137,11 +40,4 @@ abstract class _ArgumentsModel extends ArgumentsModel { @override bool get htpcMode; - - /// Create a copy of ArgumentsModel - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$ArgumentsModelImplCopyWith<_$ArgumentsModelImpl> get copyWith => - throw _privateConstructorUsedError; } diff --git a/lib/models/settings/client_settings_model.dart b/lib/models/settings/client_settings_model.dart index 6b084a0..6188983 100644 --- a/lib/models/settings/client_settings_model.dart +++ b/lib/models/settings/client_settings_model.dart @@ -11,7 +11,7 @@ import 'package:fladder/util/custom_color_themes.dart'; part 'client_settings_model.freezed.dart'; part 'client_settings_model.g.dart'; -@freezed +@Freezed(copyWith: true) class ClientSettingsModel with _$ClientSettingsModel { const ClientSettingsModel._(); factory ClientSettingsModel({ diff --git a/lib/models/settings/client_settings_model.freezed.dart b/lib/models/settings/client_settings_model.freezed.dart index 9bc6489..4eccbc5 100644 --- a/lib/models/settings/client_settings_model.freezed.dart +++ b/lib/models/settings/client_settings_model.freezed.dart @@ -508,83 +508,6 @@ class _$ClientSettingsModelImpl extends _ClientSettingsModel ..add(DiagnosticsProperty('libraryPageSize', libraryPageSize)); } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ClientSettingsModelImpl && - (identical(other.syncPath, syncPath) || - other.syncPath == syncPath) && - (identical(other.position, position) || - other.position == position) && - (identical(other.size, size) || other.size == size) && - (identical(other.timeOut, timeOut) || other.timeOut == timeOut) && - (identical(other.nextUpDateCutoff, nextUpDateCutoff) || - other.nextUpDateCutoff == nextUpDateCutoff) && - (identical(other.themeMode, themeMode) || - other.themeMode == themeMode) && - (identical(other.themeColor, themeColor) || - other.themeColor == themeColor) && - (identical(other.amoledBlack, amoledBlack) || - other.amoledBlack == amoledBlack) && - (identical(other.blurPlaceHolders, blurPlaceHolders) || - other.blurPlaceHolders == blurPlaceHolders) && - (identical(other.blurUpcomingEpisodes, blurUpcomingEpisodes) || - other.blurUpcomingEpisodes == blurUpcomingEpisodes) && - (identical(other.selectedLocale, selectedLocale) || - other.selectedLocale == selectedLocale) && - (identical(other.enableMediaKeys, enableMediaKeys) || - other.enableMediaKeys == enableMediaKeys) && - (identical(other.posterSize, posterSize) || - other.posterSize == posterSize) && - (identical(other.pinchPosterZoom, pinchPosterZoom) || - other.pinchPosterZoom == pinchPosterZoom) && - (identical(other.mouseDragSupport, mouseDragSupport) || - other.mouseDragSupport == mouseDragSupport) && - (identical(other.requireWifi, requireWifi) || - other.requireWifi == requireWifi) && - (identical(other.showAllCollectionTypes, showAllCollectionTypes) || - other.showAllCollectionTypes == showAllCollectionTypes) && - (identical(other.maxConcurrentDownloads, maxConcurrentDownloads) || - other.maxConcurrentDownloads == maxConcurrentDownloads) && - (identical(other.schemeVariant, schemeVariant) || - other.schemeVariant == schemeVariant) && - (identical(other.checkForUpdates, checkForUpdates) || - other.checkForUpdates == checkForUpdates) && - (identical(other.lastViewedUpdate, lastViewedUpdate) || - other.lastViewedUpdate == lastViewedUpdate) && - (identical(other.libraryPageSize, libraryPageSize) || - other.libraryPageSize == libraryPageSize)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hashAll([ - runtimeType, - syncPath, - position, - size, - timeOut, - nextUpDateCutoff, - themeMode, - themeColor, - amoledBlack, - blurPlaceHolders, - blurUpcomingEpisodes, - selectedLocale, - enableMediaKeys, - posterSize, - pinchPosterZoom, - mouseDragSupport, - requireWifi, - showAllCollectionTypes, - maxConcurrentDownloads, - schemeVariant, - checkForUpdates, - lastViewedUpdate, - libraryPageSize - ]); - /// Create a copy of ClientSettingsModel /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/models/settings/home_settings_model.dart b/lib/models/settings/home_settings_model.dart index 3c38c7b..790a6b4 100644 --- a/lib/models/settings/home_settings_model.dart +++ b/lib/models/settings/home_settings_model.dart @@ -8,7 +8,7 @@ import 'package:fladder/util/localization_helper.dart'; part 'home_settings_model.freezed.dart'; part 'home_settings_model.g.dart'; -@freezed +@Freezed(copyWith: true) class HomeSettingsModel with _$HomeSettingsModel { factory HomeSettingsModel({ @Default({...LayoutMode.values}) Set screenLayouts, diff --git a/lib/models/settings/home_settings_model.freezed.dart b/lib/models/settings/home_settings_model.freezed.dart index c3fde07..35666b9 100644 --- a/lib/models/settings/home_settings_model.freezed.dart +++ b/lib/models/settings/home_settings_model.freezed.dart @@ -205,32 +205,6 @@ class _$HomeSettingsModelImpl implements _HomeSettingsModel { return 'HomeSettingsModel(screenLayouts: $screenLayouts, layoutStates: $layoutStates, homeBanner: $homeBanner, carouselSettings: $carouselSettings, nextUp: $nextUp)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$HomeSettingsModelImpl && - const DeepCollectionEquality() - .equals(other._screenLayouts, _screenLayouts) && - const DeepCollectionEquality() - .equals(other._layoutStates, _layoutStates) && - (identical(other.homeBanner, homeBanner) || - other.homeBanner == homeBanner) && - (identical(other.carouselSettings, carouselSettings) || - other.carouselSettings == carouselSettings) && - (identical(other.nextUp, nextUp) || other.nextUp == nextUp)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(_screenLayouts), - const DeepCollectionEquality().hash(_layoutStates), - homeBanner, - carouselSettings, - nextUp); - /// Create a copy of HomeSettingsModel /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/models/settings/video_player_settings.dart b/lib/models/settings/video_player_settings.dart index 71f1499..38d2f23 100644 --- a/lib/models/settings/video_player_settings.dart +++ b/lib/models/settings/video_player_settings.dart @@ -12,7 +12,7 @@ import 'package:fladder/util/localization_helper.dart'; part 'video_player_settings.freezed.dart'; part 'video_player_settings.g.dart'; -@freezed +@Freezed(copyWith: true) class VideoPlayerSettingsModel with _$VideoPlayerSettingsModel { const VideoPlayerSettingsModel._(); @@ -43,7 +43,10 @@ class VideoPlayerSettingsModel with _$VideoPlayerSettingsModel { PlayerOptions get wantedPlayer => playerOptions ?? PlayerOptions.platformDefaults; bool playerSame(VideoPlayerSettingsModel other) { - return other.hardwareAccel == hardwareAccel && other.useLibass == useLibass && other.bufferSize == bufferSize && other.wantedPlayer == wantedPlayer; + return other.hardwareAccel == hardwareAccel && + other.useLibass == useLibass && + other.bufferSize == bufferSize && + other.wantedPlayer == wantedPlayer; } @override diff --git a/lib/models/syncing/sync_item.dart b/lib/models/syncing/sync_item.dart index 035fdab..d87906c 100644 --- a/lib/models/syncing/sync_item.dart +++ b/lib/models/syncing/sync_item.dart @@ -4,17 +4,17 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:background_downloader/background_downloader.dart'; -import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:path/path.dart'; import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/item_base_model.dart'; import 'package:fladder/models/items/chapters_model.dart'; import 'package:fladder/models/items/images_models.dart'; -import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/item_shared_models.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/items/trick_play_model.dart'; import 'package:fladder/models/syncing/i_synced_item.dart'; @@ -24,7 +24,7 @@ import 'package:fladder/util/localization_helper.dart'; part 'sync_item.freezed.dart'; -@freezed +@Freezed(copyWith: true) class SyncedItem with _$SyncedItem { const SyncedItem._(); diff --git a/lib/models/syncing/sync_item.freezed.dart b/lib/models/syncing/sync_item.freezed.dart index 2b13b60..bf1e235 100644 --- a/lib/models/syncing/sync_item.freezed.dart +++ b/lib/models/syncing/sync_item.freezed.dart @@ -63,7 +63,6 @@ abstract class $SyncedItemCopyWith<$Res> { List subtitles, @UserDataJsonSerializer() UserData? userData}); - $MediaSegmentsModelCopyWith<$Res>? get mediaSegments; $TrickPlayModelCopyWith<$Res>? get fTrickPlayModel; } @@ -162,20 +161,6 @@ class _$SyncedItemCopyWithImpl<$Res, $Val extends SyncedItem> ) as $Val); } - /// Create a copy of SyncedItem - /// with the given fields replaced by the non-null parameter values. - @override - @pragma('vm:prefer-inline') - $MediaSegmentsModelCopyWith<$Res>? get mediaSegments { - if (_value.mediaSegments == null) { - return null; - } - - return $MediaSegmentsModelCopyWith<$Res>(_value.mediaSegments!, (value) { - return _then(_value.copyWith(mediaSegments: value) as $Val); - }); - } - /// Create a copy of SyncedItem /// with the given fields replaced by the non-null parameter values. @override @@ -216,8 +201,6 @@ abstract class _$$SyncItemImplCopyWith<$Res> List subtitles, @UserDataJsonSerializer() UserData? userData}); - @override - $MediaSegmentsModelCopyWith<$Res>? get mediaSegments; @override $TrickPlayModelCopyWith<$Res>? get fTrickPlayModel; } @@ -392,57 +375,6 @@ class _$SyncItemImpl extends _SyncItem { return 'SyncedItem(id: $id, syncing: $syncing, parentId: $parentId, userId: $userId, path: $path, markedForDelete: $markedForDelete, sortName: $sortName, fileSize: $fileSize, videoFileName: $videoFileName, mediaSegments: $mediaSegments, fTrickPlayModel: $fTrickPlayModel, fImages: $fImages, fChapters: $fChapters, subtitles: $subtitles, userData: $userData)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$SyncItemImpl && - (identical(other.id, id) || other.id == id) && - (identical(other.syncing, syncing) || other.syncing == syncing) && - (identical(other.parentId, parentId) || - other.parentId == parentId) && - (identical(other.userId, userId) || other.userId == userId) && - (identical(other.path, path) || other.path == path) && - (identical(other.markedForDelete, markedForDelete) || - other.markedForDelete == markedForDelete) && - (identical(other.sortName, sortName) || - other.sortName == sortName) && - (identical(other.fileSize, fileSize) || - other.fileSize == fileSize) && - (identical(other.videoFileName, videoFileName) || - other.videoFileName == videoFileName) && - (identical(other.mediaSegments, mediaSegments) || - other.mediaSegments == mediaSegments) && - (identical(other.fTrickPlayModel, fTrickPlayModel) || - other.fTrickPlayModel == fTrickPlayModel) && - (identical(other.fImages, fImages) || other.fImages == fImages) && - const DeepCollectionEquality() - .equals(other._fChapters, _fChapters) && - const DeepCollectionEquality() - .equals(other._subtitles, _subtitles) && - (identical(other.userData, userData) || - other.userData == userData)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - id, - syncing, - parentId, - userId, - path, - markedForDelete, - sortName, - fileSize, - videoFileName, - mediaSegments, - fTrickPlayModel, - fImages, - const DeepCollectionEquality().hash(_fChapters), - const DeepCollectionEquality().hash(_subtitles), - userData); - /// Create a copy of SyncedItem /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/models/syncing/sync_settings_model.dart b/lib/models/syncing/sync_settings_model.dart index 880c24a..5ce7aa4 100644 --- a/lib/models/syncing/sync_settings_model.dart +++ b/lib/models/syncing/sync_settings_model.dart @@ -6,7 +6,7 @@ import 'package:fladder/models/syncing/sync_item.dart'; part 'sync_settings_model.freezed.dart'; -@Freezed(toJson: false, fromJson: false) +@Freezed(toJson: false, fromJson: false, copyWith: true) class SyncSettingsModel with _$SyncSettingsModel { const SyncSettingsModel._(); diff --git a/lib/models/syncing/sync_settings_model.freezed.dart b/lib/models/syncing/sync_settings_model.freezed.dart index cf1e3af..7370ac2 100644 --- a/lib/models/syncing/sync_settings_model.freezed.dart +++ b/lib/models/syncing/sync_settings_model.freezed.dart @@ -116,18 +116,6 @@ class _$SyncSettignsModelImpl extends _SyncSettignsModel { return 'SyncSettingsModel(items: $items)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$SyncSettignsModelImpl && - const DeepCollectionEquality().equals(other._items, _items)); - } - - @override - int get hashCode => - Object.hash(runtimeType, const DeepCollectionEquality().hash(_items)); - /// Create a copy of SyncSettingsModel /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/providers/discovery_provider.dart b/lib/providers/discovery_provider.dart index 54fcb93..08243ac 100644 --- a/lib/providers/discovery_provider.dart +++ b/lib/providers/discovery_provider.dart @@ -4,9 +4,10 @@ import 'dart:developer'; import 'dart:io'; import 'package:dart_mappable/dart_mappable.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; + import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/providers/service_provider.dart'; -import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'discovery_provider.g.dart'; part 'discovery_provider.mapper.dart'; @@ -81,7 +82,7 @@ class ServerDiscovery extends _$ServerDiscovery { } } -@MappableClass() +@MappableClass(generateMethods: GenerateMethods.encode | GenerateMethods.decode) class DiscoveryInfo with DiscoveryInfoMappable { @MappableField(key: 'Id') final String id; diff --git a/lib/providers/discovery_provider.mapper.dart b/lib/providers/discovery_provider.mapper.dart index aeb8044..eb28f0e 100644 --- a/lib/providers/discovery_provider.mapper.dart +++ b/lib/providers/discovery_provider.mapper.dart @@ -73,58 +73,4 @@ mixin DiscoveryInfoMappable { return DiscoveryInfoMapper.ensureInitialized() .encodeMap(this as DiscoveryInfo); } - - DiscoveryInfoCopyWith - get copyWith => _DiscoveryInfoCopyWithImpl( - this as DiscoveryInfo, $identity, $identity); - @override - String toString() { - return DiscoveryInfoMapper.ensureInitialized() - .stringifyValue(this as DiscoveryInfo); - } -} - -extension DiscoveryInfoValueCopy<$R, $Out> - on ObjectCopyWith<$R, DiscoveryInfo, $Out> { - DiscoveryInfoCopyWith<$R, DiscoveryInfo, $Out> get $asDiscoveryInfo => - $base.as((v, t, t2) => _DiscoveryInfoCopyWithImpl(v, t, t2)); -} - -abstract class DiscoveryInfoCopyWith<$R, $In extends DiscoveryInfo, $Out> - implements ClassCopyWith<$R, $In, $Out> { - $R call({String? id, String? name, String? address, String? endPointAddress}); - DiscoveryInfoCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t); -} - -class _DiscoveryInfoCopyWithImpl<$R, $Out> - extends ClassCopyWithBase<$R, DiscoveryInfo, $Out> - implements DiscoveryInfoCopyWith<$R, DiscoveryInfo, $Out> { - _DiscoveryInfoCopyWithImpl(super.value, super.then, super.then2); - - @override - late final ClassMapperBase $mapper = - DiscoveryInfoMapper.ensureInitialized(); - @override - $R call( - {String? id, - String? name, - String? address, - Object? endPointAddress = $none}) => - $apply(FieldCopyWithData({ - if (id != null) #id: id, - if (name != null) #name: name, - if (address != null) #address: address, - if (endPointAddress != $none) #endPointAddress: endPointAddress - })); - @override - DiscoveryInfo $make(CopyWithData data) => DiscoveryInfo( - id: data.get(#id, or: $value.id), - name: data.get(#name, or: $value.name), - address: data.get(#address, or: $value.address), - endPointAddress: data.get(#endPointAddress, or: $value.endPointAddress)); - - @override - DiscoveryInfoCopyWith<$R2, DiscoveryInfo, $Out2> $chain<$R2, $Out2>( - Then<$Out2, $R2> t) => - _DiscoveryInfoCopyWithImpl($value, $cast, t); } diff --git a/lib/providers/library_screen_provider.dart b/lib/providers/library_screen_provider.dart index 811ed72..e6a0329 100644 --- a/lib/providers/library_screen_provider.dart +++ b/lib/providers/library_screen_provider.dart @@ -45,7 +45,7 @@ enum LibraryViewType { }; } -@Freezed(fromJson: false, toJson: false) +@Freezed(fromJson: false, toJson: false, copyWith: true) class LibraryScreenModel with _$LibraryScreenModel { factory LibraryScreenModel({ @Default([]) List views, diff --git a/lib/providers/library_screen_provider.freezed.dart b/lib/providers/library_screen_provider.freezed.dart index b2a6d84..6fdf317 100644 --- a/lib/providers/library_screen_provider.freezed.dart +++ b/lib/providers/library_screen_provider.freezed.dart @@ -234,32 +234,6 @@ class _$LibraryScreenModelImpl implements _LibraryScreenModel { return 'LibraryScreenModel(views: $views, selectedViewModel: $selectedViewModel, viewType: $viewType, recommendations: $recommendations, genres: $genres, favourites: $favourites)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$LibraryScreenModelImpl && - const DeepCollectionEquality().equals(other._views, _views) && - (identical(other.selectedViewModel, selectedViewModel) || - other.selectedViewModel == selectedViewModel) && - const DeepCollectionEquality().equals(other._viewType, _viewType) && - const DeepCollectionEquality() - .equals(other._recommendations, _recommendations) && - const DeepCollectionEquality().equals(other._genres, _genres) && - const DeepCollectionEquality() - .equals(other._favourites, _favourites)); - } - - @override - int get hashCode => Object.hash( - runtimeType, - const DeepCollectionEquality().hash(_views), - selectedViewModel, - const DeepCollectionEquality().hash(_viewType), - const DeepCollectionEquality().hash(_recommendations), - const DeepCollectionEquality().hash(_genres), - const DeepCollectionEquality().hash(_favourites)); - /// Create a copy of LibraryScreenModel /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) diff --git a/lib/providers/library_search_provider.dart b/lib/providers/library_search_provider.dart index a6360aa..3ec2ba3 100644 --- a/lib/providers/library_search_provider.dart +++ b/lib/providers/library_search_provider.dart @@ -709,10 +709,14 @@ class LibrarySearchNotifier extends StateNotifier { ref.read(filterProvider.notifier).saveFilter(LibraryFiltersModel.fromLibrarySearch(newName, state)); void updateFilter(LibraryFiltersModel model) { - ref.read(filterProvider.notifier).saveFilter(LibraryFiltersModel.fromLibrarySearch(model.name, state).copyWith( - isFavourite: model.isFavourite, - id: model.id, - )); + ref.read(filterProvider.notifier).saveFilter( + LibraryFiltersModel.fromLibrarySearch( + model.name, + state, + isFavourite: model.isFavourite, + id: model.id, + ), + ); } } diff --git a/lib/providers/session_info_provider.freezed.dart b/lib/providers/session_info_provider.freezed.dart index 67dada9..1f91c0c 100644 --- a/lib/providers/session_info_provider.freezed.dart +++ b/lib/providers/session_info_provider.freezed.dart @@ -25,92 +25,6 @@ mixin _$SessionInfoModel { /// Serializes this SessionInfoModel to a JSON map. Map toJson() => throw _privateConstructorUsedError; - - /// Create a copy of SessionInfoModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $SessionInfoModelCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $SessionInfoModelCopyWith<$Res> { - factory $SessionInfoModelCopyWith( - SessionInfoModel value, $Res Function(SessionInfoModel) then) = - _$SessionInfoModelCopyWithImpl<$Res, SessionInfoModel>; - @useResult - $Res call({String? playbackModel, TranscodingInfo? transCodeInfo}); -} - -/// @nodoc -class _$SessionInfoModelCopyWithImpl<$Res, $Val extends SessionInfoModel> - implements $SessionInfoModelCopyWith<$Res> { - _$SessionInfoModelCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of SessionInfoModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? playbackModel = freezed, - Object? transCodeInfo = freezed, - }) { - return _then(_value.copyWith( - playbackModel: freezed == playbackModel - ? _value.playbackModel - : playbackModel // ignore: cast_nullable_to_non_nullable - as String?, - transCodeInfo: freezed == transCodeInfo - ? _value.transCodeInfo - : transCodeInfo // ignore: cast_nullable_to_non_nullable - as TranscodingInfo?, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$SessionInfoModelImplCopyWith<$Res> - implements $SessionInfoModelCopyWith<$Res> { - factory _$$SessionInfoModelImplCopyWith(_$SessionInfoModelImpl value, - $Res Function(_$SessionInfoModelImpl) then) = - __$$SessionInfoModelImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({String? playbackModel, TranscodingInfo? transCodeInfo}); -} - -/// @nodoc -class __$$SessionInfoModelImplCopyWithImpl<$Res> - extends _$SessionInfoModelCopyWithImpl<$Res, _$SessionInfoModelImpl> - implements _$$SessionInfoModelImplCopyWith<$Res> { - __$$SessionInfoModelImplCopyWithImpl(_$SessionInfoModelImpl _value, - $Res Function(_$SessionInfoModelImpl) _then) - : super(_value, _then); - - /// Create a copy of SessionInfoModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? playbackModel = freezed, - Object? transCodeInfo = freezed, - }) { - return _then(_$SessionInfoModelImpl( - playbackModel: freezed == playbackModel - ? _value.playbackModel - : playbackModel // ignore: cast_nullable_to_non_nullable - as String?, - transCodeInfo: freezed == transCodeInfo - ? _value.transCodeInfo - : transCodeInfo // ignore: cast_nullable_to_non_nullable - as TranscodingInfo?, - )); - } } /// @nodoc @@ -131,30 +45,6 @@ class _$SessionInfoModelImpl extends _SessionInfoModel { return 'SessionInfoModel(playbackModel: $playbackModel, transCodeInfo: $transCodeInfo)'; } - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$SessionInfoModelImpl && - (identical(other.playbackModel, playbackModel) || - other.playbackModel == playbackModel) && - (identical(other.transCodeInfo, transCodeInfo) || - other.transCodeInfo == transCodeInfo)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hash(runtimeType, playbackModel, transCodeInfo); - - /// Create a copy of SessionInfoModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$SessionInfoModelImplCopyWith<_$SessionInfoModelImpl> get copyWith => - __$$SessionInfoModelImplCopyWithImpl<_$SessionInfoModelImpl>( - this, _$identity); - @override Map toJson() { return _$$SessionInfoModelImplToJson( @@ -176,11 +66,4 @@ abstract class _SessionInfoModel extends SessionInfoModel { String? get playbackModel; @override TranscodingInfo? get transCodeInfo; - - /// Create a copy of SessionInfoModel - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$SessionInfoModelImplCopyWith<_$SessionInfoModelImpl> get copyWith => - throw _privateConstructorUsedError; } diff --git a/lib/providers/update_provider.dart b/lib/providers/update_provider.dart index 6b6a130..cc775fa 100644 --- a/lib/providers/update_provider.dart +++ b/lib/providers/update_provider.dart @@ -12,9 +12,18 @@ import 'package:fladder/util/update_checker.dart'; part 'update_provider.freezed.dart'; part 'update_provider.g.dart'; -final hasNewUpdateProvider = Provider((ref) => - ref.watch(clientSettingsProvider.select((value) => value.lastViewedUpdate)) != - ref.watch(updateProvider.select((value) => value.latestRelease?.version))); +final hasNewUpdateProvider = Provider((ref) { + final latestRelease = ref.watch(updateProvider).latestRelease; + final lastViewedVersion = ref.watch(clientSettingsProvider.select((value) => value.lastViewedUpdate)); + + final latestVersion = latestRelease?.version; + + if (latestVersion == null || lastViewedVersion == null) { + return false; + } + + return latestVersion != lastViewedVersion; +}); @Riverpod(keepAlive: true) class Update extends _$Update { @@ -60,7 +69,7 @@ class Update extends _$Update { Future> _fetchLatest() async { final latest = await updateChecker.fetchRecentReleases(); - state = state.copyWith( + state = UpdatesModel( lastRelease: latest, ); return latest; diff --git a/lib/providers/update_provider.freezed.dart b/lib/providers/update_provider.freezed.dart index 5cc066e..9b5131a 100644 --- a/lib/providers/update_provider.freezed.dart +++ b/lib/providers/update_provider.freezed.dart @@ -17,82 +17,6 @@ final _privateConstructorUsedError = UnsupportedError( /// @nodoc mixin _$UpdatesModel { List get lastRelease => throw _privateConstructorUsedError; - - /// Create a copy of UpdatesModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $UpdatesModelCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $UpdatesModelCopyWith<$Res> { - factory $UpdatesModelCopyWith( - UpdatesModel value, $Res Function(UpdatesModel) then) = - _$UpdatesModelCopyWithImpl<$Res, UpdatesModel>; - @useResult - $Res call({List lastRelease}); -} - -/// @nodoc -class _$UpdatesModelCopyWithImpl<$Res, $Val extends UpdatesModel> - implements $UpdatesModelCopyWith<$Res> { - _$UpdatesModelCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of UpdatesModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? lastRelease = null, - }) { - return _then(_value.copyWith( - lastRelease: null == lastRelease - ? _value.lastRelease - : lastRelease // ignore: cast_nullable_to_non_nullable - as List, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$UpdatesModelImplCopyWith<$Res> - implements $UpdatesModelCopyWith<$Res> { - factory _$$UpdatesModelImplCopyWith( - _$UpdatesModelImpl value, $Res Function(_$UpdatesModelImpl) then) = - __$$UpdatesModelImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({List lastRelease}); -} - -/// @nodoc -class __$$UpdatesModelImplCopyWithImpl<$Res> - extends _$UpdatesModelCopyWithImpl<$Res, _$UpdatesModelImpl> - implements _$$UpdatesModelImplCopyWith<$Res> { - __$$UpdatesModelImplCopyWithImpl( - _$UpdatesModelImpl _value, $Res Function(_$UpdatesModelImpl) _then) - : super(_value, _then); - - /// Create a copy of UpdatesModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? lastRelease = null, - }) { - return _then(_$UpdatesModelImpl( - lastRelease: null == lastRelease - ? _value._lastRelease - : lastRelease // ignore: cast_nullable_to_non_nullable - as List, - )); - } } /// @nodoc @@ -123,27 +47,6 @@ class _$UpdatesModelImpl extends _UpdatesModel with DiagnosticableTreeMixin { ..add(DiagnosticsProperty('type', 'UpdatesModel')) ..add(DiagnosticsProperty('lastRelease', lastRelease)); } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$UpdatesModelImpl && - const DeepCollectionEquality() - .equals(other._lastRelease, _lastRelease)); - } - - @override - int get hashCode => Object.hash( - runtimeType, const DeepCollectionEquality().hash(_lastRelease)); - - /// Create a copy of UpdatesModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$UpdatesModelImplCopyWith<_$UpdatesModelImpl> get copyWith => - __$$UpdatesModelImplCopyWithImpl<_$UpdatesModelImpl>(this, _$identity); } abstract class _UpdatesModel extends UpdatesModel { @@ -153,11 +56,4 @@ abstract class _UpdatesModel extends UpdatesModel { @override List get lastRelease; - - /// Create a copy of UpdatesModel - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$UpdatesModelImplCopyWith<_$UpdatesModelImpl> get copyWith => - throw _privateConstructorUsedError; } diff --git a/lib/providers/update_provider.g.dart b/lib/providers/update_provider.g.dart index ad48090..0dc6849 100644 --- a/lib/providers/update_provider.g.dart +++ b/lib/providers/update_provider.g.dart @@ -6,7 +6,7 @@ part of 'update_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$updateHash() => r'97f7aca4e255d654a9295e1e9e019536faf6455e'; +String _$updateHash() => r'e22205cb13e6b43df1296de90e39059f09bb80a8'; /// See also [Update]. @ProviderFor(Update) diff --git a/lib/providers/user_provider.dart b/lib/providers/user_provider.dart index 7f0ceb2..a09bd2b 100644 --- a/lib/providers/user_provider.dart +++ b/lib/providers/user_provider.dart @@ -178,7 +178,9 @@ class User extends _$User { if (e.id == model.id) { return model; } else { - return e.copyWith(isFavourite: model.isFavourite && model.containsSameIds(e.ids) ? false : e.isFavourite); + return e.copyWith( + isFavourite: model.isFavourite && model.containsSameIds(e.ids) ? false : e.isFavourite, + ); } }, ).toList()); diff --git a/lib/routes/auto_router.dart b/lib/routes/auto_router.dart index 9bca7e9..a3f885c 100644 --- a/lib/routes/auto_router.dart +++ b/lib/routes/auto_router.dart @@ -71,26 +71,22 @@ final AutoRoute _dashboardRoute = CustomRoute( page: DashboardRoute.page, transitionsBuilder: TransitionsBuilders.fadeIn, initial: true, - maintainState: false, path: 'dashboard', ); final AutoRoute _favouritesRoute = CustomRoute( page: FavouritesRoute.page, transitionsBuilder: TransitionsBuilders.fadeIn, - maintainState: false, path: 'favourites', ); final AutoRoute _syncedRoute = CustomRoute( page: SyncedRoute.page, transitionsBuilder: TransitionsBuilders.fadeIn, - maintainState: false, path: 'synced', ); final AutoRoute _librariesRoute = CustomRoute( page: LibraryRoute.page, transitionsBuilder: TransitionsBuilders.fadeIn, - maintainState: false, path: 'libraries', ); diff --git a/lib/screens/library_search/library_search_screen.dart b/lib/screens/library_search/library_search_screen.dart index cb7135c..dbd6352 100644 --- a/lib/screens/library_search/library_search_screen.dart +++ b/lib/screens/library_search/library_search_screen.dart @@ -240,8 +240,8 @@ class _LibrarySearchScreenState extends ConsumerState { }, refreshOnStart: false, child: CustomScrollView( - physics: const AlwaysScrollableNoImplicitScrollPhysics(), controller: scrollController, + physics: const AlwaysScrollableScrollPhysics(), slivers: [ SliverAppBar( floating: !AdaptiveLayout.of(context).isDesktop, @@ -530,25 +530,6 @@ class _LibrarySearchScreenState extends ConsumerState { } } -class AlwaysScrollableNoImplicitScrollPhysics extends ScrollPhysics { - /// Creates scroll physics that always lets the user scroll. - const AlwaysScrollableNoImplicitScrollPhysics({super.parent}); - - @override - AlwaysScrollableNoImplicitScrollPhysics applyTo(ScrollPhysics? ancestor) { - return AlwaysScrollableNoImplicitScrollPhysics(parent: buildParent(ancestor)); - } - - @override - bool get allowImplicitScrolling => false; - - @override - bool shouldAcceptUserOffset(ScrollMetrics position) => true; - - @override - bool recommendDeferredLoading(double velocity, ScrollMetrics metrics, BuildContext context) => false; -} - class _LibrarySearchBottomBar extends ConsumerWidget { final Key uniqueKey; final ScrollController scrollController; diff --git a/lib/screens/photo_viewer/photo_viewer_controls.dart b/lib/screens/photo_viewer/photo_viewer_controls.dart index a65ea21..5aa10c8 100644 --- a/lib/screens/photo_viewer/photo_viewer_controls.dart +++ b/lib/screens/photo_viewer/photo_viewer_controls.dart @@ -348,11 +348,11 @@ class _PhotoViewerControllsState extends ConsumerState with Future sharePhoto() async { final file = await DefaultCacheManager().getSingleFile(widget.photo.downloadPath(ref)); - await Share.shareXFiles([ + await SharePlus.instance.share(ShareParams(files: [ XFile( file.path, ), - ]); + ])); await file.delete(); } } diff --git a/lib/screens/settings/client_sections/client_settings_visual.dart b/lib/screens/settings/client_sections/client_settings_visual.dart index 015bfca..400aad2 100644 --- a/lib/screens/settings/client_sections/client_settings_visual.dart +++ b/lib/screens/settings/client_sections/client_settings_visual.dart @@ -1,6 +1,6 @@ +import 'package:fladder/l10n/generated/app_localizations.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fladder/providers/settings/client_settings_provider.dart'; diff --git a/lib/screens/settings/widgets/settings_update_information.dart b/lib/screens/settings/widgets/settings_update_information.dart index 599f9fd..4db8175 100644 --- a/lib/screens/settings/widgets/settings_update_information.dart +++ b/lib/screens/settings/widgets/settings_update_information.dart @@ -46,6 +46,7 @@ class _SettingsUpdateInformationState extends ConsumerState throw _privateConstructorUsedError; String get buildNumber => throw _privateConstructorUsedError; String get os => throw _privateConstructorUsedError; - - /// Create a copy of ApplicationInfo - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $ApplicationInfoCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $ApplicationInfoCopyWith<$Res> { - factory $ApplicationInfoCopyWith( - ApplicationInfo value, $Res Function(ApplicationInfo) then) = - _$ApplicationInfoCopyWithImpl<$Res, ApplicationInfo>; - @useResult - $Res call({String name, String version, String buildNumber, String os}); -} - -/// @nodoc -class _$ApplicationInfoCopyWithImpl<$Res, $Val extends ApplicationInfo> - implements $ApplicationInfoCopyWith<$Res> { - _$ApplicationInfoCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of ApplicationInfo - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? name = null, - Object? version = null, - Object? buildNumber = null, - Object? os = null, - }) { - return _then(_value.copyWith( - name: null == name - ? _value.name - : name // ignore: cast_nullable_to_non_nullable - as String, - version: null == version - ? _value.version - : version // ignore: cast_nullable_to_non_nullable - as String, - buildNumber: null == buildNumber - ? _value.buildNumber - : buildNumber // ignore: cast_nullable_to_non_nullable - as String, - os: null == os - ? _value.os - : os // ignore: cast_nullable_to_non_nullable - as String, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$ApplicationInfoImplCopyWith<$Res> - implements $ApplicationInfoCopyWith<$Res> { - factory _$$ApplicationInfoImplCopyWith(_$ApplicationInfoImpl value, - $Res Function(_$ApplicationInfoImpl) then) = - __$$ApplicationInfoImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({String name, String version, String buildNumber, String os}); -} - -/// @nodoc -class __$$ApplicationInfoImplCopyWithImpl<$Res> - extends _$ApplicationInfoCopyWithImpl<$Res, _$ApplicationInfoImpl> - implements _$$ApplicationInfoImplCopyWith<$Res> { - __$$ApplicationInfoImplCopyWithImpl( - _$ApplicationInfoImpl _value, $Res Function(_$ApplicationInfoImpl) _then) - : super(_value, _then); - - /// Create a copy of ApplicationInfo - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? name = null, - Object? version = null, - Object? buildNumber = null, - Object? os = null, - }) { - return _then(_$ApplicationInfoImpl( - name: null == name - ? _value.name - : name // ignore: cast_nullable_to_non_nullable - as String, - version: null == version - ? _value.version - : version // ignore: cast_nullable_to_non_nullable - as String, - buildNumber: null == buildNumber - ? _value.buildNumber - : buildNumber // ignore: cast_nullable_to_non_nullable - as String, - os: null == os - ? _value.os - : os // ignore: cast_nullable_to_non_nullable - as String, - )); - } } /// @nodoc @@ -146,30 +40,6 @@ class _$ApplicationInfoImpl extends _ApplicationInfo { final String buildNumber; @override final String os; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$ApplicationInfoImpl && - (identical(other.name, name) || other.name == name) && - (identical(other.version, version) || other.version == version) && - (identical(other.buildNumber, buildNumber) || - other.buildNumber == buildNumber) && - (identical(other.os, os) || other.os == os)); - } - - @override - int get hashCode => Object.hash(runtimeType, name, version, buildNumber, os); - - /// Create a copy of ApplicationInfo - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$ApplicationInfoImplCopyWith<_$ApplicationInfoImpl> get copyWith => - __$$ApplicationInfoImplCopyWithImpl<_$ApplicationInfoImpl>( - this, _$identity); } abstract class _ApplicationInfo extends ApplicationInfo { @@ -188,11 +58,4 @@ abstract class _ApplicationInfo extends ApplicationInfo { String get buildNumber; @override String get os; - - /// Create a copy of ApplicationInfo - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$ApplicationInfoImplCopyWith<_$ApplicationInfoImpl> get copyWith => - throw _privateConstructorUsedError; } diff --git a/lib/util/fladder_image.dart b/lib/util/fladder_image.dart index 902607b..2d60063 100644 --- a/lib/util/fladder_image.dart +++ b/lib/util/fladder_image.dart @@ -41,14 +41,12 @@ class FladderImage extends ConsumerWidget { key: Key(newImage.key), fit: StackFit.expand, children: [ - if (!disableBlur && useBluredPlaceHolder && newImage.hash.isNotEmpty) - Image( - fit: blurFit ?? fit, - excludeFromSemantics: true, - filterQuality: FilterQuality.low, - image: BlurHashImage( - newImage.hash, - ), + if (!disableBlur && useBluredPlaceHolder && newImage.hash.isNotEmpty || blurOnly) + BlurHash( + hash: newImage.hash, + optimizationMode: BlurHashOptimizationMode.approximation, + color: Colors.transparent, + imageFit: blurFit ?? fit, ), if (!blurOnly) FadeInImage( diff --git a/lib/util/localization_helper.dart b/lib/util/localization_helper.dart index eda6922..78cea31 100644 --- a/lib/util/localization_helper.dart +++ b/lib/util/localization_helper.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:fladder/l10n/generated/app_localizations.dart'; + ///Only use for base translations, under normal circumstances ALWAYS use the widgets provided context final localizationContextProvider = StateProvider((ref) => null); diff --git a/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart b/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart index c6e1ece..44ba989 100644 --- a/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart +++ b/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart @@ -84,159 +84,155 @@ class _SideNavigationBarState extends ConsumerState { ), child: (context) => widget.child, ), - AnimatedFadeSize( - alignment: Alignment.topLeft, - child: AnimatedContainer( - duration: const Duration(milliseconds: 250), - color: Theme.of(context).colorScheme.surface.withValues(alpha: shouldExpand ? 0.95 : 0.85), - width: shouldExpand ? expandedWidth : collapsedWidth, - child: MouseRegion( - onEnter: (value) => startTimer(), - onExit: (event) => stopTimer(), - onHover: (value) => startTimer(), - child: Column( - children: [ - if (isDesktop && AdaptiveLayout.of(context).platform != TargetPlatform.macOS) ...{ - const SizedBox(height: 4), - Text( - "Fladder", - style: Theme.of(context).textTheme.titleSmall, - ), - }, - if (AdaptiveLayout.of(context).platform == TargetPlatform.macOS) SizedBox(height: padding.top), - Expanded( - child: Padding( - key: const Key('navigation_rail'), - padding: padding.copyWith(right: 0, top: isDesktop ? 8 : null), - child: Column( - spacing: 2, - children: [ - Align( - alignment: largeBar && expandedSideBar ? Alignment.centerRight : Alignment.center, - child: Opacity( - opacity: largeBar && expandedSideBar ? 0.65 : 1.0, - child: IconButton( - onPressed: !largeBar - ? () => widget.scaffoldKey.currentState?.openDrawer() - : () => setState(() { - expandedSideBar = !expandedSideBar; - if (!expandedSideBar) { - showOnHover = false; - } - }), - icon: Icon( - largeBar && expandedSideBar ? IconsaxPlusLinear.sidebar_left : IconsaxPlusLinear.menu, - ), + Container( + color: Theme.of(context).colorScheme.surface.withValues(alpha: shouldExpand ? 0.95 : 0.85), + width: shouldExpand ? expandedWidth : collapsedWidth, + child: MouseRegion( + onEnter: (value) => startTimer(), + onExit: (event) => stopTimer(), + onHover: (value) => startTimer(), + child: Column( + children: [ + if (isDesktop && AdaptiveLayout.of(context).platform != TargetPlatform.macOS) ...{ + const SizedBox(height: 4), + Text( + "Fladder", + style: Theme.of(context).textTheme.titleSmall, + ), + }, + if (AdaptiveLayout.of(context).platform == TargetPlatform.macOS) SizedBox(height: padding.top), + Expanded( + child: Padding( + key: const Key('navigation_rail'), + padding: padding.copyWith(right: 0, top: isDesktop ? 8 : null), + child: Column( + spacing: 2, + children: [ + Align( + alignment: largeBar && expandedSideBar ? Alignment.centerRight : Alignment.center, + child: Opacity( + opacity: largeBar && expandedSideBar ? 0.65 : 1.0, + child: IconButton( + onPressed: !largeBar + ? () => widget.scaffoldKey.currentState?.openDrawer() + : () => setState(() { + expandedSideBar = !expandedSideBar; + if (!expandedSideBar) { + showOnHover = false; + } + }), + icon: Icon( + largeBar && expandedSideBar ? IconsaxPlusLinear.sidebar_left : IconsaxPlusLinear.menu, ), ), ), - const SizedBox(height: 8), - if (largeBar) ...[ - AnimatedFadeSize( - duration: const Duration(milliseconds: 250), - child: shouldExpand ? actionButton(context).extended : actionButton(context).normal, - ), - ], - Expanded( - child: Column( - spacing: 2, - mainAxisAlignment: !largeBar ? MainAxisAlignment.center : MainAxisAlignment.start, - children: [ - ...widget.destinations.mapIndexed( - (index, destination) => - destination.toNavigationButton(widget.currentIndex == index, true, shouldExpand), - ), - if (views.isNotEmpty && largeBar) ...[ - const Divider( - indent: 32, - endIndent: 32, - ), - Flexible( - child: OverflowView.flexible( - direction: Axis.vertical, - spacing: 4, - children: views.map( - (view) { - final actions = [ - ItemActionButton( - label: Text(context.localized.scanLibrary), - icon: const Icon(IconsaxPlusLinear.refresh), - action: () => showRefreshPopup(context, view.id, view.name), - ) - ]; - return view.toNavigationButton( - context.router.currentUrl.contains(view.id), - true, - shouldExpand, - () => context.pushRoute(LibrarySearchRoute(viewModelId: view.id)), - onLongPress: () => showBottomSheetPill( - context: context, - content: (context, scrollController) => ListView( - shrinkWrap: true, - controller: scrollController, - children: actions.listTileItems(context, useIcons: true), - ), - ), - trailing: actions, - ); - }, - ).toList(), - builder: (context, remaining) { - return PopupMenuButton( - iconColor: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.45), - padding: EdgeInsets.zero, - icon: NavigationButton( - label: context.localized.other, - selectedIcon: const Icon(IconsaxPlusLinear.arrow_square_down), - icon: const Icon(IconsaxPlusLinear.arrow_square_down), - expanded: shouldExpand, - horizontal: true, - ), - itemBuilder: (context) => views - .sublist(views.length - remaining) - .map( - (e) => PopupMenuItem( - onTap: () => context.pushRoute(LibrarySearchRoute(viewModelId: e.id)), - child: Row( - spacing: 8, - children: [ - Icon(e.collectionType.iconOutlined), - Text(e.name), - ], - ), - ), - ) - .toList(), - ); - }, - ), - ), - ], - ], - ), - ), - NavigationButton( - label: context.localized.settings, - selected: widget.currentLocation.contains(const SettingsRoute().routeName), - selectedIcon: const Icon(IconsaxPlusBold.setting_3), - horizontal: true, - expanded: shouldExpand, - icon: const SettingsUserIcon(), - onPressed: () { - if (AdaptiveLayout.layoutModeOf(context) == LayoutMode.single) { - context.router.push(const SettingsRoute()); - } else { - context.router.push(const ClientSettingsRoute()); - } - }, + ), + const SizedBox(height: 8), + if (largeBar) ...[ + AnimatedFadeSize( + duration: const Duration(milliseconds: 250), + child: shouldExpand ? actionButton(context).extended : actionButton(context).normal, ), ], - ), + Expanded( + child: Column( + spacing: 2, + mainAxisAlignment: !largeBar ? MainAxisAlignment.center : MainAxisAlignment.start, + children: [ + ...widget.destinations.mapIndexed( + (index, destination) => + destination.toNavigationButton(widget.currentIndex == index, true, shouldExpand), + ), + if (views.isNotEmpty && largeBar) ...[ + const Divider( + indent: 32, + endIndent: 32, + ), + Flexible( + child: OverflowView.flexible( + direction: Axis.vertical, + spacing: 4, + children: views.map( + (view) { + final actions = [ + ItemActionButton( + label: Text(context.localized.scanLibrary), + icon: const Icon(IconsaxPlusLinear.refresh), + action: () => showRefreshPopup(context, view.id, view.name), + ) + ]; + return view.toNavigationButton( + context.router.currentUrl.contains(view.id), + true, + shouldExpand, + () => context.pushRoute(LibrarySearchRoute(viewModelId: view.id)), + onLongPress: () => showBottomSheetPill( + context: context, + content: (context, scrollController) => ListView( + shrinkWrap: true, + controller: scrollController, + children: actions.listTileItems(context, useIcons: true), + ), + ), + trailing: actions, + ); + }, + ).toList(), + builder: (context, remaining) { + return PopupMenuButton( + iconColor: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.45), + padding: EdgeInsets.zero, + icon: NavigationButton( + label: context.localized.other, + selectedIcon: const Icon(IconsaxPlusLinear.arrow_square_down), + icon: const Icon(IconsaxPlusLinear.arrow_square_down), + expanded: shouldExpand, + horizontal: true, + ), + itemBuilder: (context) => views + .sublist(views.length - remaining) + .map( + (e) => PopupMenuItem( + onTap: () => context.pushRoute(LibrarySearchRoute(viewModelId: e.id)), + child: Row( + spacing: 8, + children: [ + Icon(e.collectionType.iconOutlined), + Text(e.name), + ], + ), + ), + ) + .toList(), + ); + }, + ), + ), + ], + ], + ), + ), + NavigationButton( + label: context.localized.settings, + selected: widget.currentLocation.contains(const SettingsRoute().routeName), + selectedIcon: const Icon(IconsaxPlusBold.setting_3), + horizontal: true, + expanded: shouldExpand, + icon: const SettingsUserIcon(), + onPressed: () { + if (AdaptiveLayout.layoutModeOf(context) == LayoutMode.single) { + context.router.push(const SettingsRoute()); + } else { + context.router.push(const ClientSettingsRoute()); + } + }, + ), + ], ), ), - if (AdaptiveLayout.of(context).inputDevice == InputDevice.pointer) const SizedBox(height: 16), - ], - ), + ), + if (AdaptiveLayout.of(context).inputDevice == InputDevice.pointer) const SizedBox(height: 16), + ], ), ), ), diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index c3f0eb4..0485f9a 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -14,6 +14,7 @@ #include #include #include +#include #include void fl_register_plugins(FlPluginRegistry* registry) { @@ -41,6 +42,9 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); + g_autoptr(FlPluginRegistrar) volume_controller_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "VolumeControllerPlugin"); + volume_controller_plugin_register_with_registrar(volume_controller_registrar); g_autoptr(FlPluginRegistrar) window_manager_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "WindowManagerPlugin"); window_manager_plugin_register_with_registrar(window_manager_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 38a1bfc..5bfb5da 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -11,6 +11,7 @@ list(APPEND FLUTTER_PLUGIN_LIST media_kit_video screen_retriever_linux url_launcher_linux + volume_controller window_manager ) diff --git a/pubspec.lock b/pubspec.lock index 19337ec..917cbff 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -50,10 +50,10 @@ packages: dependency: "direct main" description: name: archive - sha256: "7dcbd0f87fe5f61cb28da39a1a8b70dbc106e2fe0516f7836eb7bb2948481a12" + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" url: "https://pub.dev" source: hosted - version: "4.0.5" + version: "4.0.7" args: dependency: transitive description: @@ -66,18 +66,18 @@ packages: dependency: "direct main" description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.13.0" audio_service: dependency: "direct main" description: name: audio_service - sha256: "887ddf15fce31fd12aa8044c3bffd14c58929fb20e31d96284fe3aaf48315ac6" + sha256: cb122c7c2639d2a992421ef96b67948ad88c5221da3365ccef1031393a76e044 url: "https://pub.dev" source: hosted - version: "0.18.17" + version: "0.18.18" audio_service_platform_interface: dependency: transitive description: @@ -130,10 +130,10 @@ packages: dependency: "direct main" description: name: background_downloader - sha256: c3814aa0466368a4c1c32d24bc73ded752edacf06731ead43857a3ac992ed52d + sha256: d3016a9eb584f6cb16384c8b4a008943c39119730d60046044349b5dbbda4ccb url: "https://pub.dev" source: hosted - version: "8.9.5" + version: "9.2.2" boolean_selector: dependency: transitive description: @@ -210,10 +210,10 @@ packages: dependency: transitive description: name: built_value - sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4 + sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27" url: "https://pub.dev" source: hosted - version: "8.9.5" + version: "8.10.1" cached_network_image: dependency: "direct main" description: @@ -258,18 +258,18 @@ packages: dependency: transitive description: name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" chewie: dependency: transitive description: name: chewie - sha256: df6711bc3ba165ad19cb496e350250be5673327f79c61c9cc8a15088ed8007ed + sha256: "4d9554a8f87cc2dc6575dfd5ad20a4375015a29edd567fd6733febe6365e2566" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.11.3" chopper: dependency: "direct main" description: @@ -330,10 +330,10 @@ packages: dependency: "direct main" description: name: connectivity_plus - sha256: "04bf81bb0b77de31557b58d052b24b3eee33f09a6e7a8c68a3e247c7df19ec27" + sha256: "051849e2bd7c7b3bc5844ea0d096609ddc3a859890ec3a9ac4a65a2620cc1f99" url: "https://pub.dev" source: hosted - version: "6.1.3" + version: "6.1.4" connectivity_plus_platform_interface: dependency: transitive description: @@ -442,10 +442,10 @@ packages: dependency: "direct main" description: name: desktop_drop - sha256: "03abf1c0443afdd1d65cf8fa589a2f01c67a11da56bbb06f6ea1de79d5628e94" + sha256: bd21017e0415632c85f6b813c846bc8c9811742507776dcf6abf91a14d946e98 url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.6.0" diffutil_dart: dependency: transitive description: @@ -474,26 +474,26 @@ packages: dependency: "direct main" description: name: extended_image - sha256: "85199f9233e03abc2ce2e68cbb2991648666af4a527ae4e6250935be8edfddae" + sha256: f6cbb1d798f51262ed1a3d93b4f1f2aa0d76128df39af18ecb77fa740f88b2e0 url: "https://pub.dev" source: hosted - version: "9.1.0" + version: "10.0.1" extended_image_library: dependency: transitive description: name: extended_image_library - sha256: e61dafd94400fff6ef7ed1523d445ff3af137f198f3228e4a3107bc5b4bec5d1 + sha256: "1f9a24d3a00c2633891c6a7b5cab2807999eb2d5b597e5133b63f49d113811fe" url: "https://pub.dev" source: hosted - version: "4.0.6" + version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: @@ -514,10 +514,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: ab13ae8ef5580a411c458d6207b6774a6c237d77ac37011b13994879f68a8810 + sha256: "77f8e81d22d2a07d0dee2c62e1dda71dc1da73bf43bb2d45af09727406167964" url: "https://pub.dev" source: hosted - version: "8.3.7" + version: "10.1.9" fixnum: dependency: transitive description: @@ -543,10 +543,10 @@ packages: dependency: "direct main" description: name: flutter_blurhash - sha256: "5e67678e479ac639069d7af1e133f4a4702311491188ff3e0227486430db0c06" + sha256: e97b9aff13b9930bbaa74d0d899fec76e3f320aba3190322dcc5d32104e3d25d url: "https://pub.dev" source: hosted - version: "0.8.2" + version: "0.9.1" flutter_cache_manager: dependency: "direct main" description: @@ -559,42 +559,42 @@ packages: dependency: "direct main" description: name: flutter_custom_tabs - sha256: ec5424e196f145ac32e92ddfaee07b883cd4f16f9972812fa8f67fb318b34a4c + sha256: ac3543d7b4e0ac6ecdf3744360039ebb573656c0ce759149d228e1934d4f7535 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.4.0" flutter_custom_tabs_android: dependency: transitive description: name: flutter_custom_tabs_android - sha256: "09bc6297fca815a721d21fa168335ad9d266ac3df483628e716d788b7caf191e" + sha256: "925fc5e7d27372ee523962dcfcd4b77c0443549482c284dd7897b77815547621" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" flutter_custom_tabs_ios: dependency: transitive description: name: flutter_custom_tabs_ios - sha256: "4c93cba13e51e6edafd6f6984811b31fa774ef0ef58a58b93164f7eff18d5dc3" + sha256: c61a58d30b29ccb09ea4da0daa335bbf8714bcf8798d0d9f4f58a0b83c6c421b url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.0" flutter_custom_tabs_platform_interface: dependency: transitive description: name: flutter_custom_tabs_platform_interface - sha256: d6056832fceb163cabb751b3dd8a4919c03677cad7e4728de8ebcf84cfa4a074 + sha256: "54a6ff5cc7571cb266a47ade9f6f89d1980b9ed2dba18162a6d5300afc408449" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" flutter_custom_tabs_web: dependency: transitive description: name: flutter_custom_tabs_web - sha256: f90a09501c8be7db4604da1d504f39b73c7525dc60f2ffce4cdea0f015e42eb0 + sha256: "236e035c73b6d3ef0a2f85cd8b6b815954e7559c9f9d50a15ed2e53a297b58b0" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" flutter_highlight: dependency: transitive description: @@ -655,10 +655,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "6.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -668,10 +668,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "5a1e6fb2c0561958d7e4c33574674bda7b77caaca7a33b758876956f2902eea3" + sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e url: "https://pub.dev" source: hosted - version: "2.0.27" + version: "2.0.28" flutter_riverpod: dependency: "direct main" description: @@ -700,18 +700,18 @@ packages: dependency: "direct main" description: name: flutter_sticky_header - sha256: "7f76d24d119424ca0c95c146b8627a457e8de8169b0d584f766c2c545db8f8be" + sha256: fb4fda6164ef3e5fc7ab73aba34aad253c17b7c6ecf738fa26f1a905b7d2d1e2 url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.8.0" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b + sha256: d44bf546b13025ec7353091516f6881f1d4c633993cb109c3916c3a0159dadf1 url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -734,18 +734,18 @@ packages: dependency: "direct main" description: name: flutter_widget_from_html - sha256: f3967a5b42896662efdd420b5adaf8a7d3692b0f44462a07c80e3b4c173b1a02 + sha256: "0dfebf7417df2149de93926520c703db9be0c9017e60dc5cf43cebed37f4d11e" url: "https://pub.dev" source: hosted - version: "0.15.3" + version: "0.16.0" flutter_widget_from_html_core: dependency: transitive description: name: flutter_widget_from_html_core - sha256: b1048fd119a14762e2361bd057da608148a895477846d6149109b2151d2f7abf + sha256: f77ea1aa1ba29a38fcce04483f44f12382f541b9e8c2150df37166c23bbbd30f url: "https://pub.dev" source: hosted - version: "0.15.2" + version: "0.16.0" font_awesome_flutter: dependency: "direct main" description: @@ -782,50 +782,50 @@ packages: dependency: "direct main" description: name: fvp - sha256: "724802f4c3f4d22cd2913356e91208096ba5aaab1db71c9e12b66bef4cf6f799" + sha256: a2b6f305a5e559abc21b1be06ca0ffb5bb6b5b523d6d45eb8e78d53f3b89e9a2 url: "https://pub.dev" source: hosted - version: "0.31.0" + version: "0.32.1" fwfh_cached_network_image: dependency: transitive description: name: fwfh_cached_network_image - sha256: "8e44226801bfba27930673953afce8af44da7e92573be93f60385d9865a089dd" + sha256: "8f4896109ff3e42424ccacf9058ba3afe5d575b58946c8ac646ac85ae882ce23" url: "https://pub.dev" source: hosted - version: "0.14.3" + version: "0.16.0" fwfh_chewie: dependency: transitive description: name: fwfh_chewie - sha256: "37bde9cedfb6dc5546176f7f0c56af1e814966cb33ec58f16c9565ed93ccb704" + sha256: "1ce7c56894db19881a997813b933835dec142878431370c0eb40f1f878396a25" url: "https://pub.dev" source: hosted - version: "0.14.8" + version: "0.16.0" fwfh_just_audio: dependency: transitive description: name: fwfh_just_audio - sha256: "38dc2c55803bd3cef33042c473e0c40b891ad4548078424641a32032f6a1245f" + sha256: "17816168de1fd180fd3d1fd4500e23136630a248a6889b553e2d2067e133c1a6" url: "https://pub.dev" source: hosted - version: "0.15.2" + version: "0.16.0" fwfh_svg: dependency: transitive description: name: fwfh_svg - sha256: "550b1014d12b5528d8bdb6e3b44b58721f3fb1f65d7a852d1623a817008bdfc4" + sha256: "82f3eb378186fe39b3e2e01ed48a1830d34b0b9a237d951077e74ff0d99e2ac3" url: "https://pub.dev" source: hosted - version: "0.8.3" + version: "0.16.0" fwfh_url_launcher: dependency: transitive description: name: fwfh_url_launcher - sha256: b9f5d55a5ae2c2c07243ba33f7ba49ac9544bdb2f4c16d8139df9ccbebe3449c + sha256: "5cf1b1baa16740abaef8eb41a8e16ba430295d5ec20b880e4cb94e2924774f0a" url: "https://pub.dev" source: hosted - version: "0.9.1" + version: "0.16.0" fwfh_webview: dependency: transitive description: @@ -862,18 +862,18 @@ packages: dependency: transitive description: name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" url: "https://pub.dev" source: hosted - version: "0.15.5" + version: "0.15.6" http: dependency: "direct main" description: name: http - sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" http_client_helper: dependency: transitive description: @@ -926,10 +926,10 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.2" io: dependency: transitive description: @@ -998,18 +998,18 @@ packages: dependency: transitive description: name: just_audio_web - sha256: "8c7e779892e180cbc9ffb5a3c52f6e90e1cbbf4a63694cc450972a7edbd2bb6d" + sha256: "6ba8a2a7e87d57d32f0f7b42856ade3d6a9fbe0f1a11fabae0a4f00bb73f0663" url: "https://pub.dev" source: hosted - version: "0.4.15" + version: "0.4.16" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: @@ -1030,10 +1030,10 @@ packages: dependency: transitive description: name: lints - sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "6.0.0" local_auth: dependency: "direct main" description: @@ -1046,10 +1046,10 @@ packages: dependency: transitive description: name: local_auth_android - sha256: "0abe4e72f55c785b28900de52a2522c86baba0988838b5dc22241b072ecccd74" + sha256: "63ad7ca6396290626dc0cb34725a939e4cfe965d80d36112f08d49cf13a8136e" url: "https://pub.dev" source: hosted - version: "1.0.48" + version: "1.0.49" local_auth_darwin: dependency: transitive description: @@ -1230,10 +1230,10 @@ packages: dependency: "direct main" description: name: overflow_view - sha256: e75e834cd93f7abe9d4edc371a17ee92373147b9e973fdc05373ec3d3f163075 + sha256: aa39c40f8229e6dcd243e544d707457ff630bb99063d2fd0be8b31f8da902e27 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.0" package_config: dependency: transitive description: @@ -1294,10 +1294,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "0ca7359dad67fd7063cb2892ab0c0737b2daafd807cf1acecd62374c8fae6c12" + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 url: "https://pub.dev" source: hosted - version: "2.2.16" + version: "2.2.17" path_provider_foundation: dependency: transitive description: @@ -1382,10 +1382,10 @@ packages: dependency: transitive description: name: pointer_interceptor_web - sha256: "7a7087782110f8c1827170660b09f8aa893e0e9a61431dbbe2ac3fc482e8c044" + sha256: "460b600e71de6fcea2b3d5f662c92293c049c4319e27f0829310e5a953b3ee2a" url: "https://pub.dev" source: hosted - version: "0.10.2+1" + version: "0.10.3" pool: dependency: transitive description: @@ -1398,18 +1398,18 @@ packages: dependency: transitive description: name: posix - sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.0.2" provider: dependency: transitive description: name: provider - sha256: "489024f942069c2920c844ee18bb3d467c69e48955a4f32d1677f71be103e310" + sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.1.5" pub_semver: dependency: transitive description: @@ -1430,10 +1430,10 @@ packages: dependency: transitive description: name: qs_dart - sha256: c775dbe663cd59365050220b3499dee259b72ad6b352a3e087a15bd77e161b74 + sha256: f8d9f9f75fa6e6e72437995ccb549a27d52ec06236cfad1f4e5eceb755427649 url: "https://pub.dev" source: hosted - version: "1.3.3+1" + version: "1.3.7+1" recase: dependency: transitive description: @@ -1510,10 +1510,10 @@ packages: dependency: "direct main" description: name: screen_brightness - sha256: eca7bd9d2c3c688bcad14855361cab7097839400b6b4a56f62b7ae511c709958 + sha256: "20b43489fbb12316d64633d5abb731f8d3e2c49871f65c8e434c6225d0f58fcf" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" screen_brightness_android: dependency: transitive description: @@ -1526,10 +1526,10 @@ packages: dependency: transitive description: name: screen_brightness_ios - sha256: bfd9bfd0ac852e7aa170e7e356cc27195b2a75037b72c8c6336cf6fb2115cffb + sha256: "2493953340ecfe8f4f13f61db50ce72533a55b0bbd58ba1402893feecf3727f5" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" screen_brightness_macos: dependency: transitive description: @@ -1538,6 +1538,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + screen_brightness_ohos: + dependency: transitive + description: + name: screen_brightness_ohos + sha256: "61e313e46eaee3f83dd4e85a2a91f8a81be02c154bc9e60830a7c0fd76dac286" + url: "https://pub.dev" + source: hosted + version: "2.1.0" screen_brightness_platform_interface: dependency: transitive description: @@ -1606,18 +1614,18 @@ packages: dependency: "direct main" description: name: share_plus - sha256: fce43200aa03ea87b91ce4c3ac79f0cecd52e2a7a56c7a4185023c271fbfa6da + sha256: b2961506569e28948d75ec346c28775bb111986bb69dc6a20754a457e3d97fa0 url: "https://pub.dev" source: hosted - version: "10.1.4" + version: "11.0.0" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - sha256: cc012a23fc2d479854e6c80150696c4a5f5bb62cb89af4de1c505cf78d0a5d0b + sha256: "1032d392bc5d2095a77447a805aa3f804d2ae6a4d5eef5e6ebb3bd94c1bc19ef" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.0.0" shared_preferences: dependency: "direct main" description: @@ -1630,10 +1638,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "3ec7210872c4ba945e3244982918e502fa2bfb5230dff6832459ca0e1879b7ad" + sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" url: "https://pub.dev" source: hosted - version: "2.4.8" + version: "2.4.10" shared_preferences_foundation: dependency: transitive description: @@ -1947,10 +1955,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "1d0eae19bd7606ef60fe69ef3b312a437a16549476c42321d5dc1506c9ca3bf4" + sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" url: "https://pub.dev" source: hosted - version: "6.3.15" + version: "6.3.16" url_launcher_ios: dependency: transitive description: @@ -1987,10 +1995,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "3ba963161bd0fe395917ba881d320b9c4f6dd3c4a233da62ab18a5025c85f1e9" + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" url_launcher_windows: dependency: transitive description: @@ -2011,10 +2019,10 @@ packages: dependency: transitive description: name: value_layout_builder - sha256: c02511ea91ca5c643b514a33a38fa52536f74aa939ec367d02938b5ede6807fa + sha256: ab4b7d98bac8cefeb9713154d43ee0477490183f5aa23bb4ffa5103d9bbf6275 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.0" vector_graphics: dependency: transitive description: @@ -2035,10 +2043,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331" url: "https://pub.dev" source: hosted - version: "1.1.16" + version: "1.1.17" vector_math: dependency: transitive description: @@ -2051,26 +2059,26 @@ packages: dependency: "direct main" description: name: video_player - sha256: "7d78f0cfaddc8c19d4cb2d3bebe1bfef11f2103b0a03e5398b303a1bf65eeb14" + sha256: "0d55b1f1a31e5ad4c4967bfaa8ade0240b07d20ee4af1dfef5f531056512961a" url: "https://pub.dev" source: hosted - version: "2.9.5" + version: "2.10.0" video_player_android: dependency: transitive description: name: video_player_android - sha256: ae7d4f1b41e3ac6d24dd9b9d5d6831b52d74a61bdd90a7a6262a33d8bb97c29a + sha256: "4a5135754a62dbc827a64a42ef1f8ed72c962e191c97e2d48744225c2b9ebb73" url: "https://pub.dev" source: hosted - version: "2.8.2" + version: "2.8.7" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: "84b4752745eeccb6e75865c9aab39b3d28eb27ba5726d352d45db8297fbd75bc" + sha256: "9ee764e5cd2fc1e10911ae8ad588e1a19db3b6aa9a6eb53c127c42d3a3c3f22f" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.7.1" video_player_platform_interface: dependency: transitive description: @@ -2083,10 +2091,10 @@ packages: dependency: transitive description: name: video_player_web - sha256: "3ef40ea6d72434edbfdba4624b90fd3a80a0740d260667d91e7ecd2d79e13476" + sha256: e8bba2e5d1e159d5048c9a491bb2a7b29c535c612bb7d10c1e21107f5bd365ba url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.5" visibility_detector: dependency: transitive description: @@ -2099,34 +2107,34 @@ packages: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.0" volume_controller: dependency: transitive description: name: volume_controller - sha256: e82fd689bb8e1fe8e64be3fa5946ff8699058f8cf9f4c1679acdba20cda7f5bd + sha256: d75039e69c0d90e7810bfd47e3eedf29ff8543ea7a10392792e81f9bded7edf5 url: "https://pub.dev" source: hosted - version: "3.3.3" + version: "3.4.0" wakelock_plus: dependency: "direct main" description: name: wakelock_plus - sha256: b90fbcc8d7bdf3b883ea9706d9d76b9978cb1dfa4351fcc8014d6ec31a493354 + sha256: a474e314c3e8fb5adef1f9ae2d247e57467ad557fa7483a2b895bc1b421c5678 url: "https://pub.dev" source: hosted - version: "1.2.11" + version: "1.3.2" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a" + sha256: e10444072e50dbc4999d7316fd303f7ea53d31c824aa5eb05d7ccbdd98985207 url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.3" watcher: dependency: transitive description: @@ -2155,66 +2163,66 @@ packages: dependency: transitive description: name: web_socket - sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" url: "https://pub.dev" source: hosted - version: "0.1.6" + version: "1.0.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "0b8e2457400d8a859b7b2030786835a28a8e80836ef64402abef392ff4f1d0e5" + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webview_flutter: dependency: transitive description: name: webview_flutter - sha256: "889a0a678e7c793c308c68739996227c9661590605e70b1f6cf6b9a6634f7aec" + sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba url: "https://pub.dev" source: hosted - version: "4.10.0" + version: "4.13.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: e09150b28a07933839adef0e4a088bb43e8c8d9e6b93025b01882d4067a58ab0 + sha256: f6e6afef6e234801da77170f7a1847ded8450778caf2fe13979d140484be3678 url: "https://pub.dev" source: hosted - version: "4.3.4" + version: "4.7.0" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d + sha256: f0dc2dc3a2b1e3a6abdd6801b9355ebfeb3b8f6cde6b9dc7c9235909c4a1f147 url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.13.1" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: c14455137ce60a68e1ccaf4e8f2dae8cebcb3465ddaa2fcfb57584fb7c5afe4d + sha256: a3d461fe3467014e05f3ac4962e5fdde2a4bf44c561cb53e9ae5c586600fdbc3 url: "https://pub.dev" source: hosted - version: "3.18.5" + version: "3.22.0" win32: dependency: transitive description: name: win32 - sha256: dc6ecaa00a7c708e5b4d10ee7bec8c270e9276dfcab1783f57e9962d7884305f + sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba" url: "https://pub.dev" source: hosted - version: "5.12.0" + version: "5.13.0" window_manager: dependency: "direct main" description: name: window_manager - sha256: "732896e1416297c63c9e3fb95aea72d0355f61390263982a47fd519169dc5059" + sha256: "51d50168ab267d344b975b15390426b1243600d436770d3f13de67e55b05ec16" url: "https://pub.dev" source: hosted - version: "0.4.3" + version: "0.5.0" xdg_directories: dependency: transitive description: @@ -2248,5 +2256,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.7.0 <4.0.0" - flutter: ">=3.27.0" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.32.0" diff --git a/pubspec.yaml b/pubspec.yaml index f0ff288..7ceb72c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,11 +40,11 @@ dependencies: iconsax_plus: ^1.0.0 # Network and HTTP - chopper: ^8.0.4 + chopper: ^8.1.0 cached_network_image: ^3.4.1 - http: ^1.3.0 + http: ^1.4.0 flutter_cache_manager: ^3.4.1 - connectivity_plus: ^6.1.3 + connectivity_plus: ^6.1.4 # State Management flutter_riverpod: ^2.6.1 @@ -58,59 +58,59 @@ dependencies: logging: ^1.3.0 # Internationalization - intl: ^0.19.0 + intl: ^0.20.2 # Local Storage - shared_preferences: ^2.5.1 + shared_preferences: ^2.5.3 path_provider: ^2.1.5 # Media media_kit: ^1.2.0 # Primary package. - media_kit_video: ^1.2.5 # For video rendering. - media_kit_libs_video: ^1.0.5 # Native video dependencies. - audio_service: ^0.18.16 - fvp: ^0.31.0 - video_player: ^2.9.2 + media_kit_video: ^1.3.0 # For video rendering. + media_kit_libs_video: ^1.0.6 # Native video dependencies. + audio_service: ^0.18.18 + fvp: ^0.32.1 + video_player: ^2.10.0 # UI Components dynamic_color: ^1.7.0 - flutter_svg: ^2.0.17 + flutter_svg: ^2.1.0 animations: ^2.0.11 automatic_animated_list: ^1.1.0 page_transition: ^2.2.1 sticky_headers: ^0.3.0+2 flutter_staggered_grid_view: ^0.7.0 sliver_tools: ^0.2.12 - square_progress_indicator: ^0.0.7 - flutter_blurhash: ^0.8.2 - extended_image: ^9.1.0 - flutter_widget_from_html: ^0.15.3 + square_progress_indicator: ^0.0.8 + flutter_blurhash: ^0.9.1 + extended_image: ^10.0.1 + flutter_widget_from_html: ^0.16.0 font_awesome_flutter: ^10.8.0 reorderable_grid: ^1.0.10 - overflow_view: ^0.4.0 - flutter_sticky_header: ^0.7.0 + overflow_view: ^0.5.0 + flutter_sticky_header: ^0.8.0 markdown_widget: ^2.3.2+8 # Navigation auto_route: ^9.3.0+1 url_launcher: ^6.3.1 - flutter_custom_tabs: ^2.1.0 + flutter_custom_tabs: ^2.4.0 # Utility - path: ^1.9.0 - file_picker: ^8.3.1 + path: ^1.9.1 + file_picker: ^10.1.9 transparent_image: ^2.0.1 universal_html: ^2.2.4 - collection: ^1.19.0 + collection: ^1.19.1 # Device and System local_auth: ^2.3.0 - package_info_plus: ^8.1.4 - wakelock_plus: ^1.2.10 - screen_brightness: ^2.1.1 - window_manager: ^0.4.3 + package_info_plus: ^8.3.0 + wakelock_plus: ^1.3.2 + screen_brightness: ^2.1.4 + window_manager: ^0.5.0 smtc_windows: ^1.0.0 - background_downloader: ^8.9.4 + background_downloader: ^9.2.2 screen_retriever: ^0.2.0 # Data @@ -118,14 +118,14 @@ dependencies: isar_flutter_libs: ^4.0.0-dev.14 # contains Isar Core # Other - async: ^2.11.0 + async: ^2.13.0 xid: ^1.2.1 - desktop_drop: ^0.5.0 + desktop_drop: ^0.6.0 flexible_scrollbar: ^0.1.3 flutter_typeahead: ^5.2.0 - share_plus: ^10.1.4 - archive: ^4.0.2 - dart_mappable: ^4.3.0 + share_plus: ^11.0.0 + archive: ^4.0.7 + dart_mappable: ^4.5.0 dev_dependencies: flutter_test: @@ -136,17 +136,17 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^5.0.0 - build_runner: ^2.4.14 - chopper_generator: ^8.0.4 + flutter_lints: ^6.0.0 + build_runner: ^2.4.15 + chopper_generator: ^8.1.0 json_serializable: ^6.9.0 custom_lint: ^0.7.0 freezed: ^2.5.7 swagger_dart_code_generator: ^3.0.1 riverpod_generator: ^2.6.3 - dart_mappable_builder: ^4.3.0 + dart_mappable_builder: ^4.3.1+1 auto_route_generator: ^9.0.0 - icons_launcher: ^3.0.0 + icons_launcher: ^3.0.1 flutter: # The following line ensures that the Material Icons font is