mirror of
https://github.com/inventree/inventree-app.git
synced 2026-03-11 04:34:29 +00:00
Check server state (#782)
This commit is contained in:
14
lib/api.dart
14
lib/api.dart
@@ -410,7 +410,7 @@ class InvenTreeAPI {
|
||||
* 5. Request information on available plugins
|
||||
*/
|
||||
Future<bool> _connectToServer() async {
|
||||
if (!await _checkServer()) {
|
||||
if (!await checkServer()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -450,8 +450,8 @@ class InvenTreeAPI {
|
||||
* Check that the remote server is available.
|
||||
* Ping the api/ endpoint, which does not require user authentication
|
||||
*/
|
||||
Future<bool> _checkServer() async {
|
||||
String address = profile?.server ?? "";
|
||||
Future<bool> checkServer({String? server}) async {
|
||||
String address = server ?? profile?.server ?? "";
|
||||
|
||||
if (address.isEmpty) {
|
||||
showSnackIcon(
|
||||
@@ -462,8 +462,10 @@ class InvenTreeAPI {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!address.endsWith("/")) {
|
||||
address = address + "/";
|
||||
String url = _makeUrl("/api/", base: address);
|
||||
|
||||
if (!url.endsWith("/")) {
|
||||
url = url + "/";
|
||||
}
|
||||
|
||||
// Cache the "strictHttps" setting, so we can use it later without async requirement
|
||||
@@ -473,7 +475,7 @@ class InvenTreeAPI {
|
||||
|
||||
debug("Connecting to ${apiUrl}");
|
||||
|
||||
APIResponse response = await get("", expectedStatusCode: 200);
|
||||
APIResponse response = await get(url, expectedStatusCode: 200);
|
||||
|
||||
if (!response.successful()) {
|
||||
debug("Server returned invalid response: ${response.statusCode}");
|
||||
|
||||
@@ -294,6 +294,9 @@
|
||||
"confirmScanDetail": "Confirm stock transfer details when scanning barcodes",
|
||||
"@confirmScanDetail": {},
|
||||
|
||||
"connectionCheck": "Check Connection",
|
||||
"@connectionCheck": {},
|
||||
|
||||
"connectionRefused": "Connection Refused",
|
||||
"@connectionRefused": {},
|
||||
|
||||
|
||||
@@ -298,6 +298,9 @@ class _ProfileEditState extends State<ProfileEditWidget> {
|
||||
String name = "";
|
||||
String server = "";
|
||||
|
||||
bool? serverStatus;
|
||||
bool serverChecking = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@@ -411,6 +414,49 @@ class _ProfileEditState extends State<ProfileEditWidget> {
|
||||
return null;
|
||||
},
|
||||
),
|
||||
Divider(),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: ElevatedButton.icon(
|
||||
label: Text(L10().connectionCheck),
|
||||
icon: serverStatus == true
|
||||
? Icon(TablerIcons.circle_check, color: COLOR_SUCCESS)
|
||||
: serverStatus == false
|
||||
? Icon(TablerIcons.circle_x, color: COLOR_DANGER)
|
||||
: Icon(TablerIcons.question_mark, color: COLOR_WARNING),
|
||||
onPressed: serverChecking
|
||||
? null
|
||||
: () async {
|
||||
if (serverChecking) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!formKey.currentState!.validate()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
serverStatus = null;
|
||||
serverChecking = true;
|
||||
});
|
||||
}
|
||||
|
||||
formKey.currentState!.save();
|
||||
|
||||
InvenTreeAPI().checkServer(server: server).then((
|
||||
result,
|
||||
) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
serverStatus = result;
|
||||
serverChecking = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
padding: EdgeInsets.all(16),
|
||||
|
||||
Reference in New Issue
Block a user