Skip to content

Commit

Permalink
PR: Added connectivity check workaround
Browse files Browse the repository at this point in the history
  • Loading branch information
ddshd committed Jul 16, 2023
1 parent f7a194a commit f53e0c5
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 6 deletions.
2 changes: 2 additions & 0 deletions mobile/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import 'package:immich_mobile/shared/providers/db.provider.dart';
import 'package:immich_mobile/shared/providers/release_info.provider.dart';
import 'package:immich_mobile/shared/providers/server_info.provider.dart';
import 'package:immich_mobile/shared/providers/websocket.provider.dart';
import 'package:immich_mobile/shared/services/connectivity.service.dart';
import 'package:immich_mobile/shared/services/immich_logger.service.dart';
import 'package:immich_mobile/shared/views/immich_loading_overlay.dart';
import 'package:immich_mobile/shared/views/version_announcement_overlay.dart';
Expand All @@ -49,6 +50,7 @@ void main() async {
final db = await loadDb();
await initApp();
await migrateDatabaseIfNeeded(db);
ConnectivityService().init();
runApp(getMainWidget(db));
}

Expand Down
3 changes: 2 additions & 1 deletion mobile/lib/modules/backup/views/backup_controller_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import 'package:immich_mobile/shared/models/asset.dart';
import 'package:immich_mobile/shared/providers/asset.provider.dart';
import 'package:immich_mobile/shared/providers/websocket.provider.dart';
import 'package:immich_mobile/modules/backup/ui/backup_info_card.dart';
import 'package:immich_mobile/shared/services/connectivity.service.dart';
import 'package:immich_mobile/shared/ui/confirm_dialog.dart';
import 'package:immich_mobile/shared/ui/immich_toast.dart';
import 'package:permission_handler/permission_handler.dart';
Expand Down Expand Up @@ -103,7 +104,7 @@ class BackupControllerPage extends HookConsumerWidget {
);
return;
}
final connection = await Connectivity().checkConnectivity();
final connection = ConnectivityService().result;
if (connection != ConnectivityResult.wifi) {
ImmichToast.show(
context: context,
Expand Down
19 changes: 14 additions & 5 deletions mobile/lib/shared/services/api.service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:immich_mobile/shared/models/store.dart';
import 'package:immich_mobile/shared/services/connectivity.service.dart';
import 'package:immich_mobile/utils/url_helper.dart';
import 'package:openapi/api.dart';
import 'package:http/http.dart';
Expand Down Expand Up @@ -64,7 +66,9 @@ class ApiService {
Future<String> _resolveEndpoint(String serverUrl) async {
final url = sanitizeUrl(serverUrl);

await _isEndpointAvailable(serverUrl);
if (!await _isEndpointAvailable(serverUrl)) {
throw Exception("Server is not reachable");
}

// Check for /.well-known/immich
final wellKnownEndpoint = await _getWellKnownEndpoint(url);
Expand All @@ -74,7 +78,12 @@ class ApiService {
return url;
}

Future<void> _isEndpointAvailable(String serverUrl) async {
Future<bool> _isEndpointAvailable(String serverUrl) async {
final connectivityResult = ConnectivityService().result;
if (connectivityResult == ConnectivityResult.none) {
return false;
}

final Client client = Client();

if (!serverUrl.endsWith('/api')) {
Expand All @@ -89,12 +98,12 @@ class ApiService {
Uri.parse(serverUrl),
)
.timeout(const Duration(seconds: 5));
return;
} on TimeoutException catch (_) {
rethrow;
return false;
} on SocketException catch (_) {
rethrow;
return false;
}
return true;
}

Future<String> _getWellKnownEndpoint(String baseUrl) async {
Expand Down
27 changes: 27 additions & 0 deletions mobile/lib/shared/services/connectivity.service.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'dart:async';

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:logging/logging.dart';

class ConnectivityService {
factory ConnectivityService() {
return _instance;
}

final _log = Logger("ConnectivityService");

ConnectivityService._internal();
static final ConnectivityService _instance = ConnectivityService._internal();
late StreamSubscription<dynamic> subscription;
ConnectivityResult result = ConnectivityResult.none;

void init() {
// Get new connectivity status when it changes
subscription = Connectivity()
.onConnectivityChanged
.listen((ConnectivityResult result) {
_log.fine("Connectivity changed to $result");
this.result = result;
});
}
}

0 comments on commit f53e0c5

Please sign in to comment.