diff --git a/filcnaplo/lib/api/providers/user_provider.dart b/filcnaplo/lib/api/providers/user_provider.dart index b955f71..b077554 100644 --- a/filcnaplo/lib/api/providers/user_provider.dart +++ b/filcnaplo/lib/api/providers/user_provider.dart @@ -1,3 +1,4 @@ +import 'package:filcnaplo/models/settings.dart'; import 'package:filcnaplo/models/user.dart'; import 'package:filcnaplo_kreta_api/models/student.dart'; import 'package:flutter/foundation.dart'; @@ -18,8 +19,13 @@ class UserProvider with ChangeNotifier { String? get nickname => user?.nickname; String? get displayName => user?.displayName; + final SettingsProvider _settings; + + UserProvider({required SettingsProvider settings}) : _settings = settings; + void setUser(String userId) { _selectedUserId = userId; + _settings.update(lastAccountId: userId); notifyListeners(); } diff --git a/filcnaplo/lib/app.dart b/filcnaplo/lib/app.dart index 91a823f..3b4f15f 100644 --- a/filcnaplo/lib/app.dart +++ b/filcnaplo/lib/app.dart @@ -52,9 +52,7 @@ class App extends StatelessWidget { final UserProvider user; final DatabaseProvider database; - App({Key? key, required this.database, required this.settings, required this.user}) : super(key: key) { - if (user.getUsers().isNotEmpty) user.setUser(user.getUsers().first.id); - } + const App({Key? key, required this.database, required this.settings, required this.user}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/filcnaplo/lib/database/init.dart b/filcnaplo/lib/database/init.dart index 44eeba9..09d125b 100644 --- a/filcnaplo/lib/database/init.dart +++ b/filcnaplo/lib/database/init.dart @@ -16,7 +16,7 @@ const settingsDB = DatabaseStruct("settings", { "vibration_strength": int, "ab_weeks": int, "swap_ab_weeks": int, "notifications": int, "notifications_bitfield": int, "notification_poll_interval": int, // notifications "x_filc_id": String, "graph_class_avg": int, "presentation_mode": int, "bell_delay": int, "bell_delay_enabled": int, - "grade_opening_fun": int, "icon_pack": String, "premium_scopes": String, "premium_token": String, + "grade_opening_fun": int, "icon_pack": String, "premium_scopes": String, "premium_token": String, "last_account_id": String, }); const usersDB = DatabaseStruct("users", { "id": String, "name": String, "username": String, "password": String, "institute_code": String, "student": String, "role": int, diff --git a/filcnaplo/lib/database/query.dart b/filcnaplo/lib/database/query.dart index 797d58a..ddbc3cd 100644 --- a/filcnaplo/lib/database/query.dart +++ b/filcnaplo/lib/database/query.dart @@ -29,12 +29,18 @@ class DatabaseQuery { return settings; } - Future getUsers() async { - var userProvider = UserProvider(); + Future getUsers(SettingsProvider settings) async { + var userProvider = UserProvider(settings: settings); List usersMap = await db.query("users"); for (var user in usersMap) { userProvider.addUser(User.fromMap(user)); } + if (userProvider.getUsers().map((e) => e.id).contains(settings.lastAccountId)) { + userProvider.setUser(settings.lastAccountId); + } else { + userProvider.setUser(userProvider.getUsers().first.id); + settings.update(lastAccountId: userProvider.id); + } return userProvider; } } diff --git a/filcnaplo/lib/main.dart b/filcnaplo/lib/main.dart index 3de1311..5d660e9 100644 --- a/filcnaplo/lib/main.dart +++ b/filcnaplo/lib/main.dart @@ -37,7 +37,7 @@ class Startup { await db.close(); await database.init(); settings = await database.query.getSettings(database); - user = await database.query.getUsers(); + user = await database.query.getUsers(settings); } } diff --git a/filcnaplo/lib/models/settings.dart b/filcnaplo/lib/models/settings.dart index 48c1f59..b2ed265 100644 --- a/filcnaplo/lib/models/settings.dart +++ b/filcnaplo/lib/models/settings.dart @@ -64,6 +64,7 @@ class SettingsProvider extends ChangeNotifier { Color _customHighlightColor; List _premiumScopes; String _premiumAccessToken; + String _lastAccountId; SettingsProvider({ DatabaseProvider? database, @@ -97,6 +98,7 @@ class SettingsProvider extends ChangeNotifier { required Color customHighlightColor, required List premiumScopes, required String premiumAccessToken, + required String lastAccountId, }) : _database = database, _language = language, _startPage = startPage, @@ -127,7 +129,8 @@ class SettingsProvider extends ChangeNotifier { _customBackgroundColor = customBackgroundColor, _customHighlightColor = customHighlightColor, _premiumScopes = premiumScopes, - _premiumAccessToken = premiumAccessToken; + _premiumAccessToken = premiumAccessToken, + _lastAccountId = lastAccountId; factory SettingsProvider.fromMap(Map map, {required DatabaseProvider database}) { Map? configMap; @@ -176,6 +179,7 @@ class SettingsProvider extends ChangeNotifier { customHighlightColor: Color(map["custom_highlight_color"]), premiumScopes: jsonDecode(map["premium_scopes"]).cast(), premiumAccessToken: map["premium_token"], + lastAccountId: map["last_account_id"], ); } @@ -214,6 +218,7 @@ class SettingsProvider extends ChangeNotifier { "custom_highlight_color": _customHighlightColor.value, "premium_scopes": jsonEncode(_premiumScopes), "premium_token": _premiumAccessToken, + "last_account_id": _lastAccountId, }; } @@ -256,6 +261,7 @@ class SettingsProvider extends ChangeNotifier { customHighlightColor: const Color(0xff222222), premiumScopes: [], premiumAccessToken: "", + lastAccountId: "", ); } @@ -290,6 +296,7 @@ class SettingsProvider extends ChangeNotifier { Color? get customHighlightColor => _customHighlightColor; List get premiumScopes => _premiumScopes; String get premiumAccessToken => _premiumAccessToken; + String get lastAccountId => _lastAccountId; Future update({ bool store = true, @@ -323,6 +330,7 @@ class SettingsProvider extends ChangeNotifier { Color? customHighlightColor, List? premiumScopes, String? premiumAccessToken, + String? lastAccountId, }) async { if (language != null && language != _language) _language = language; if (startPage != null && startPage != _startPage) _startPage = startPage; @@ -356,6 +364,7 @@ class SettingsProvider extends ChangeNotifier { if (customHighlightColor != null && customHighlightColor != _customHighlightColor) _customHighlightColor = customHighlightColor; if (premiumScopes != null && premiumScopes != _premiumScopes) _premiumScopes = premiumScopes; if (premiumAccessToken != null && premiumAccessToken != _premiumAccessToken) _premiumAccessToken = premiumAccessToken; + if (lastAccountId != null && lastAccountId != _lastAccountId) _lastAccountId = lastAccountId; if (store) await _database?.store.storeSettings(this); notifyListeners(); diff --git a/filcnaplo_mobile_ui b/filcnaplo_mobile_ui index 5faf290..19d78b7 160000 --- a/filcnaplo_mobile_ui +++ b/filcnaplo_mobile_ui @@ -1 +1 @@ -Subproject commit 5faf290b649604f35dc8741cb90f24030ba5f31c +Subproject commit 19d78b7caa89d96d0508f42859c8a137f6c992f7 diff --git a/filcnaplo_premium b/filcnaplo_premium index 40999bf..156d55d 160000 --- a/filcnaplo_premium +++ b/filcnaplo_premium @@ -1 +1 @@ -Subproject commit 40999bf9987bb42b998ca5c96f02bc7f8ba6239f +Subproject commit 156d55df632ea28bf19c191cde07f56a24c44427