set user to last selected one

This commit is contained in:
55nknown 2022-11-21 12:41:22 +01:00
parent d3e5fc99ea
commit 7de3d211bb
8 changed files with 29 additions and 10 deletions

View File

@ -1,3 +1,4 @@
import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo/models/user.dart'; import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo_kreta_api/models/student.dart'; import 'package:filcnaplo_kreta_api/models/student.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -18,8 +19,13 @@ class UserProvider with ChangeNotifier {
String? get nickname => user?.nickname; String? get nickname => user?.nickname;
String? get displayName => user?.displayName; String? get displayName => user?.displayName;
final SettingsProvider _settings;
UserProvider({required SettingsProvider settings}) : _settings = settings;
void setUser(String userId) { void setUser(String userId) {
_selectedUserId = userId; _selectedUserId = userId;
_settings.update(lastAccountId: userId);
notifyListeners(); notifyListeners();
} }

View File

@ -52,9 +52,7 @@ class App extends StatelessWidget {
final UserProvider user; final UserProvider user;
final DatabaseProvider database; final DatabaseProvider database;
App({Key? key, required this.database, required this.settings, required this.user}) : super(key: key) { const 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);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -16,7 +16,7 @@ const settingsDB = DatabaseStruct("settings", {
"vibration_strength": int, "ab_weeks": int, "swap_ab_weeks": int, "vibration_strength": int, "ab_weeks": int, "swap_ab_weeks": int,
"notifications": int, "notifications_bitfield": int, "notification_poll_interval": int, // notifications "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, "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", { const usersDB = DatabaseStruct("users", {
"id": String, "name": String, "username": String, "password": String, "institute_code": String, "student": String, "role": int, "id": String, "name": String, "username": String, "password": String, "institute_code": String, "student": String, "role": int,

View File

@ -29,12 +29,18 @@ class DatabaseQuery {
return settings; return settings;
} }
Future<UserProvider> getUsers() async { Future<UserProvider> getUsers(SettingsProvider settings) async {
var userProvider = UserProvider(); var userProvider = UserProvider(settings: settings);
List<Map> usersMap = await db.query("users"); List<Map> usersMap = await db.query("users");
for (var user in usersMap) { for (var user in usersMap) {
userProvider.addUser(User.fromMap(user)); 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; return userProvider;
} }
} }

View File

@ -37,7 +37,7 @@ class Startup {
await db.close(); await db.close();
await database.init(); await database.init();
settings = await database.query.getSettings(database); settings = await database.query.getSettings(database);
user = await database.query.getUsers(); user = await database.query.getUsers(settings);
} }
} }

View File

@ -64,6 +64,7 @@ class SettingsProvider extends ChangeNotifier {
Color _customHighlightColor; Color _customHighlightColor;
List<String> _premiumScopes; List<String> _premiumScopes;
String _premiumAccessToken; String _premiumAccessToken;
String _lastAccountId;
SettingsProvider({ SettingsProvider({
DatabaseProvider? database, DatabaseProvider? database,
@ -97,6 +98,7 @@ class SettingsProvider extends ChangeNotifier {
required Color customHighlightColor, required Color customHighlightColor,
required List<String> premiumScopes, required List<String> premiumScopes,
required String premiumAccessToken, required String premiumAccessToken,
required String lastAccountId,
}) : _database = database, }) : _database = database,
_language = language, _language = language,
_startPage = startPage, _startPage = startPage,
@ -127,7 +129,8 @@ class SettingsProvider extends ChangeNotifier {
_customBackgroundColor = customBackgroundColor, _customBackgroundColor = customBackgroundColor,
_customHighlightColor = customHighlightColor, _customHighlightColor = customHighlightColor,
_premiumScopes = premiumScopes, _premiumScopes = premiumScopes,
_premiumAccessToken = premiumAccessToken; _premiumAccessToken = premiumAccessToken,
_lastAccountId = lastAccountId;
factory SettingsProvider.fromMap(Map map, {required DatabaseProvider database}) { factory SettingsProvider.fromMap(Map map, {required DatabaseProvider database}) {
Map<String, Object?>? configMap; Map<String, Object?>? configMap;
@ -176,6 +179,7 @@ class SettingsProvider extends ChangeNotifier {
customHighlightColor: Color(map["custom_highlight_color"]), customHighlightColor: Color(map["custom_highlight_color"]),
premiumScopes: jsonDecode(map["premium_scopes"]).cast<String>(), premiumScopes: jsonDecode(map["premium_scopes"]).cast<String>(),
premiumAccessToken: map["premium_token"], premiumAccessToken: map["premium_token"],
lastAccountId: map["last_account_id"],
); );
} }
@ -214,6 +218,7 @@ class SettingsProvider extends ChangeNotifier {
"custom_highlight_color": _customHighlightColor.value, "custom_highlight_color": _customHighlightColor.value,
"premium_scopes": jsonEncode(_premiumScopes), "premium_scopes": jsonEncode(_premiumScopes),
"premium_token": _premiumAccessToken, "premium_token": _premiumAccessToken,
"last_account_id": _lastAccountId,
}; };
} }
@ -256,6 +261,7 @@ class SettingsProvider extends ChangeNotifier {
customHighlightColor: const Color(0xff222222), customHighlightColor: const Color(0xff222222),
premiumScopes: [], premiumScopes: [],
premiumAccessToken: "", premiumAccessToken: "",
lastAccountId: "",
); );
} }
@ -290,6 +296,7 @@ class SettingsProvider extends ChangeNotifier {
Color? get customHighlightColor => _customHighlightColor; Color? get customHighlightColor => _customHighlightColor;
List<String> get premiumScopes => _premiumScopes; List<String> get premiumScopes => _premiumScopes;
String get premiumAccessToken => _premiumAccessToken; String get premiumAccessToken => _premiumAccessToken;
String get lastAccountId => _lastAccountId;
Future<void> update({ Future<void> update({
bool store = true, bool store = true,
@ -323,6 +330,7 @@ class SettingsProvider extends ChangeNotifier {
Color? customHighlightColor, Color? customHighlightColor,
List<String>? premiumScopes, List<String>? premiumScopes,
String? premiumAccessToken, String? premiumAccessToken,
String? lastAccountId,
}) async { }) async {
if (language != null && language != _language) _language = language; if (language != null && language != _language) _language = language;
if (startPage != null && startPage != _startPage) _startPage = startPage; if (startPage != null && startPage != _startPage) _startPage = startPage;
@ -356,6 +364,7 @@ class SettingsProvider extends ChangeNotifier {
if (customHighlightColor != null && customHighlightColor != _customHighlightColor) _customHighlightColor = customHighlightColor; if (customHighlightColor != null && customHighlightColor != _customHighlightColor) _customHighlightColor = customHighlightColor;
if (premiumScopes != null && premiumScopes != _premiumScopes) _premiumScopes = premiumScopes; if (premiumScopes != null && premiumScopes != _premiumScopes) _premiumScopes = premiumScopes;
if (premiumAccessToken != null && premiumAccessToken != _premiumAccessToken) _premiumAccessToken = premiumAccessToken; if (premiumAccessToken != null && premiumAccessToken != _premiumAccessToken) _premiumAccessToken = premiumAccessToken;
if (lastAccountId != null && lastAccountId != _lastAccountId) _lastAccountId = lastAccountId;
if (store) await _database?.store.storeSettings(this); if (store) await _database?.store.storeSettings(this);
notifyListeners(); notifyListeners();

@ -1 +1 @@
Subproject commit 5faf290b649604f35dc8741cb90f24030ba5f31c Subproject commit 19d78b7caa89d96d0508f42859c8a137f6c992f7

@ -1 +1 @@
Subproject commit 40999bf9987bb42b998ca5c96f02bc7f8ba6239f Subproject commit 156d55df632ea28bf19c191cde07f56a24c44427