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

Better handling of HttpClientRequest

This commit is contained in:
Oliver Walters 2021-04-20 09:41:50 +10:00
parent fa58cca333
commit f5e1f25dd0
4 changed files with 107 additions and 14 deletions

View File

@ -5,6 +5,7 @@
--- ---
- Fixes certificate issues connecting to HTTPs server - Fixes certificate issues connecting to HTTPs server
- Fixes some app crash bugs
- Bug fixes for various API calls - Bug fixes for various API calls
- UI cleanup - UI cleanup

View File

@ -209,9 +209,6 @@ class InvenTreeAPI {
return false; return false;
} }
print("Response from server: ${response}");
// We expect certain response from the server // We expect certain response from the server
if (!response.containsKey("server") || !response.containsKey("version") || !response.containsKey("instance")) { if (!response.containsKey("server") || !response.containsKey("version") || !response.containsKey("instance")) {
@ -395,7 +392,37 @@ class InvenTreeAPI {
var client = createClient(true); var client = createClient(true);
HttpClientRequest request = await client.patchUrl(Uri.parse(_url)); // Open a connection to the server
HttpClientRequest request = await client.patchUrl(Uri.parse(_url))
.timeout(Duration(seconds: 10))
.catchError((error) {
print("PATCH request return error");
print("URL: ${_url}");
print("Error: ${error.toString()}");
var ctx = OneContext().context;
if (error is SocketException) {
showServerError(
I18N.of(ctx).connectionRefused,
error.toString(),
);
} else if (error is TimeoutException) {
showTimeoutError(ctx);
} else {
showServerError(
I18N.of(ctx).serverError,
error.toString()
);
}
return null;
});
// Request could not be made
if (request = null) {
return null;
}
var data = json.encode(body); var data = json.encode(body);
@ -485,7 +512,36 @@ class InvenTreeAPI {
var client = createClient(true); var client = createClient(true);
HttpClientRequest request = await client.postUrl(Uri.parse(_url)); // Open a connection to the server
HttpClientRequest request = await client.postUrl(Uri.parse(_url))
.timeout(Duration(seconds: 10))
.catchError((error) {
print("POST request returned error");
print("URL: ${_url}");
print("Error: ${error.toString()}");
var ctx = OneContext().context;
if (error is SocketException) {
showServerError(
I18N.of(ctx).connectionRefused,
error.toString()
);
} else if (error is TimeoutException) {
showTimeoutError(ctx);
} else {
showServerError(
I18N.of(ctx).serverError,
error.toString()
);
}
return null;
});
if (request == null) {
return null;
}
var data = json.encode(body); var data = json.encode(body);
@ -607,18 +663,11 @@ class InvenTreeAPI {
_url = _url.substring(0, _url.length - 1); _url = _url.substring(0, _url.length - 1);
} }
print("GET: " + _url);
var client = createClient(true); var client = createClient(true);
HttpClientRequest request = await client.getUrl(Uri.parse(_url)); // Open a connection
HttpClientRequest request = await client.getUrl(Uri.parse(_url))
// Set headers .timeout(Duration(seconds: 10))
request.headers.set(HttpHeaders.contentTypeHeader, 'application/json');
request.headers.set(HttpHeaders.authorizationHeader, _authorizationHeader());
HttpClientResponse response = await request.close()
.timeout(Duration(seconds: 30))
.catchError((error) { .catchError((error) {
print("GET request returned error"); print("GET request returned error");
print("URL: ${_url}"); print("URL: ${_url}");
@ -643,6 +692,44 @@ class InvenTreeAPI {
return null; return null;
}); });
if (request == null) {
return null;
}
// Set connection headers
request.headers.set(HttpHeaders.contentTypeHeader, 'application/json');
request.headers.set(HttpHeaders.authorizationHeader, _authorizationHeader());
print("Attempting connection");
HttpClientResponse response = await request.close()
.timeout(Duration(seconds: 10))
.catchError((error) {
print("GET request returned error");
print("URL: ${_url}");
print("Error: ${error.toString()}");
var ctx = OneContext().context;
if (error is SocketException) {
showServerError(
I18N.of(ctx).connectionRefused,
error.toString()
);
} else if (error is TimeoutException) {
showTimeoutError(ctx);
} else {
showServerError(
I18N.of(ctx).serverError,
error.toString()
);
}
return null;
});
print("got here");
// A null response means something has gone wrong... // A null response means something has gone wrong...
if (response == null) { if (response == null) {
print("null response from GET ${_url}"); print("null response from GET ${_url}");

View File

@ -177,19 +177,24 @@ Future<void> showStatusCodeError(int status, {int expected = 200}) async {
Future<void> showTimeoutError(BuildContext context) async { Future<void> showTimeoutError(BuildContext context) async {
await showServerError(I18N.of(context).timeout, I18N.of(context).noResponse); // Use OneContext as "sometimes" context is null here?
var ctx = OneContext().context;
await showServerError(I18N.of(ctx).timeout, I18N.of(ctx).noResponse);
} }
void showFormDialog(String title, {String acceptText, String cancelText, GlobalKey<FormState> key, List<Widget> fields, List<Widget> actions, Function callback}) { void showFormDialog(String title, {String acceptText, String cancelText, GlobalKey<FormState> key, List<Widget> fields, List<Widget> actions, Function callback}) {
BuildContext dialogContext; BuildContext dialogContext;
var ctx = OneContext().context;
if (acceptText == null) { if (acceptText == null) {
acceptText = I18N.of(OneContext().context).save; acceptText = I18N.of(ctx).save;
} }
if (cancelText == null) { if (cancelText == null) {
cancelText = I18N.of(OneContext().context).cancel; cancelText = I18N.of(ctx).cancel;
} }
// Undefined actions = OK + Cancel // Undefined actions = OK + Cancel

View File

@ -7,7 +7,7 @@ description: InvenTree stock management
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at # Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 0.1.3+7 version: 0.1.4+8
environment: environment:
sdk: ">=2.1.0 <3.0.0" sdk: ">=2.1.0 <3.0.0"