import 'dart:io'; import 'package:flutter/material.dart'; import 'package:nc_photos/app_localizations.dart'; import 'package:nc_photos/exception.dart'; import 'package:nc_photos/navigation_manager.dart'; import 'package:nc_photos/widget/trusted_cert_manager.dart'; /// Convert an exception to a user-facing string /// /// Typically used with SnackBar to show a proper error message String toUserString(Object? exception) { if (exception is ApiException) { if (exception.response.statusCode == 401) { return L10n.global().errorUnauthenticated; } else if (exception.response.statusCode == 404) { return "HTTP 404 not found"; } else if (exception.response.statusCode == 423) { return L10n.global().errorLocked; } else if (exception.response.statusCode == 500) { return L10n.global().errorServerError; } } else if (exception is SocketException) { return L10n.global().errorDisconnected; } else if (exception is InvalidBaseUrlException) { return L10n.global().errorInvalidBaseUrl; } else if (exception is AlbumDowngradeException) { return L10n.global().errorAlbumDowngrade; } return exception?.toString() ?? "Unknown error"; } (String text, SnackBarAction? action) exceptionToSnackBarData( Object? exception) { if (exception is ApiException) { if (exception.response.statusCode == 401) { return (L10n.global().errorUnauthenticated, null); } else if (exception.response.statusCode == 404) { return ("HTTP 404 not found", null); } else if (exception.response.statusCode == 423) { return (L10n.global().errorLocked, null); } else if (exception.response.statusCode == 500) { return (L10n.global().errorServerError, null); } } else if (exception is SocketException) { return (L10n.global().errorDisconnected, null); } else if (exception is InvalidBaseUrlException) { return (L10n.global().errorInvalidBaseUrl, null); } else if (exception is AlbumDowngradeException) { return (L10n.global().errorAlbumDowngrade, null); } else if (exception is HandshakeException) { return ( L10n.global().serverCertErrorDialogTitle, SnackBarAction( label: L10n.global().configButtonLabel, onPressed: () => NavigationManager() .getNavigator() ?.pushNamed(TrustedCertManager.routeName), ), ); } return (exception?.toString() ?? "Unknown error", null); }