diff --git a/i18n/en.json b/i18n/en.json index 8bc6ccd974..39b22eab2c 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -701,7 +701,6 @@ "comments_and_likes": "Comments & likes", "comments_are_disabled": "Comments are disabled", "common_create_new_album": "Create new album", - "common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.", "completed": "Completed", "confirm": "Confirm", "confirm_admin_password": "Confirm Admin Password", @@ -1552,6 +1551,7 @@ "profile_drawer_github": "GitHub", "profile_drawer_readonly_mode": "Read-only mode enabled. Long-press the user avatar icon to exit.", "profile_drawer_server_out_of_date": "A server update is available.", + "profile_drawer_unable_to_check_version": "Unable to check app or server version", "profile_image_of_user": "Profile image of {user}", "profile_picture_set": "Profile picture set.", "public_album": "Public album", diff --git a/mobile/lib/models/server_info/server_info.model.dart b/mobile/lib/models/server_info/server_info.model.dart index 6201c74424..b79c14403f 100644 --- a/mobile/lib/models/server_info/server_info.model.dart +++ b/mobile/lib/models/server_info/server_info.model.dart @@ -13,6 +13,7 @@ class ServerInfo { final bool isServerOutOfDate; final bool isNewReleaseAvailable; final String versionMismatchErrorMessage; + final bool errorGettingVersions; const ServerInfo({ required this.serverVersion, @@ -24,6 +25,7 @@ class ServerInfo { required this.isServerOutOfDate, required this.isNewReleaseAvailable, required this.versionMismatchErrorMessage, + required this.errorGettingVersions, }); ServerInfo copyWith({ @@ -36,6 +38,7 @@ class ServerInfo { bool? isServerOutOfDate, bool? isNewReleaseAvailable, String? versionMismatchErrorMessage, + bool? errorGettingVersions, }) { return ServerInfo( serverVersion: serverVersion ?? this.serverVersion, @@ -47,12 +50,13 @@ class ServerInfo { isServerOutOfDate: isServerOutOfDate ?? this.isServerOutOfDate, isNewReleaseAvailable: isNewReleaseAvailable ?? this.isNewReleaseAvailable, versionMismatchErrorMessage: versionMismatchErrorMessage ?? this.versionMismatchErrorMessage, + errorGettingVersions: errorGettingVersions ?? this.errorGettingVersions, ); } @override String toString() { - return 'ServerInfo(serverVersion: $serverVersion, latestVersion: $latestVersion, serverFeatures: $serverFeatures, serverConfig: $serverConfig, serverDiskInfo: $serverDiskInfo, isClientOutOfDate: $isClientOutOfDate, isServerOutOfDate: $isServerOutOfDate, isNewReleaseAvailable: $isNewReleaseAvailable, versionMismatchErrorMessage: $versionMismatchErrorMessage)'; + return 'ServerInfo(serverVersion: $serverVersion, latestVersion: $latestVersion, serverFeatures: $serverFeatures, serverConfig: $serverConfig, serverDiskInfo: $serverDiskInfo, isClientOutOfDate: $isClientOutOfDate, isServerOutOfDate: $isServerOutOfDate, isNewReleaseAvailable: $isNewReleaseAvailable, versionMismatchErrorMessage: $versionMismatchErrorMessage, errorGettingVersions: $errorGettingVersions)'; } @override @@ -68,7 +72,8 @@ class ServerInfo { other.isClientOutOfDate == isClientOutOfDate && other.isServerOutOfDate == isServerOutOfDate && other.isNewReleaseAvailable == isNewReleaseAvailable && - other.versionMismatchErrorMessage == versionMismatchErrorMessage; + other.versionMismatchErrorMessage == versionMismatchErrorMessage && + other.errorGettingVersions == errorGettingVersions; } @override @@ -81,6 +86,7 @@ class ServerInfo { isClientOutOfDate.hashCode ^ isServerOutOfDate.hashCode ^ isNewReleaseAvailable.hashCode ^ - versionMismatchErrorMessage.hashCode; + versionMismatchErrorMessage.hashCode ^ + errorGettingVersions.hashCode; } } diff --git a/mobile/lib/providers/server_info.provider.dart b/mobile/lib/providers/server_info.provider.dart index 9a359f9e0d..88d250ae10 100644 --- a/mobile/lib/providers/server_info.provider.dart +++ b/mobile/lib/providers/server_info.provider.dart @@ -28,6 +28,7 @@ class ServerInfoNotifier extends StateNotifier { isServerOutOfDate: false, isNewReleaseAvailable: false, versionMismatchErrorMessage: "", + errorGettingVersions: false, ), ); @@ -46,14 +47,20 @@ class ServerInfoNotifier extends StateNotifier { // using isClientOutOfDate since that will show to users reguardless of if they are an admin if (serverVersion == null) { - state = state.copyWith(isClientOutOfDate: true, versionMismatchErrorMessage: "common_server_error".tr()); + state = state.copyWith( + errorGettingVersions: true, + versionMismatchErrorMessage: "profile_drawer_unable_to_check_version".tr(), + ); return; } await _checkServerVersionMismatch(serverVersion); } catch (e, stackTrace) { _log.severe("Failed to get server version", e, stackTrace); - state = state.copyWith(isClientOutOfDate: true); + state = state.copyWith( + errorGettingVersions: true, + versionMismatchErrorMessage: "profile_drawer_unable_to_check_version".tr(), + ); return; } } diff --git a/mobile/lib/widgets/common/app_bar_dialog/app_bar_server_info.dart b/mobile/lib/widgets/common/app_bar_dialog/app_bar_server_info.dart index a80c33f3d3..b784ddfc68 100644 --- a/mobile/lib/widgets/common/app_bar_dialog/app_bar_server_info.dart +++ b/mobile/lib/widgets/common/app_bar_dialog/app_bar_server_info.dart @@ -29,7 +29,9 @@ class AppBarServerInfo extends HookConsumerWidget { const contentFontSize = 11.0; final showWarning = - serverInfoState.isClientOutOfDate || ((user?.isAdmin ?? false) && serverInfoState.isServerOutOfDate); + serverInfoState.isClientOutOfDate || + serverInfoState.errorGettingVersions || + ((user?.isAdmin ?? false) && serverInfoState.isServerOutOfDate); getPackageInfo() async { PackageInfo packageInfo = await PackageInfo.fromPlatform(); @@ -81,10 +83,14 @@ class AppBarServerInfo extends HookConsumerWidget { ? MainAxisAlignment.spaceBetween : MainAxisAlignment.center, children: [ - Text( - serverInfoState.versionMismatchErrorMessage, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w500), + Expanded( + child: Text( + serverInfoState.versionMismatchErrorMessage, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w500), + maxLines: 3, + overflow: TextOverflow.ellipsis, + ), ), if (serverInfoState.isClientOutOfDate) TextButton(