feature: Added option to save and set default filters for libraries (#107)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2024-11-02 15:44:24 +01:00 committed by GitHub
parent d3e34d57e0
commit 691293648b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 1353 additions and 62 deletions

View file

@ -1,12 +1,15 @@
import 'package:chopper/chopper.dart';
import 'package:collection/collection.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:fladder/jellyfin/enum_models.dart';
import 'package:fladder/models/account_model.dart';
import 'package:fladder/models/items/item_shared_models.dart';
import 'package:fladder/models/library_filters_model.dart';
import 'package:fladder/providers/api_provider.dart';
import 'package:fladder/providers/service_provider.dart';
import 'package:fladder/providers/shared_provider.dart';
import 'package:fladder/providers/sync_provider.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'user_provider.g.dart';
@ -142,4 +145,30 @@ class User extends _$User {
AccountModel? build() {
return null;
}
void removeFilter(LibraryFiltersModel model) {
final currentList = ((state?.savedFilters ?? [])).toList(growable: true);
currentList.remove(model);
state = state?.copyWith(savedFilters: currentList);
}
void saveFilter(LibraryFiltersModel model) {
final currentList = (state?.savedFilters ?? []).toList(growable: true);
if (currentList.firstWhereOrNull((value) => value.id == model.id) != null) {
state = state?.copyWith(
savedFilters: currentList.map(
(e) {
if (e.id == model.id) {
return model;
} else {
return e.copyWith(isFavourite: model.isFavourite && model.containsSameIds(e.ids) ? false : e.isFavourite);
}
},
).toList());
} else {
state = state?.copyWith(savedFilters: [model, ...currentList]);
}
}
void deleteAllFilters() => state = state?.copyWith(savedFilters: []);
}