fix: clear home_widget on logout, init in login
This commit is contained in:
parent
0c569d7e97
commit
ce6e5e18cc
|
@ -1,3 +1,4 @@
|
||||||
|
import "dart:async";
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import "dart:io";
|
import "dart:io";
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
@ -18,6 +19,7 @@ import 'package:photos/db/trash_db.dart';
|
||||||
import 'package:photos/db/upload_locks_db.dart';
|
import 'package:photos/db/upload_locks_db.dart';
|
||||||
import 'package:photos/events/signed_in_event.dart';
|
import 'package:photos/events/signed_in_event.dart';
|
||||||
import 'package:photos/events/user_logged_out_event.dart';
|
import 'package:photos/events/user_logged_out_event.dart';
|
||||||
|
import "package:photos/main.dart";
|
||||||
import 'package:photos/models/key_attributes.dart';
|
import 'package:photos/models/key_attributes.dart';
|
||||||
import 'package:photos/models/key_gen_result.dart';
|
import 'package:photos/models/key_gen_result.dart';
|
||||||
import 'package:photos/models/private_key_attributes.dart';
|
import 'package:photos/models/private_key_attributes.dart';
|
||||||
|
@ -174,6 +176,7 @@ class Configuration {
|
||||||
MemoriesService.instance.clearCache();
|
MemoriesService.instance.clearCache();
|
||||||
BillingService.instance.clearCache();
|
BillingService.instance.clearCache();
|
||||||
SearchService.instance.clearCache();
|
SearchService.instance.clearCache();
|
||||||
|
unawaited(clearHomeWidget());
|
||||||
Bus.instance.fire(UserLoggedOutEvent());
|
Bus.instance.fire(UserLoggedOutEvent());
|
||||||
} else {
|
} else {
|
||||||
await _preferences.setBool("auto_logout", true);
|
await _preferences.setBool("auto_logout", true);
|
||||||
|
|
|
@ -72,23 +72,38 @@ const kBackgroundLockLatency = Duration(seconds: 3);
|
||||||
void initSlideshowWidget() {
|
void initSlideshowWidget() {
|
||||||
Workmanager().executeTask(
|
Workmanager().executeTask(
|
||||||
(taskName, inputData) async {
|
(taskName, inputData) async {
|
||||||
|
try {
|
||||||
await _init(true, via: 'runViaSlideshowWidget');
|
await _init(true, via: 'runViaSlideshowWidget');
|
||||||
|
await initHomeWidget();
|
||||||
|
return true;
|
||||||
|
} catch (e, s) {
|
||||||
|
_logger.severe("Error in initSlideshowWidget", e, s);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future initHomeOnLogin() async {
|
||||||
|
_logger.info("Initializing SlideshowWidget on login");
|
||||||
|
initHomeWidget().catchError((e, s) {
|
||||||
|
_logger.severe("SlideshowWidget: Error in initHomeOnLogin", e, s);
|
||||||
|
}).ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> initHomeWidget() async {
|
||||||
|
final user = Configuration.instance.getUserID();
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
await clearHomeWidget();
|
||||||
|
throw Exception("User not found");
|
||||||
|
}
|
||||||
|
|
||||||
final collectionID =
|
final collectionID =
|
||||||
await FavoritesService.instance.getFavoriteCollectionID();
|
await FavoritesService.instance.getFavoriteCollectionID();
|
||||||
if (collectionID == null) {
|
if (collectionID == null) {
|
||||||
await hw.HomeWidget.saveWidgetData(
|
await clearHomeWidget();
|
||||||
"slideshow",
|
throw Exception("Collection not found");
|
||||||
null,
|
|
||||||
);
|
|
||||||
|
|
||||||
await hw.HomeWidget.updateWidget(
|
|
||||||
name: 'SlideshowWidgetProvider',
|
|
||||||
androidName: 'SlideshowWidgetProvider',
|
|
||||||
qualifiedAndroidName: 'io.ente.photos.SlideshowWidgetProvider',
|
|
||||||
iOSName: 'SlideshowWidget',
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -109,7 +124,7 @@ void initSlideshowWidget() {
|
||||||
final randomNumber = Random().nextInt(files.length);
|
final randomNumber = Random().nextInt(files.length);
|
||||||
final randomFile = files.elementAt(randomNumber);
|
final randomFile = files.elementAt(randomNumber);
|
||||||
final fullImage = await getFileFromServer(randomFile);
|
final fullImage = await getFileFromServer(randomFile);
|
||||||
if (fullImage == null) return false;
|
if (fullImage == null) throw Exception("File not found");
|
||||||
|
|
||||||
Image img = Image.file(fullImage);
|
Image img = Image.file(fullImage);
|
||||||
var imgProvider = img.image;
|
var imgProvider = img.image;
|
||||||
|
@ -158,12 +173,29 @@ void initSlideshowWidget() {
|
||||||
_logger.info(
|
_logger.info(
|
||||||
">>> SlideshowWidget rendered with size ${width}x$height",
|
">>> SlideshowWidget rendered with size ${width}x$height",
|
||||||
);
|
);
|
||||||
return true;
|
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
return false;
|
throw Exception("Error rendering widget");
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
|
Future<void> clearHomeWidget() async {
|
||||||
|
final previousGeneratedId =
|
||||||
|
await hw.HomeWidget.getWidgetData<int>("home_widget_last_img");
|
||||||
|
if (previousGeneratedId == null) return;
|
||||||
|
|
||||||
|
_logger.info("Clearing SlideshowWidget");
|
||||||
|
await hw.HomeWidget.saveWidgetData(
|
||||||
|
"slideshow",
|
||||||
|
null,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
await hw.HomeWidget.updateWidget(
|
||||||
|
name: 'SlideshowWidgetProvider',
|
||||||
|
androidName: 'SlideshowWidgetProvider',
|
||||||
|
qualifiedAndroidName: 'io.ente.photos.SlideshowWidgetProvider',
|
||||||
|
iOSName: 'SlideshowWidget',
|
||||||
|
);
|
||||||
|
_logger.info(">>> SlideshowWidget cleared");
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> initWorkmanager() async {
|
Future<void> initWorkmanager() async {
|
||||||
|
|
|
@ -24,6 +24,7 @@ import 'package:photos/events/tab_changed_event.dart';
|
||||||
import 'package:photos/events/trigger_logout_event.dart';
|
import 'package:photos/events/trigger_logout_event.dart';
|
||||||
import 'package:photos/events/user_logged_out_event.dart';
|
import 'package:photos/events/user_logged_out_event.dart';
|
||||||
import "package:photos/generated/l10n.dart";
|
import "package:photos/generated/l10n.dart";
|
||||||
|
import "package:photos/main.dart";
|
||||||
import 'package:photos/models/collection/collection_items.dart';
|
import 'package:photos/models/collection/collection_items.dart';
|
||||||
import 'package:photos/models/selected_files.dart';
|
import 'package:photos/models/selected_files.dart';
|
||||||
import 'package:photos/services/app_lifecycle_service.dart';
|
import 'package:photos/services/app_lifecycle_service.dart';
|
||||||
|
@ -107,6 +108,7 @@ class _HomeWidgetState extends State<HomeWidget> {
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
_logger.info("Building initstate");
|
_logger.info("Building initstate");
|
||||||
|
unawaited(initHomeOnLogin());
|
||||||
_tabChangedEventSubscription =
|
_tabChangedEventSubscription =
|
||||||
Bus.instance.on<TabChangedEvent>().listen((event) {
|
Bus.instance.on<TabChangedEvent>().listen((event) {
|
||||||
_selectedTabIndex = event.selectedIndex;
|
_selectedTabIndex = event.selectedIndex;
|
||||||
|
|
Loading…
Reference in a new issue