From 62ae6a6e3cfe65edc7f2274b88eb1e8edc6566c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Wed, 2 Aug 2023 20:56:02 +0200 Subject: [PATCH] Made google-play login working again, and fixed numerous bugs --- .../autocomplete/autocompleteApi.dart | 2 +- .../files-sharing/fileSharingApi.dart | 2 +- lib/api/marianumcloud/talk/talkApi.dart | 2 +- lib/api/marianumcloud/webdav/webdavApi.dart | 2 +- lib/api/webuntis/webuntisApi.dart | 2 +- lib/model/accountData.dart | 11 ++-- lib/model/{timetable => }/endpointData.dart | 10 +--- lib/view/login/login.dart | 29 ++++----- .../pages/more/countdown/addTimerDialog.dart | 59 ------------------- lib/view/pages/more/countdown/countdown.dart | 56 ------------------ lib/view/pages/more/countdown/timer.dart | 54 ----------------- lib/view/pages/more/holidays/holidays.dart | 2 +- lib/view/pages/more/overhang.dart | 2 - lib/view/pages/talk/chatMessage.dart | 2 +- lib/view/pages/talk/chatTile.dart | 2 +- lib/view/pages/talk/joinChat.dart | 2 +- lib/view/settings/settings.dart | 7 ++- .../countdown => widget}/animatedTime.dart | 1 - lib/widget/loadingSpinner.dart | 2 +- 19 files changed, 38 insertions(+), 211 deletions(-) rename lib/model/{timetable => }/endpointData.dart (86%) delete mode 100644 lib/view/pages/more/countdown/addTimerDialog.dart delete mode 100644 lib/view/pages/more/countdown/countdown.dart delete mode 100644 lib/view/pages/more/countdown/timer.dart rename lib/{view/pages/more/countdown => widget}/animatedTime.dart (97%) diff --git a/lib/api/marianumcloud/autocomplete/autocompleteApi.dart b/lib/api/marianumcloud/autocomplete/autocompleteApi.dart index ce55cde..11481f2 100644 --- a/lib/api/marianumcloud/autocomplete/autocompleteApi.dart +++ b/lib/api/marianumcloud/autocomplete/autocompleteApi.dart @@ -5,7 +5,7 @@ import 'package:http/http.dart' as http; import 'package:http/http.dart'; import '../../../model/accountData.dart'; -import '../../../model/timetable/endpointData.dart'; +import '../../../model/endpointData.dart'; import 'autocompleteResponse.dart'; class AutocompleteApi { diff --git a/lib/api/marianumcloud/files-sharing/fileSharingApi.dart b/lib/api/marianumcloud/files-sharing/fileSharingApi.dart index 49dca74..1a5f7b7 100644 --- a/lib/api/marianumcloud/files-sharing/fileSharingApi.dart +++ b/lib/api/marianumcloud/files-sharing/fileSharingApi.dart @@ -4,7 +4,7 @@ import 'package:http/http.dart' as http; import 'package:http/http.dart'; import '../../../model/accountData.dart'; -import '../../../model/timetable/endpointData.dart'; +import '../../../model/endpointData.dart'; import 'fileSharingApiParams.dart'; class FileSharingApi { diff --git a/lib/api/marianumcloud/talk/talkApi.dart b/lib/api/marianumcloud/talk/talkApi.dart index 752b53b..0f3b254 100644 --- a/lib/api/marianumcloud/talk/talkApi.dart +++ b/lib/api/marianumcloud/talk/talkApi.dart @@ -3,7 +3,7 @@ import 'dart:developer'; import 'package:http/http.dart' as http; import '../../../model/accountData.dart'; -import '../../../model/timetable/endpointData.dart'; +import '../../../model/endpointData.dart'; import '../../apiError.dart'; import '../../apiParams.dart'; import '../../apiRequest.dart'; diff --git a/lib/api/marianumcloud/webdav/webdavApi.dart b/lib/api/marianumcloud/webdav/webdavApi.dart index 014f3e1..d094b96 100644 --- a/lib/api/marianumcloud/webdav/webdavApi.dart +++ b/lib/api/marianumcloud/webdav/webdavApi.dart @@ -1,7 +1,7 @@ import 'package:nextcloud/nextcloud.dart'; import '../../../model/accountData.dart'; -import '../../../model/timetable/endpointData.dart'; +import '../../../model/endpointData.dart'; import '../../apiRequest.dart'; import '../../apiResponse.dart'; diff --git a/lib/api/webuntis/webuntisApi.dart b/lib/api/webuntis/webuntisApi.dart index 7890f05..45db72f 100644 --- a/lib/api/webuntis/webuntisApi.dart +++ b/lib/api/webuntis/webuntisApi.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:http/http.dart' as http; -import '../../model/timetable/endpointData.dart'; +import '../../model/endpointData.dart'; import '../apiParams.dart'; import '../apiRequest.dart'; import '../apiResponse.dart'; diff --git a/lib/model/accountData.dart b/lib/model/accountData.dart index c488ab0..9d6cf87 100644 --- a/lib/model/accountData.dart +++ b/lib/model/accountData.dart @@ -35,7 +35,7 @@ class AccountData { return _password!; } - Future setData(BuildContext context, String username, String password) async { + Future setData(String username, String password) async { SharedPreferences storage = await _storage; storage.setString(_usernameField, username); @@ -43,9 +43,10 @@ class AccountData { await _updateFromStorage(); } - Future removeData(BuildContext context) async { + Future removeData({BuildContext? context}) async { _populated = Completer(); - Provider.of(context, listen: false).setState(AccountModelState.loggedOut); + + if(context != null) Provider.of(context, listen: false).setState(AccountModelState.loggedOut); SharedPreferences storage = await _storage; await storage.remove(_usernameField); @@ -54,12 +55,12 @@ class AccountData { Future _updateFromStorage() async { SharedPreferences storage = await _storage; - await storage.reload(); + //await storage.reload(); // This line was the cause of the first rejected google play upload :( if(storage.containsKey(_usernameField) && storage.containsKey(_passwordField)) { _username = storage.getString(_usernameField); _password = storage.getString(_passwordField); } - _populated.complete(); + if(!_populated.isCompleted) _populated.complete(); } Future waitForPopulation() async { diff --git a/lib/model/timetable/endpointData.dart b/lib/model/endpointData.dart similarity index 86% rename from lib/model/timetable/endpointData.dart rename to lib/model/endpointData.dart index 3e3111b..8e57eee 100644 --- a/lib/model/timetable/endpointData.dart +++ b/lib/model/endpointData.dart @@ -1,5 +1,5 @@ -import '../accountData.dart'; +import 'accountData.dart'; enum EndpointMode { live, @@ -31,8 +31,6 @@ class Endpoint { class EndpointData { static final EndpointData _instance = EndpointData._construct(); - String? usernameOverride; - factory EndpointData() { return _instance; } @@ -41,11 +39,7 @@ class EndpointData { EndpointMode getEndpointMode() { late String existingName; - if(usernameOverride != null) { - existingName = usernameOverride!; - } else { - existingName = AccountData().getUsername(); - } + existingName = AccountData().getUsername(); return existingName.startsWith("google") ? EndpointMode.stage : EndpointMode.live; } diff --git a/lib/view/login/login.dart b/lib/view/login/login.dart index 715f6b1..158f8ce 100644 --- a/lib/view/login/login.dart +++ b/lib/view/login/login.dart @@ -1,11 +1,12 @@ +import 'dart:developer'; + import 'package:flutter/material.dart'; import 'package:flutter_login/flutter_login.dart'; -import 'package:marianum_mobile/model/timetable/endpointData.dart'; +import 'package:marianum_mobile/api/marianumcloud/talk/room/getRoom.dart'; +import 'package:marianum_mobile/api/marianumcloud/talk/room/getRoomParams.dart'; import 'package:provider/provider.dart'; -import '../../api/webuntis/queries/authenticate/authenticateParams.dart'; -import '../../api/webuntis/queries/authenticate/authenticate.dart'; import '../../model/accountData.dart'; import '../../model/accountModel.dart'; @@ -24,26 +25,26 @@ class _LoginState extends State { } Future _login(LoginData data) async { - await AccountData().removeData(context); + await AccountData().removeData(); try { - EndpointData().usernameOverride = data.name; - await Authenticate( - AuthenticateParams( - user: data.name, - password: data.password, - ) + await AccountData().setData(data.name, data.password); + await GetRoom( + GetRoomParams( + includeStatus: false, + ), ).run().then((value) async { - EndpointData().usernameOverride = null; - await AccountData().setData(context, data.name, data.password); - + await AccountData().setData(data.name, data.password); setState(() { displayDisclaimerText = false; }); }); } catch(e) { - return e.toString(); + await AccountData().removeData(); + log(e.toString()); + return "Benutzername oder Password falsch! (${e.toString()})"; } + await Future.delayed(const Duration(seconds: 1)); return null; } diff --git a/lib/view/pages/more/countdown/addTimerDialog.dart b/lib/view/pages/more/countdown/addTimerDialog.dart deleted file mode 100644 index 15a4dc3..0000000 --- a/lib/view/pages/more/countdown/addTimerDialog.dart +++ /dev/null @@ -1,59 +0,0 @@ - -import 'package:flutter/material.dart'; - -class AddTimerDialog extends StatefulWidget { - const AddTimerDialog({Key? key}) : super(key: key); - - @override - State createState() => _AddTimerDialogState(); -} - -class _AddTimerDialogState extends State { - DateTime selected = DateTime.now().add(const Duration(days: 1)); - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: const Text("Timer hinzufügen"), - content: Column( - mainAxisSize: MainAxisSize.min, - children: [ - const TextField( - decoration: InputDecoration( - labelText: "Timer Name" - ), - ), - - TextButton(onPressed: () async { - DateTime? selectedDate = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.now(), lastDate: DateTime.now().add(const Duration(days: 365 * 10))); - if(selectedDate == null) return; - - setState(() { - selected = selectedDate; - }); - - }, child: const Text("Datum auswählen")), - - TextButton(onPressed: () async { - TimeOfDay? selectedTime = await showTimePicker(context: context, initialTime: TimeOfDay.fromDateTime(DateTime.now())); - if(selectedTime == null) return; - - setState(() { - selected = selected.copyWith(hour: selectedTime.hour, minute: selectedTime.minute); - }); - }, child: const Text("Zeit auswählen")), - - Text(selected.toString()) - ], - ), - actions: [ - TextButton(onPressed: () { - Navigator.of(context).pop(); - }, child: const Text("Abbrechen")), - TextButton(onPressed: () { - // TODO add timer - }, child: const Text("Hinzufügen")), - ], - ); - } -} diff --git a/lib/view/pages/more/countdown/countdown.dart b/lib/view/pages/more/countdown/countdown.dart deleted file mode 100644 index 2351949..0000000 --- a/lib/view/pages/more/countdown/countdown.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'addTimerDialog.dart'; -import 'timer.dart'; - -class Countdown extends StatefulWidget { - const Countdown({Key? key}) : super(key: key); - - @override - State createState() => _CountdownState(); -} - -class _CountdownState extends State { - List timers = List.empty(growable: true); - - @override - void initState() { - super.initState(); - timers.add(Timer(key: const Key("1"), target: DateTime.now().add(const Duration(seconds: 20)), label: "Countdown 1")); - timers.add(Timer(key: const Key("2"), author: "goldbaja", target: DateTime.now().add(const Duration(days: 20)), label: "Sommerferien")); - timers.add(Timer(key: const Key("3"), target: DateTime.now().add(const Duration(hours: 20)), label: "Joa")); - - timers.sort((a, b) => a.target.compareTo(b.target)); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("Countdown"), - actions: [ - IconButton(onPressed: () { - showDialog(context: context, builder: (context) => const AddTimerDialog()); - }, icon: const Icon(Icons.add)), - ], - ), - body: ReorderableListView( - shrinkWrap: true, - footer: Container( - padding: const EdgeInsets.only(top: 30), - child: Center( - child: Text("Halte und Ziehe ein Element um es umzusortieren.", style: TextStyle(color: Theme.of(context).disabledColor)), - ), - ), - onReorder: (int oldIndex, int newIndex) { }, - children: timers, - - ), - // body: ListView.separated( - // itemBuilder: (context, index) => timers[index], - // separatorBuilder: (context, index) => const Divider(), - // itemCount: timers.length - // ) - ); - } -} diff --git a/lib/view/pages/more/countdown/timer.dart b/lib/view/pages/more/countdown/timer.dart deleted file mode 100644 index a01f514..0000000 --- a/lib/view/pages/more/countdown/timer.dart +++ /dev/null @@ -1,54 +0,0 @@ - -import 'package:flutter/material.dart'; - -import 'animatedTime.dart'; - -class Timer extends StatefulWidget { - final DateTime target; - final String? author; - final String label; - const Timer({Key? key, required this.target, this.author, required this.label}) : super(key: key); - - @override - State createState() => _TimerState(); -} - -class _TimerState extends State { - late bool isLocal; - - @override - void initState() { - super.initState(); - isLocal = widget.author == null; - } - - @override - Widget build(BuildContext context) { - return ListTile( - leading: const Icon(Icons.timer), - title: AnimatedTime( - callback: () { - if(widget.target.isBefore(DateTime.now())) return Duration.zero; - return widget.target.difference(DateTime.now()); - }, - ), - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if(!isLocal) Row( - children: [ - const Text("5"), - IconButton(onPressed: () { - - }, icon: const Icon(Icons.thumb_up_outlined)), - ], - ), - IconButton(onPressed: () { - - }, icon: const Icon(Icons.star_outline)) - ], - ), - subtitle: Text("${widget.label}${!isLocal ? "\ngeteilt von ${widget.author}" : ""}"), - ); - } -} diff --git a/lib/view/pages/more/holidays/holidays.dart b/lib/view/pages/more/holidays/holidays.dart index 7caee6a..21fcf98 100644 --- a/lib/view/pages/more/holidays/holidays.dart +++ b/lib/view/pages/more/holidays/holidays.dart @@ -11,7 +11,7 @@ import '../../../../widget/confirmDialog.dart'; import '../../../../widget/debug/debugTile.dart'; import '../../../../widget/loadingSpinner.dart'; import '../../../../widget/placeholderView.dart'; -import '../countdown/animatedTime.dart'; +import '../../../../widget/animatedTime.dart'; class Holidays extends StatefulWidget { const Holidays({super.key}); diff --git a/lib/view/pages/more/overhang.dart b/lib/view/pages/more/overhang.dart index 50fc26d..5f9be9d 100644 --- a/lib/view/pages/more/overhang.dart +++ b/lib/view/pages/more/overhang.dart @@ -5,7 +5,6 @@ import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart'; import '../../../widget/ListItem.dart'; import '../../settings/settings.dart'; -import 'countdown/countdown.dart'; import 'gradeAverages/gradeAverage.dart'; import 'holidays/holidays.dart'; import 'message/message.dart'; @@ -29,7 +28,6 @@ class Overhang extends StatelessWidget { ListItemNavigator(icon: Icons.room, text: "Raumplan", target: Roomplan()), ListItemNavigator(icon: Icons.calculate, text: "Notendurschnittsrechner", target: GradeAverage()), ListItemNavigator(icon: Icons.calendar_month, text: "Schulferien", target: Holidays()), - if(!kReleaseMode) ListItemNavigator(icon: Icons.timer, text: "Countdown", target: Countdown()), ], ), ); diff --git a/lib/view/pages/talk/chatMessage.dart b/lib/view/pages/talk/chatMessage.dart index cc7b9cd..894c5be 100644 --- a/lib/view/pages/talk/chatMessage.dart +++ b/lib/view/pages/talk/chatMessage.dart @@ -2,7 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:marianum_mobile/model/timetable/endpointData.dart'; +import 'package:marianum_mobile/model/endpointData.dart'; import 'package:url_launcher/url_launcher_string.dart'; import '../../../api/marianumcloud/talk/chat/getChatResponse.dart'; diff --git a/lib/view/pages/talk/chatTile.dart b/lib/view/pages/talk/chatTile.dart index 9b09413..8646fca 100644 --- a/lib/view/pages/talk/chatTile.dart +++ b/lib/view/pages/talk/chatTile.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; -import 'package:marianum_mobile/model/timetable/endpointData.dart'; +import 'package:marianum_mobile/model/endpointData.dart'; import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/lib/view/pages/talk/joinChat.dart b/lib/view/pages/talk/joinChat.dart index 91e2071..f2bc239 100644 --- a/lib/view/pages/talk/joinChat.dart +++ b/lib/view/pages/talk/joinChat.dart @@ -1,7 +1,7 @@ import 'package:async/async.dart'; import 'package:flutter/material.dart'; -import 'package:marianum_mobile/model/timetable/endpointData.dart'; +import 'package:marianum_mobile/model/endpointData.dart'; import '../../../api/marianumcloud/autocomplete/autocompleteApi.dart'; import '../../../api/marianumcloud/autocomplete/autocompleteResponse.dart'; diff --git a/lib/view/settings/settings.dart b/lib/view/settings/settings.dart index e6afa57..ae924aa 100644 --- a/lib/view/settings/settings.dart +++ b/lib/view/settings/settings.dart @@ -53,8 +53,11 @@ class _SettingsState extends State { onConfirm: () { SharedPreferences.getInstance().then((value) => { value.clear(), - }).then((value) { - AccountData().removeData(context); + }).then((value) async { + PaintingBinding.instance.imageCache.clear(); + Provider.of(context, listen: false).reset(); + const CacheView().clear(); + AccountData().removeData(context: context); Navigator.popUntil(context, (route) => !Navigator.canPop(context)); }); }, diff --git a/lib/view/pages/more/countdown/animatedTime.dart b/lib/widget/animatedTime.dart similarity index 97% rename from lib/view/pages/more/countdown/animatedTime.dart rename to lib/widget/animatedTime.dart index 362702a..ee604b5 100644 --- a/lib/view/pages/more/countdown/animatedTime.dart +++ b/lib/widget/animatedTime.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:animated_digit/animated_digit.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class AnimatedTime extends StatefulWidget { diff --git a/lib/widget/loadingSpinner.dart b/lib/widget/loadingSpinner.dart index 8c27ff8..6ab2502 100644 --- a/lib/widget/loadingSpinner.dart +++ b/lib/widget/loadingSpinner.dart @@ -16,7 +16,7 @@ class _LoadingSpinnerState extends State { @override void initState() { - timer = Timer(const Duration(seconds: 10), () { + timer = Timer(const Duration(seconds: 15), () { setState(() { textVisible = true; });