mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-24 02:18:50 +01:00
Fix race condition when mixing stream and raw access with pref controller
This commit is contained in:
parent
c1e8f28001
commit
f848f612ea
9 changed files with 21 additions and 18 deletions
|
@ -218,8 +218,9 @@ class HomeSearchSuggestionBloc
|
|||
_log.warning("[_onEventPreloadData] Failed while ListTag", e);
|
||||
}
|
||||
try {
|
||||
final persons =
|
||||
await ListPerson(_c)(account, accountPrefController.raw).last;
|
||||
final persons = await ListPerson(_c)(
|
||||
account, accountPrefController.personProvider.value)
|
||||
.last;
|
||||
product.addAll(persons.map((t) => _PersonSearcheable(t)));
|
||||
_log.info("[_onEventPreloadData] Loaded ${persons.length} people");
|
||||
} catch (e) {
|
||||
|
|
|
@ -114,7 +114,8 @@ class SearchLandingBloc
|
|||
}
|
||||
|
||||
Future<List<Person>> _queryPeople(SearchLandingBlocQuery ev) =>
|
||||
ListPerson(_c.withLocalRepo())(ev.account, ev.accountPrefController.raw)
|
||||
ListPerson(_c.withLocalRepo())(
|
||||
ev.account, ev.accountPrefController.personProvider.value)
|
||||
.last;
|
||||
|
||||
Future<LocationGroupResult> _queryLocations(SearchLandingBlocQuery ev) =>
|
||||
|
|
|
@ -54,8 +54,6 @@ class AccountPrefController {
|
|||
value: value,
|
||||
);
|
||||
|
||||
AccountPref get raw => _accountPref;
|
||||
|
||||
Future<void> _set<T>({
|
||||
required BehaviorSubject<T> controller,
|
||||
required Future<bool> Function(AccountPref pref, T value) setter,
|
||||
|
|
|
@ -62,7 +62,9 @@ class PersonsController {
|
|||
var lastData = _personStreamContorller.value.copyWith(hasNext: true);
|
||||
_personStreamContorller.add(lastData);
|
||||
final completer = Completer();
|
||||
ListPerson(_c.withLocalRepo())(account, accountPrefController.raw).listen(
|
||||
ListPerson(_c.withLocalRepo())(
|
||||
account, accountPrefController.personProvider.value)
|
||||
.listen(
|
||||
(results) {
|
||||
lastData = PersonStreamEvent(
|
||||
data: results,
|
||||
|
|
|
@ -3,7 +3,6 @@ import 'package:nc_photos/account.dart';
|
|||
import 'package:nc_photos/di_container.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/file_descriptor.dart';
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/remote_storage_util.dart' as remote_storage_util;
|
||||
import 'package:nc_photos/use_case/list_potential_shared_album.dart';
|
||||
import 'package:nc_photos/use_case/move.dart';
|
||||
|
@ -22,11 +21,11 @@ class ImportPotentialSharedAlbum {
|
|||
DiContainer.has(c, DiType.albumRepo) &&
|
||||
DiContainer.has(c, DiType.fileRepo);
|
||||
|
||||
Future<List<Album>> call(Account account, AccountPref accountPref) async {
|
||||
Future<List<Album>> call(Account account, String shareFolder) async {
|
||||
_log.info("[call] $account");
|
||||
final products = <Album>[];
|
||||
final files =
|
||||
await ListPotentialSharedAlbum(_c.fileRepo)(account, accountPref);
|
||||
await ListPotentialSharedAlbum(_c.fileRepo)(account, shareFolder);
|
||||
for (final f in files) {
|
||||
// check if the file is actually an album
|
||||
try {
|
||||
|
|
|
@ -4,7 +4,6 @@ import 'package:nc_photos/account.dart';
|
|||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/entity/file_descriptor.dart';
|
||||
import 'package:nc_photos/entity/file_util.dart' as file_util;
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/use_case/ls.dart';
|
||||
import 'package:np_codegen/np_codegen.dart';
|
||||
|
||||
|
@ -17,12 +16,12 @@ part 'list_potential_shared_album.g.dart';
|
|||
class ListPotentialSharedAlbum {
|
||||
ListPotentialSharedAlbum(this.fileRepo);
|
||||
|
||||
Future<List<File>> call(Account account, AccountPref accountPref) async {
|
||||
Future<List<File>> call(Account account, String shareFolder) async {
|
||||
final results = <File>[];
|
||||
final ls = await Ls(fileRepo)(
|
||||
account,
|
||||
File(
|
||||
path: file_util.unstripPath(account, accountPref.getShareFolderOr()),
|
||||
path: file_util.unstripPath(account, shareFolder),
|
||||
),
|
||||
);
|
||||
for (final f in ls) {
|
||||
|
|
|
@ -5,7 +5,6 @@ import 'package:nc_photos/account.dart';
|
|||
import 'package:nc_photos/di_container.dart';
|
||||
import 'package:nc_photos/entity/person.dart';
|
||||
import 'package:nc_photos/entity/person/builder.dart';
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/use_case/face_recognition_person/list_face_recognition_person.dart';
|
||||
import 'package:nc_photos/use_case/recognize_face/list_recognize_face.dart';
|
||||
import 'package:nc_photos/use_case/recognize_face/list_recognize_face_item.dart';
|
||||
|
@ -17,9 +16,7 @@ part 'list_person.g.dart';
|
|||
class ListPerson {
|
||||
const ListPerson(this._c);
|
||||
|
||||
Stream<List<Person>> call(Account account, AccountPref accountPref) async* {
|
||||
final provider =
|
||||
PersonProvider.fromValue(accountPref.getPersonProviderOr());
|
||||
Stream<List<Person>> call(Account account, PersonProvider provider) async* {
|
||||
_log.info("[call] Current provider: $provider");
|
||||
switch (provider) {
|
||||
case PersonProvider.none:
|
||||
|
|
|
@ -185,7 +185,13 @@ class _HomeState extends State<Home> with TickerProviderStateMixin {
|
|||
);
|
||||
try {
|
||||
return await ImportPotentialSharedAlbum(c)(
|
||||
widget.account, AccountPref.of(widget.account));
|
||||
widget.account,
|
||||
context
|
||||
.read<AccountController>()
|
||||
.accountPrefController
|
||||
.shareFolder
|
||||
.value,
|
||||
);
|
||||
} catch (e, stacktrace) {
|
||||
_log.shout(
|
||||
"[_importPotentialSharedAlbum] Failed while ImportPotentialSharedAlbum",
|
||||
|
|
|
@ -70,7 +70,7 @@ class _Bloc extends Bloc<_Event, _State> {
|
|||
);
|
||||
try {
|
||||
return await ImportPotentialSharedAlbum(c)(
|
||||
account, accountPrefController.raw);
|
||||
account, accountPrefController.shareFolder.value);
|
||||
} catch (e, stackTrace) {
|
||||
_log.shout(
|
||||
"[_importPotentialSharedAlbum] Failed while ImportPotentialSharedAlbum",
|
||||
|
|
Loading…
Reference in a new issue