load default project from server
This commit is contained in:
parent
045bc6f668
commit
2b505ceaf4
|
@ -44,4 +44,12 @@ class UserAPIService extends APIService implements UserService {
|
|||
Future<User> getCurrentUser() {
|
||||
return client.get('/user').then((map) => User.fromJson(map?.body));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<UserSettings?> setCurrentUserSettings(UserSettings userSettings) async {
|
||||
return client.post('/user/settings/general', body: userSettings.toJson()).then((response) {
|
||||
if(response == null) return null;
|
||||
return userSettings;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,92 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:vikunja_app/global.dart';
|
||||
|
||||
class UserSettings {
|
||||
final int default_project_id;
|
||||
final bool discoverable_by_email, discoverable_by_name, email_reminders_enabled;
|
||||
final Map<String, dynamic>? frontend_settings;
|
||||
final String language;
|
||||
final String name;
|
||||
final bool overdue_tasks_reminders_enabled;
|
||||
final String overdue_tasks_reminders_time;
|
||||
final String timezone;
|
||||
final int week_start;
|
||||
|
||||
UserSettings({
|
||||
this.default_project_id = 0,
|
||||
this.discoverable_by_email = false,
|
||||
this.discoverable_by_name = false,
|
||||
this.email_reminders_enabled = false,
|
||||
this.frontend_settings = null,
|
||||
this.language = '',
|
||||
this.name = '',
|
||||
this.overdue_tasks_reminders_enabled = false,
|
||||
this.overdue_tasks_reminders_time = '',
|
||||
this.timezone = '',
|
||||
this.week_start = 0,
|
||||
});
|
||||
|
||||
UserSettings.fromJson(Map<String, dynamic> json)
|
||||
: default_project_id = json['default_project_id'],
|
||||
discoverable_by_email = json['discoverable_by_email'],
|
||||
discoverable_by_name = json['discoverable_by_name'],
|
||||
email_reminders_enabled = json['email_reminders_enabled'],
|
||||
frontend_settings = json['frontend_settings'],
|
||||
language = json['language'],
|
||||
name = json['name'],
|
||||
overdue_tasks_reminders_enabled = json['overdue_tasks_reminders_enabled'],
|
||||
overdue_tasks_reminders_time = json['overdue_tasks_reminders_time'],
|
||||
timezone = json['timezone'],
|
||||
week_start = json['week_start'];
|
||||
|
||||
toJson() => {
|
||||
'default_project_id': default_project_id,
|
||||
'discoverable_by_email': discoverable_by_email,
|
||||
'discoverable_by_name': discoverable_by_name,
|
||||
'email_reminders_enabled': email_reminders_enabled,
|
||||
'frontend_settings': frontend_settings,
|
||||
'language': language,
|
||||
'name': name,
|
||||
'overdue_tasks_reminders_enabled': overdue_tasks_reminders_enabled,
|
||||
'overdue_tasks_reminders_time': overdue_tasks_reminders_time,
|
||||
'timezone': timezone,
|
||||
'week_start': week_start,
|
||||
};
|
||||
|
||||
UserSettings copyWith({
|
||||
int? default_project_id,
|
||||
bool? discoverable_by_email,
|
||||
bool? discoverable_by_name,
|
||||
bool? email_reminders_enabled,
|
||||
Map<String, dynamic>? frontend_settings,
|
||||
String? language,
|
||||
String? name,
|
||||
bool? overdue_tasks_reminders_enabled,
|
||||
String? overdue_tasks_reminders_time,
|
||||
String? timezone,
|
||||
int? week_start,
|
||||
}) {
|
||||
return UserSettings(
|
||||
default_project_id: default_project_id ?? this.default_project_id,
|
||||
discoverable_by_email: discoverable_by_email ?? this.discoverable_by_email,
|
||||
discoverable_by_name: discoverable_by_name ?? this.discoverable_by_name,
|
||||
email_reminders_enabled: email_reminders_enabled ?? this.email_reminders_enabled,
|
||||
frontend_settings: frontend_settings ?? this.frontend_settings,
|
||||
language: language ?? this.language,
|
||||
name: name ?? this.name,
|
||||
overdue_tasks_reminders_enabled: overdue_tasks_reminders_enabled ?? this.overdue_tasks_reminders_enabled,
|
||||
overdue_tasks_reminders_time: overdue_tasks_reminders_time ?? this.overdue_tasks_reminders_time,
|
||||
timezone: timezone ?? this.timezone,
|
||||
week_start: week_start ?? this.week_start,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class User {
|
||||
final int id;
|
||||
final String name, username;
|
||||
final DateTime created, updated;
|
||||
UserSettings? settings;
|
||||
|
||||
User({
|
||||
this.id = 0,
|
||||
|
@ -12,6 +94,7 @@ class User {
|
|||
required this.username,
|
||||
DateTime? created,
|
||||
DateTime? updated,
|
||||
this.settings,
|
||||
}) : this.created = created ?? DateTime.now(),
|
||||
this.updated = updated ?? DateTime.now();
|
||||
|
||||
|
@ -20,7 +103,11 @@ class User {
|
|||
name = json.containsKey('name') ? json['name'] : '',
|
||||
username = json['username'],
|
||||
created = DateTime.parse(json['created']),
|
||||
updated = DateTime.parse(json['updated']);
|
||||
updated = DateTime.parse(json['updated']) {
|
||||
if(json.containsKey('settings')){
|
||||
this.settings = UserSettings.fromJson(json['settings']);
|
||||
};
|
||||
}
|
||||
|
||||
toJSON() => {
|
||||
'id': id,
|
||||
|
@ -28,6 +115,7 @@ class User {
|
|||
'username': username,
|
||||
'created': created.toUtc().toIso8601String(),
|
||||
'updated': updated.toUtc().toIso8601String(),
|
||||
'user_settings': settings?.toJson(),
|
||||
};
|
||||
|
||||
String avatarUrl(BuildContext context) {
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:vikunja_app/models/list.dart';
|
|||
|
||||
import '../main.dart';
|
||||
import '../models/project.dart';
|
||||
import '../models/user.dart';
|
||||
import '../service/services.dart';
|
||||
|
||||
|
||||
|
@ -23,6 +24,7 @@ class SettingsPageState extends State<SettingsPage> {
|
|||
late TextEditingController durationTextController;
|
||||
bool initialized = false;
|
||||
FlutterThemeMode? themeMode;
|
||||
User? currentUser;
|
||||
|
||||
|
||||
void init() {
|
||||
|
@ -33,9 +35,9 @@ class SettingsPageState extends State<SettingsPage> {
|
|||
.getAll()
|
||||
.then((value) => setState(() => projectList = value));
|
||||
|
||||
VikunjaGlobal.of(context).projectService.getDefaultList().then((value) =>
|
||||
setState(
|
||||
() => defaultProject = value == null ? null : int.tryParse(value)));
|
||||
//VikunjaGlobal.of(context).projectService.getDefaultList().then((value) =>
|
||||
// setState(
|
||||
// () => defaultProject = value == null ? null : int.tryParse(value)));
|
||||
|
||||
VikunjaGlobal.of(context).settingsManager.getIgnoreCertificates().then(
|
||||
(value) =>
|
||||
|
@ -57,12 +59,20 @@ class SettingsPageState extends State<SettingsPage> {
|
|||
|
||||
VikunjaGlobal.of(context).settingsManager.getThemeMode().then((value) => setState(() => themeMode = value));
|
||||
|
||||
VikunjaGlobal.of(context).newUserService?.getCurrentUser().then((value) => {
|
||||
setState(() {
|
||||
currentUser = value!;
|
||||
defaultProject = value.settings?.default_project_id;
|
||||
} ),
|
||||
});
|
||||
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final currentUser = VikunjaGlobal.of(context).currentUser;
|
||||
final global = VikunjaGlobal.of(context);
|
||||
|
||||
if (!initialized) init();
|
||||
return new Scaffold(
|
||||
|
@ -71,12 +81,12 @@ class SettingsPageState extends State<SettingsPage> {
|
|||
body: ListView(
|
||||
children: [
|
||||
UserAccountsDrawerHeader(
|
||||
accountName: currentUser != null ? Text(currentUser.username) : null,
|
||||
accountEmail: currentUser != null ? Text(currentUser.name) : null,
|
||||
accountName: currentUser != null ? Text(currentUser!.username) : null,
|
||||
accountEmail: currentUser != null ? Text(currentUser!.name) : null,
|
||||
currentAccountPicture: currentUser == null
|
||||
? null
|
||||
: CircleAvatar(
|
||||
backgroundImage: NetworkImage(currentUser.avatarUrl(context)),
|
||||
backgroundImage: (currentUser?.username != "") ? NetworkImage(currentUser!.avatarUrl(context)) : null,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
|
@ -103,9 +113,9 @@ class SettingsPageState extends State<SettingsPage> {
|
|||
value: defaultProject,
|
||||
onChanged: (int? value) {
|
||||
setState(() => defaultProject = value);
|
||||
VikunjaGlobal.of(context)
|
||||
.listService
|
||||
.setDefaultList(value);
|
||||
global.newUserService?.setCurrentUserSettings(
|
||||
currentUser!.settings!.copyWith(default_project_id: value)).then((value) => currentUser!.settings = value);
|
||||
//VikunjaGlobal.of(context).userManager.setDefaultList(value);
|
||||
},
|
||||
),
|
||||
)
|
||||
|
|
|
@ -212,5 +212,11 @@ class MockedUserService implements UserService {
|
|||
return Future.value(_users[1]);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<UserSettings> setCurrentUserSettings(UserSettings userSettings) {
|
||||
// TODO: implement setCurrentUserSettings
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -191,7 +191,7 @@ abstract class ListService {
|
|||
|
||||
Future<String?> getDefaultList();
|
||||
|
||||
void setDefaultList(int? listId);
|
||||
//void setDefaultList(int? listId);
|
||||
}
|
||||
|
||||
abstract class TaskService {
|
||||
|
@ -235,6 +235,7 @@ abstract class UserService {
|
|||
Future<UserTokenPair?> register(String username, email, password);
|
||||
|
||||
Future<User?> getCurrentUser();
|
||||
Future<UserSettings?> setCurrentUserSettings(UserSettings userSettings);
|
||||
}
|
||||
|
||||
abstract class LabelService {
|
||||
|
|
Loading…
Reference in New Issue