chore: failed to fetch version error message

This commit is contained in:
bwees 2025-10-16 14:34:44 -05:00
parent 9f928af0d7
commit 261f6578d3
No known key found for this signature in database
4 changed files with 30 additions and 11 deletions

View file

@ -701,7 +701,6 @@
"comments_and_likes": "Comments & likes", "comments_and_likes": "Comments & likes",
"comments_are_disabled": "Comments are disabled", "comments_are_disabled": "Comments are disabled",
"common_create_new_album": "Create new album", "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", "completed": "Completed",
"confirm": "Confirm", "confirm": "Confirm",
"confirm_admin_password": "Confirm Admin Password", "confirm_admin_password": "Confirm Admin Password",
@ -1552,6 +1551,7 @@
"profile_drawer_github": "GitHub", "profile_drawer_github": "GitHub",
"profile_drawer_readonly_mode": "Read-only mode enabled. Long-press the user avatar icon to exit.", "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_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_image_of_user": "Profile image of {user}",
"profile_picture_set": "Profile picture set.", "profile_picture_set": "Profile picture set.",
"public_album": "Public album", "public_album": "Public album",

View file

@ -13,6 +13,7 @@ class ServerInfo {
final bool isServerOutOfDate; final bool isServerOutOfDate;
final bool isNewReleaseAvailable; final bool isNewReleaseAvailable;
final String versionMismatchErrorMessage; final String versionMismatchErrorMessage;
final bool errorGettingVersions;
const ServerInfo({ const ServerInfo({
required this.serverVersion, required this.serverVersion,
@ -24,6 +25,7 @@ class ServerInfo {
required this.isServerOutOfDate, required this.isServerOutOfDate,
required this.isNewReleaseAvailable, required this.isNewReleaseAvailable,
required this.versionMismatchErrorMessage, required this.versionMismatchErrorMessage,
required this.errorGettingVersions,
}); });
ServerInfo copyWith({ ServerInfo copyWith({
@ -36,6 +38,7 @@ class ServerInfo {
bool? isServerOutOfDate, bool? isServerOutOfDate,
bool? isNewReleaseAvailable, bool? isNewReleaseAvailable,
String? versionMismatchErrorMessage, String? versionMismatchErrorMessage,
bool? errorGettingVersions,
}) { }) {
return ServerInfo( return ServerInfo(
serverVersion: serverVersion ?? this.serverVersion, serverVersion: serverVersion ?? this.serverVersion,
@ -47,12 +50,13 @@ class ServerInfo {
isServerOutOfDate: isServerOutOfDate ?? this.isServerOutOfDate, isServerOutOfDate: isServerOutOfDate ?? this.isServerOutOfDate,
isNewReleaseAvailable: isNewReleaseAvailable ?? this.isNewReleaseAvailable, isNewReleaseAvailable: isNewReleaseAvailable ?? this.isNewReleaseAvailable,
versionMismatchErrorMessage: versionMismatchErrorMessage ?? this.versionMismatchErrorMessage, versionMismatchErrorMessage: versionMismatchErrorMessage ?? this.versionMismatchErrorMessage,
errorGettingVersions: errorGettingVersions ?? this.errorGettingVersions,
); );
} }
@override @override
String toString() { 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 @override
@ -68,7 +72,8 @@ class ServerInfo {
other.isClientOutOfDate == isClientOutOfDate && other.isClientOutOfDate == isClientOutOfDate &&
other.isServerOutOfDate == isServerOutOfDate && other.isServerOutOfDate == isServerOutOfDate &&
other.isNewReleaseAvailable == isNewReleaseAvailable && other.isNewReleaseAvailable == isNewReleaseAvailable &&
other.versionMismatchErrorMessage == versionMismatchErrorMessage; other.versionMismatchErrorMessage == versionMismatchErrorMessage &&
other.errorGettingVersions == errorGettingVersions;
} }
@override @override
@ -81,6 +86,7 @@ class ServerInfo {
isClientOutOfDate.hashCode ^ isClientOutOfDate.hashCode ^
isServerOutOfDate.hashCode ^ isServerOutOfDate.hashCode ^
isNewReleaseAvailable.hashCode ^ isNewReleaseAvailable.hashCode ^
versionMismatchErrorMessage.hashCode; versionMismatchErrorMessage.hashCode ^
errorGettingVersions.hashCode;
} }
} }

View file

@ -28,6 +28,7 @@ class ServerInfoNotifier extends StateNotifier<ServerInfo> {
isServerOutOfDate: false, isServerOutOfDate: false,
isNewReleaseAvailable: false, isNewReleaseAvailable: false,
versionMismatchErrorMessage: "", versionMismatchErrorMessage: "",
errorGettingVersions: false,
), ),
); );
@ -46,14 +47,20 @@ class ServerInfoNotifier extends StateNotifier<ServerInfo> {
// using isClientOutOfDate since that will show to users reguardless of if they are an admin // using isClientOutOfDate since that will show to users reguardless of if they are an admin
if (serverVersion == null) { 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; return;
} }
await _checkServerVersionMismatch(serverVersion); await _checkServerVersionMismatch(serverVersion);
} catch (e, stackTrace) { } catch (e, stackTrace) {
_log.severe("Failed to get server version", 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; return;
} }
} }

View file

@ -29,7 +29,9 @@ class AppBarServerInfo extends HookConsumerWidget {
const contentFontSize = 11.0; const contentFontSize = 11.0;
final showWarning = final showWarning =
serverInfoState.isClientOutOfDate || ((user?.isAdmin ?? false) && serverInfoState.isServerOutOfDate); serverInfoState.isClientOutOfDate ||
serverInfoState.errorGettingVersions ||
((user?.isAdmin ?? false) && serverInfoState.isServerOutOfDate);
getPackageInfo() async { getPackageInfo() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform(); PackageInfo packageInfo = await PackageInfo.fromPlatform();
@ -81,10 +83,14 @@ class AppBarServerInfo extends HookConsumerWidget {
? MainAxisAlignment.spaceBetween ? MainAxisAlignment.spaceBetween
: MainAxisAlignment.center, : MainAxisAlignment.center,
children: [ children: [
Text( Expanded(
serverInfoState.versionMismatchErrorMessage, child: Text(
textAlign: TextAlign.center, serverInfoState.versionMismatchErrorMessage,
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w500), textAlign: TextAlign.center,
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w500),
maxLines: 3,
overflow: TextOverflow.ellipsis,
),
), ),
if (serverInfoState.isClientOutOfDate) if (serverInfoState.isClientOutOfDate)
TextButton( TextButton(