From 055cc37e68eefbcb094bd38df9650c5c03477fc4 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 4 Apr 2020 13:43:29 +1100 Subject: [PATCH] API improvements - Simple function connect() which loads saves settings from preferences file --- lib/api.dart | 45 +++++++++++++++++++++++++++++++---------- lib/login_settings.dart | 3 ++- lib/preferences.dart | 8 ++------ lib/widget/drawer.dart | 1 + 4 files changed, 39 insertions(+), 18 deletions(-) diff --git a/lib/api.dart b/lib/api.dart index de8e0846..fde000d3 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:path/path.dart' as path; import 'package:http/http.dart' as http; +import 'package:shared_preferences/shared_preferences.dart'; /** @@ -50,18 +51,32 @@ class InvenTreeAPI { _token = ""; } - Future connect(String address, String username, String password) async { + Future connect() async { + + var prefs = await SharedPreferences.getInstance(); + + String server = prefs.getString("server"); + String username = prefs.getString("username"); + String password = prefs.getString("password"); + + return connectToServer(server, username, password); + } + + Future connectToServer(String address, String username, String password) async { /* Address is the base address for the InvenTree server, * e.g. http://127.0.0.1:8000 */ + String errorMessage = ""; + address = address.trim(); username = username.trim(); if (address.isEmpty || username.isEmpty || password.isEmpty) { - print("Server error: Empty details supplied"); - return false; + errorMessage = "Server Error: Empty details supplied"; + print(errorMessage); + throw errorMessage; } // Ensure we are pointing to the correct endpoint @@ -90,10 +105,16 @@ class InvenTreeAPI { // TODO - Add connection timeout - var response = await get("").catchError((error) { - print("Error connecting to server:"); - print(error); - return false; + var response = await get("").timeout(Duration(seconds: 10)).catchError((error) { + + if (error is SocketException) { + errorMessage = "Could not connect to server."; + print(errorMessage); + throw errorMessage; + } else { + // Unknown error type, re-throw error + throw error; + } }); if (response.statusCode != 200) { @@ -107,16 +128,18 @@ class InvenTreeAPI { // We expect certain response from the server if (!data.containsKey("server") || !data.containsKey("version")) { - print("Incorrect keys in server response"); - return false; + errorMessage = "Server resonse contained incorrect data"; + print(errorMessage); + throw errorMessage; } print("Server: " + data["server"]); print("Version: " + data["version"]); - // Request token from the server + // Request token from the server if we do not already have one if (_token.isNotEmpty) { - print("Discarding old token - $_token"); + print("Already have token - $_token"); + return true; } // Clear out the token diff --git a/lib/login_settings.dart b/lib/login_settings.dart index a346796a..f5a3b0b2 100644 --- a/lib/login_settings.dart +++ b/lib/login_settings.dart @@ -58,6 +58,8 @@ class _InvenTreeLoginSettingsState extends State { final Size screenSize = MediaQuery.of(context).size; + load(); + return Scaffold( appBar: AppBar( title: Text("Login Settings"), @@ -136,7 +138,6 @@ class _InvenTreeLoginSettingsState extends State { await InvenTreeUserPreferences().saveLoginDetails(_addr, _user, _pass); - print("Saved"); } } } \ No newline at end of file diff --git a/lib/preferences.dart b/lib/preferences.dart index 784c3ab6..53aa19bc 100644 --- a/lib/preferences.dart +++ b/lib/preferences.dart @@ -24,15 +24,11 @@ class InvenTreeUserPreferences { SharedPreferences prefs = await SharedPreferences.getInstance(); - print("Done!"); - var server = prefs.getString(_SERVER) ?? ''; var username = prefs.getString(_USERNAME) ?? ''; var password = prefs.getString(_PASSWORD) ?? ''; - print("Connecting to server"); - - await InvenTreeAPI().connect(server, username, password); + await InvenTreeAPI().connectToServer(server, username, password); } void saveLoginDetails(String server, String username, String password) async { @@ -44,6 +40,6 @@ class InvenTreeUserPreferences { await prefs.setString(_PASSWORD, password); // Reconnect the API - await InvenTreeAPI().connect(server, username, password); + await InvenTreeAPI().connectToServer(server, username, password); } } \ No newline at end of file diff --git a/lib/widget/drawer.dart b/lib/widget/drawer.dart index 5bd10b15..1c43fb3f 100644 --- a/lib/widget/drawer.dart +++ b/lib/widget/drawer.dart @@ -88,6 +88,7 @@ class InvenTreeDrawer extends StatelessWidget { new Divider(), new ListTile( title: new Text("Parts"), + leading: new Icon(Icons.category), onTap: _showParts, ), new ListTile(