From 28c98de9a790a0cf7d201d9917cb587d183e748b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Mon, 19 Jun 2023 14:13:56 +0200 Subject: [PATCH] Persisted file order options --- lib/api/marianumcloud/talk/talkApi.dart | 8 ++++++-- lib/storage/base/settingsProvider.dart | 3 +++ lib/storage/file/fileSettings.dart | 7 ++++++- lib/storage/file/fileSettings.g.dart | 10 ++++++++++ lib/view/pages/files/files.dart | 6 ++++++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/lib/api/marianumcloud/talk/talkApi.dart b/lib/api/marianumcloud/talk/talkApi.dart index 8f7bb50..3a8b3b3 100644 --- a/lib/api/marianumcloud/talk/talkApi.dart +++ b/lib/api/marianumcloud/talk/talkApi.dart @@ -38,8 +38,12 @@ abstract class TalkApi extends ApiRequest { headers?.putIfAbsent("Accept", () => "application/json"); headers?.putIfAbsent("OCS-APIRequest", () => "true"); - http.Response? data = await request(endpoint, body, headers); - if(data == null) { + http.Response? data; + + try { + data = await request(endpoint, body, headers); + if(data == null) throw Exception(); + } catch(e) { throw ApiError("Request could not be dispatched!"); } //dynamic jsonData = jsonDecode(data.body); diff --git a/lib/storage/base/settingsProvider.dart b/lib/storage/base/settingsProvider.dart index 2247198..0793e25 100644 --- a/lib/storage/base/settingsProvider.dart +++ b/lib/storage/base/settingsProvider.dart @@ -3,6 +3,7 @@ import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import '../../view/pages/files/files.dart'; import '../file/fileSettings.dart'; import '../gradeAverages/gradeAveragesSettings.dart'; import '../holidays/holidaysSettings.dart'; @@ -92,6 +93,8 @@ class SettingsProvider extends ChangeNotifier { ), fileSettings: FileSettings( sortFoldersToTop: true, + ascending: true, + sortBy: SortOption.name ), holidaysSettings: HolidaysSettings( dismissedDisclaimer: false, diff --git a/lib/storage/file/fileSettings.dart b/lib/storage/file/fileSettings.dart index a4c6b57..054f9c0 100644 --- a/lib/storage/file/fileSettings.dart +++ b/lib/storage/file/fileSettings.dart @@ -1,12 +1,17 @@ import 'package:json_annotation/json_annotation.dart'; +import '../../view/pages/files/files.dart'; + part 'fileSettings.g.dart'; @JsonSerializable() class FileSettings { bool sortFoldersToTop; - FileSettings({required this.sortFoldersToTop}); + bool ascending; + SortOption sortBy; + + FileSettings({required this.sortFoldersToTop, required this.ascending, required this.sortBy}); factory FileSettings.fromJson(Map json) => _$FileSettingsFromJson(json); Map toJson() => _$FileSettingsToJson(this); diff --git a/lib/storage/file/fileSettings.g.dart b/lib/storage/file/fileSettings.g.dart index 25c5df6..adc8c6e 100644 --- a/lib/storage/file/fileSettings.g.dart +++ b/lib/storage/file/fileSettings.g.dart @@ -8,9 +8,19 @@ part of 'fileSettings.dart'; FileSettings _$FileSettingsFromJson(Map json) => FileSettings( sortFoldersToTop: json['sortFoldersToTop'] as bool, + ascending: json['ascending'] as bool, + sortBy: $enumDecode(_$SortOptionEnumMap, json['sortBy']), ); Map _$FileSettingsToJson(FileSettings instance) => { 'sortFoldersToTop': instance.sortFoldersToTop, + 'ascending': instance.ascending, + 'sortBy': _$SortOptionEnumMap[instance.sortBy]!, }; + +const _$SortOptionEnumMap = { + SortOption.name: 'name', + SortOption.date: 'date', + SortOption.size: 'size', +}; diff --git a/lib/view/pages/files/files.dart b/lib/view/pages/files/files.dart index 48e8691..67005e4 100644 --- a/lib/view/pages/files/files.dart +++ b/lib/view/pages/files/files.dart @@ -73,12 +73,16 @@ class _FilesState extends State { FilesProps props = FilesProps(); ListFilesResponse? data; + late SettingsProvider settings = Provider.of(context, listen: false); + SortOption currentSort = SortOption.name; bool currentSortDirection = true; @override void initState() { super.initState(); + currentSort = settings.val().fileSettings.sortBy; + currentSortDirection = settings.val().fileSettings.ascending; _query(); } @@ -131,6 +135,7 @@ class _FilesState extends State { onSelected: (e) { setState(() { currentSortDirection = e; + settings.val(write: true).fileSettings.ascending = e; }); }, ), @@ -152,6 +157,7 @@ class _FilesState extends State { onSelected: (e) { setState(() { currentSort = e; + settings.val(write: true).fileSettings.sortBy = e; }); }, ),