2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 13:36:50 +00:00

API improvements

- Simple function connect() which loads saves settings from preferences file
This commit is contained in:
Oliver Walters 2020-04-04 13:43:29 +11:00
parent 6d3db243c3
commit 055cc37e68
4 changed files with 39 additions and 18 deletions

View File

@ -4,6 +4,7 @@ import 'dart:io';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
/** /**
@ -50,18 +51,32 @@ class InvenTreeAPI {
_token = ""; _token = "";
} }
Future<bool> connect(String address, String username, String password) async { Future<bool> 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<bool> connectToServer(String address, String username, String password) async {
/* Address is the base address for the InvenTree server, /* Address is the base address for the InvenTree server,
* e.g. http://127.0.0.1:8000 * e.g. http://127.0.0.1:8000
*/ */
String errorMessage = "";
address = address.trim(); address = address.trim();
username = username.trim(); username = username.trim();
if (address.isEmpty || username.isEmpty || password.isEmpty) { if (address.isEmpty || username.isEmpty || password.isEmpty) {
print("Server error: Empty details supplied"); errorMessage = "Server Error: Empty details supplied";
return false; print(errorMessage);
throw errorMessage;
} }
// Ensure we are pointing to the correct endpoint // Ensure we are pointing to the correct endpoint
@ -90,10 +105,16 @@ class InvenTreeAPI {
// TODO - Add connection timeout // TODO - Add connection timeout
var response = await get("").catchError((error) { var response = await get("").timeout(Duration(seconds: 10)).catchError((error) {
print("Error connecting to server:");
print(error); if (error is SocketException) {
return false; errorMessage = "Could not connect to server.";
print(errorMessage);
throw errorMessage;
} else {
// Unknown error type, re-throw error
throw error;
}
}); });
if (response.statusCode != 200) { if (response.statusCode != 200) {
@ -107,16 +128,18 @@ class InvenTreeAPI {
// We expect certain response from the server // We expect certain response from the server
if (!data.containsKey("server") || !data.containsKey("version")) { if (!data.containsKey("server") || !data.containsKey("version")) {
print("Incorrect keys in server response"); errorMessage = "Server resonse contained incorrect data";
return false; print(errorMessage);
throw errorMessage;
} }
print("Server: " + data["server"]); print("Server: " + data["server"]);
print("Version: " + data["version"]); print("Version: " + data["version"]);
// Request token from the server // Request token from the server if we do not already have one
if (_token.isNotEmpty) { if (_token.isNotEmpty) {
print("Discarding old token - $_token"); print("Already have token - $_token");
return true;
} }
// Clear out the token // Clear out the token

View File

@ -58,6 +58,8 @@ class _InvenTreeLoginSettingsState extends State<InvenTreeLoginSettingsWidget> {
final Size screenSize = MediaQuery.of(context).size; final Size screenSize = MediaQuery.of(context).size;
load();
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("Login Settings"), title: Text("Login Settings"),
@ -136,7 +138,6 @@ class _InvenTreeLoginSettingsState extends State<InvenTreeLoginSettingsWidget> {
await InvenTreeUserPreferences().saveLoginDetails(_addr, _user, _pass); await InvenTreeUserPreferences().saveLoginDetails(_addr, _user, _pass);
print("Saved");
} }
} }
} }

View File

@ -24,15 +24,11 @@ class InvenTreeUserPreferences {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
print("Done!");
var server = prefs.getString(_SERVER) ?? ''; var server = prefs.getString(_SERVER) ?? '';
var username = prefs.getString(_USERNAME) ?? ''; var username = prefs.getString(_USERNAME) ?? '';
var password = prefs.getString(_PASSWORD) ?? ''; var password = prefs.getString(_PASSWORD) ?? '';
print("Connecting to server"); await InvenTreeAPI().connectToServer(server, username, password);
await InvenTreeAPI().connect(server, username, password);
} }
void saveLoginDetails(String server, String username, String password) async { void saveLoginDetails(String server, String username, String password) async {
@ -44,6 +40,6 @@ class InvenTreeUserPreferences {
await prefs.setString(_PASSWORD, password); await prefs.setString(_PASSWORD, password);
// Reconnect the API // Reconnect the API
await InvenTreeAPI().connect(server, username, password); await InvenTreeAPI().connectToServer(server, username, password);
} }
} }

View File

@ -88,6 +88,7 @@ class InvenTreeDrawer extends StatelessWidget {
new Divider(), new Divider(),
new ListTile( new ListTile(
title: new Text("Parts"), title: new Text("Parts"),
leading: new Icon(Icons.category),
onTap: _showParts, onTap: _showParts,
), ),
new ListTile( new ListTile(