diff --git a/lib/logic/models/json/digital_ocean_server_info.dart b/lib/logic/models/json/digital_ocean_server_info.dart index 811536e4..1cba29d1 100644 --- a/lib/logic/models/json/digital_ocean_server_info.dart +++ b/lib/logic/models/json/digital_ocean_server_info.dart @@ -65,14 +65,56 @@ class DigitalOceanLocation { emoji = '🇮🇳'; break; + case 'syd': + emoji = '🇦🇺'; + break; + case 'nyc': case 'sfo': emoji = '🇺🇸'; break; } - return emoji; } + + String get countryDisplayName { + String displayName = slug; + switch (slug.substring(0, 3)) { + case 'fra': + displayName = 'Germany'; + break; + + case 'ams': + displayName = 'Netherlands'; + break; + + case 'sgp': + displayName = 'Singapore'; + break; + + case 'lon': + displayName = 'United Kingdom'; + break; + + case 'tor': + displayName = 'Canada'; + break; + + case 'blr': + displayName = 'India'; + break; + + case 'syd': + displayName = 'Australia'; + break; + + case 'nyc': + case 'sfo': + displayName = 'United States'; + break; + } + return displayName; + } } @JsonSerializable() diff --git a/lib/logic/models/json/hetzner_server_info.dart b/lib/logic/models/json/hetzner_server_info.dart index 122d0288..7bdb1161 100644 --- a/lib/logic/models/json/hetzner_server_info.dart +++ b/lib/logic/models/json/hetzner_server_info.dart @@ -155,6 +155,24 @@ class HetznerLocation { } return emoji; } + + String get countryDisplayName { + String displayName = country; + switch (country.substring(0, 2)) { + case 'DE': + displayName = 'Germany'; + break; + + case 'FI': + displayName = 'Finland'; + break; + + case 'US': + displayName = 'United States'; + break; + } + return displayName; + } } /// A Volume is a highly-available, scalable, and SSD-based block storage for Servers. diff --git a/lib/logic/models/server_provider_location.dart b/lib/logic/models/server_provider_location.dart index 688eb972..498567d4 100644 --- a/lib/logic/models/server_provider_location.dart +++ b/lib/logic/models/server_provider_location.dart @@ -2,12 +2,14 @@ class ServerProviderLocation { ServerProviderLocation({ required this.title, required this.identifier, + required this.country, this.description, this.flag = '', }); final String title; final String identifier; + final String country; final String? description; final String flag; } diff --git a/lib/logic/providers/server_providers/digital_ocean.dart b/lib/logic/providers/server_providers/digital_ocean.dart index c69dfa8c..b83587d1 100644 --- a/lib/logic/providers/server_providers/digital_ocean.dart +++ b/lib/logic/providers/server_providers/digital_ocean.dart @@ -438,6 +438,7 @@ class DigitalOceanServerProvider extends ServerProvider { description: rawLocation.name, flag: rawLocation.flag, identifier: rawLocation.slug, + country: rawLocation.countryDisplayName, ); } catch (e) { continue; diff --git a/lib/logic/providers/server_providers/hetzner.dart b/lib/logic/providers/server_providers/hetzner.dart index d6e4f1ba..1a199328 100644 --- a/lib/logic/providers/server_providers/hetzner.dart +++ b/lib/logic/providers/server_providers/hetzner.dart @@ -156,6 +156,7 @@ class HetznerServerProvider extends ServerProvider { description: server.location.description, flag: server.location.flag, identifier: server.location.name, + country: server.location.countryDisplayName, ), ), ); @@ -456,6 +457,7 @@ class HetznerServerProvider extends ServerProvider { description: rawLocation.description, flag: rawLocation.flag, identifier: rawLocation.name, + country: rawLocation.countryDisplayName, ); } catch (e) { continue; diff --git a/lib/ui/pages/setup/initializing/server_type_picker.dart b/lib/ui/pages/setup/initializing/server_type_picker.dart index 6fb09f4b..2db0cdf5 100644 --- a/lib/ui/pages/setup/initializing/server_type_picker.dart +++ b/lib/ui/pages/setup/initializing/server_type_picker.dart @@ -120,6 +120,14 @@ class SelectLocationPage extends StatelessWidget { .titleMedium, ), const SizedBox(height: 8), + Text( + location.country, + style: Theme.of(context) + .textTheme + .bodyMedium, + ), + if (location.description != null) + const SizedBox(height: 4), if (location.description != null) Text( location.description!,