Merge pull request 'refactor(price): Replace String shortcode with Currency class' (#226) from price into master
continuous-integration/drone/push Build is passing Details

Reviewed-on: #226
Reviewed-by: Inex Code <inex.code@selfprivacy.org>
pull/227/head
NaiJi ✨ 2023-06-23 04:17:05 +03:00
commit b8009cde71
14 changed files with 67 additions and 30 deletions

View File

@ -188,7 +188,6 @@
"extending_volume_price_info": "Qiymətə ƏDV daxildir və Hetzner tərəfindən təqdim edilən qiymət məlumatlarına əsaslanır. Proses zamanı server yenidən işə salınacaq.",
"extending_volume_error": "Yaddaş genişləndirilməsinə başlamaq alınmadı.",
"size": "Ölçüsü",
"euro": "Avro",
"extending_volume_description": "Yaddaş ölçüsünün dəyişdirilməsi, serverin özünü genişləndirmədən serverinizdə daha çox məlumat saxlamağa imkan verəcəkdir. Həcmi yalnız artırmaq olar, onu azaltmaq olmaz.",
"data_migration_title": "Məlumat miqrasiya",
"data_migration_notice": "Məlumatların köçürülməsi zamanı bütün xidmətlər deaktiv ediləcək.",
@ -473,4 +472,4 @@
"timer": {
"sec": "{} san"
}
}
}

View File

@ -345,7 +345,6 @@
"extending_volume_price_info": "Кошт уключае ПДВ і ацэньваецца на аснове дадзеных аб цэнах, прадстаўленых Hetzner. Сервер будзе перагружаны падчас працэсу.",
"extending_volume_error": "Не ўдалося ініцыялізаваць пашырэнне тома.",
"size": "Памер",
"euro": "Еўро",
"data_migration_title": "Міграцыя дадзеных",
"card_title": "Сховішча",
"data_migration_notice": "Падчас міграцыі ўсе службы будуць адключаны.",
@ -473,4 +472,4 @@
"email_login": "Аўтарызацыя па Email",
"no_ssh_notice": "Для гэтага карыстальніка створаны толькі SSH і Email акаўнты. Адзіная аўтарызацыя для ўсіх сэрвісаў яшчэ не рэалізавана."
}
}
}

View File

@ -188,7 +188,6 @@
"extending_volume_description": "Durch die Speichererweiterung können Sie mehr Daten auf Ihrem Server speichern, ohne den Server selbst zu erweitern. Speicher kann nur erweitert werden, Verringerung ist nicht möglich.",
"extending_volume_error": "Speichererweiterung konnte nicht initialisiert werden.",
"size": "Größe",
"euro": "Euro",
"data_migration_title": "Datenmigration",
"data_migration_notice": "Während der Migration werden alle Dienste ausgeschaltet.",
"start_migration_button": "Migration starten",
@ -473,4 +472,4 @@
"timer": {
"sec": "{} Sek"
}
}
}

View File

@ -194,7 +194,6 @@
"extending_volume_price_info": "Price includes VAT and is estimated from pricing data provided by Hetzner. Server will be rebooted after resizing.",
"extending_volume_error": "Couldn't initialize volume extending.",
"size": "Size",
"euro": "Euro",
"data_migration_title": "Data migration",
"data_migration_notice": "During migration all services will be turned off.",
"start_migration_button": "Start migration",
@ -515,4 +514,4 @@
"reset_onboarding_description": "Reset onboarding switch to show onboarding screen again",
"cubit_statuses": "Cubit loading statuses"
}
}
}

View File

@ -178,7 +178,6 @@
"extending_volume_price_info": "Les prix incluent la TVA et sont estimés par les données commerciales fournies par Hetzner.\nLe serveur va redémarrer après redimensionnement.",
"extending_volume_error": "Pas possible d'initialiser l'extension du volume.",
"size": "Taille",
"euro": "Euro",
"data_migration_title": "Migration de données",
"data_migration_notice": "Durant la migration, tous les services ne seront plus accessibles.",
"start_migration_button": "Démarrer la migration",
@ -286,4 +285,4 @@
"title": "Serveur VPN",
"subtitle": "Serveur VPN privé"
}
}
}

View File

@ -188,7 +188,6 @@
"extending_volume_price_info": "Cena zawiera podatek VAT i jest oparta na danych cenowych dostarczonych przez firmę Hetzner. Serwer zostanie zrestartowany w trakcie procesu.",
"extending_volume_error": "Nie można rozpocząć rozszerzenia repozytorium.",
"size": "Rozmiar",
"euro": "Euro",
"data_migration_title": "Migracja danych",
"data_migration_notice": "Na czas migracji danych wszystkie usługi zostaną wyłączone.",
"start_migration_button": "Rozpocznij migrację",
@ -473,4 +472,4 @@
"get_new_key": "Uzyskaj nowy klucz"
}
}
}
}

View File

@ -189,7 +189,6 @@
"extending_volume_price_info": "Цена включает НДС и рассчитана на основе данных о ценах, предоставленных Hetzner. Сервер будет перезагружен во время процесса.",
"extending_volume_error": "Не удалось начать расширение хранилища.",
"size": "Размер",
"euro": "Евро",
"data_migration_title": "Миграция данных",
"data_migration_notice": "На время миграции данных все сервисы будут выключены.",
"start_migration_button": "Начать миграцию",
@ -478,4 +477,4 @@
"length_not_equal": "Длина строки [], должна быть равна {}",
"length_longer": "Длина строки [], должна быть меньше либо равна {}"
}
}
}

View File

@ -254,7 +254,6 @@
"extending_volume_price_info": "Cena je vrátane DPH a vychádza z cenových údajov poskytnutých spoločnosťou Hetzner. Server sa počas procesu reštartuje.",
"extending_volume_error": "Nepodarilo sa spustiť rozšírenie úložiska.",
"size": "Veľkosť",
"euro": "Euro",
"data_migration_title": "Migrácia údajov",
"data_migration_notice": "V čase migrácie údajov sa všetky služby vypnú.",
"start_migration_button": "Spustiť migráciu",
@ -473,4 +472,4 @@
"title": "Server VPN",
"subtitle": "Súkromný server VPN"
}
}
}

View File

@ -189,7 +189,6 @@
"extending_volume_price_info": "ราคารวมภาษีมูลค่าเพิ่มและประมาณการจากข้อมูลราคาที่จัดทำโดย Hetzner เซิร์ฟเวอร์จะรีบูตหลังจากปรับความจุ",
"extending_volume_error": "ไม่สามารถเริ่มต้นการขยายความจุได้",
"size": "ขนาด",
"euro": "ยูโร",
"data_migration_title": "การโยกย้ายข้อมูล",
"data_migration_notice": "ระหว่างการย้ายข้อมูล ทุกเซิร์ฟเวอร์จะถูกปิด",
"start_migration_button": "เริ่มการย้ายข้อมูล",
@ -294,4 +293,4 @@
"title": "เซิฟเวอร์ VPN",
"subtitle": "เซิฟเวอร์ VPN ส่วนตัว"
}
}
}

View File

@ -288,7 +288,6 @@
"extending_volume_price_info": "Ціна включає ПДВ і оцінюється з даних ціноутворення, наданих Hetzner. Сервер буде перезавантажений після зміни розміру.",
"extending_volume_error": "Не вдалося ініціалізувати розширення обсягу.",
"size": "Розмір",
"euro": "Євро",
"data_migration_title": "Перенесення даних",
"start_migration_button": "Почати перенос",
"migration_process": "Перенос…",
@ -473,4 +472,4 @@
"root_name": "Не може бути 'root'",
"length_not_equal": "Довжина [], має бути {}"
}
}
}

View File

@ -4,6 +4,52 @@ class Price {
required this.currency,
});
double value;
String currency;
final double value;
final Currency currency;
}
enum CurrencyType {
eur,
usd,
unkown,
}
class Currency {
Currency({
required this.type,
required this.shortcode,
this.fontcode,
this.symbol,
});
factory Currency.fromType(final CurrencyType type) {
switch (type) {
case CurrencyType.eur:
return Currency(
type: type,
shortcode: 'EUR',
fontcode: 'euro',
symbol: '',
);
case CurrencyType.usd:
return Currency(
type: type,
shortcode: 'USD',
fontcode: 'attach_money',
symbol: '\$',
);
default:
return Currency(
type: type,
shortcode: '?',
fontcode: 'payments',
symbol: '?',
);
}
}
final CurrencyType type;
final String shortcode;
final String? fontcode;
final String? symbol;
}

View File

@ -46,7 +46,7 @@ class DigitalOceanServerProvider extends ServerProvider {
);
ApiAdapter _adapter;
final String currency = 'USD';
final Currency currency = Currency.fromType(CurrencyType.usd);
@override
ServerProviderType get type => ServerProviderType.digitalOcean;
@ -400,7 +400,7 @@ class DigitalOceanServerProvider extends ServerProvider {
ServerMetadataEntity(
type: MetadataType.cost,
trId: 'server.monthly_cost',
value: '${droplet['size']['price_monthly']} $currency',
value: '${droplet['size']['price_monthly']} ${currency.shortcode}',
),
ServerMetadataEntity(
type: MetadataType.location,

View File

@ -46,7 +46,7 @@ class HetznerServerProvider extends ServerProvider {
);
ApiAdapter _adapter;
final String currency = 'EUR';
final Currency currency = Currency.fromType(CurrencyType.eur);
@override
ServerProviderType get type => ServerProviderType.hetzner;
@ -260,7 +260,7 @@ class HetznerServerProvider extends ServerProvider {
type: MetadataType.cost,
trId: 'server.monthly_cost',
value:
'${server.serverType.prices[1].monthly.toStringAsFixed(2)} $currency',
'${server.serverType.prices[1].monthly.toStringAsFixed(2)} ${currency.shortcode}',
),
ServerMetadataEntity(
type: MetadataType.location,

View File

@ -43,7 +43,7 @@ class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
bool _isError = false;
late double _currentSliderGbValue;
double _euroPerGb = 1.0;
double _pricePerGb = 1.0;
final DiskSize maxSize = const DiskSize(byte: 500000000000);
late DiskSize minSize;
@ -75,10 +75,11 @@ class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
],
);
}
_euroPerGb = (snapshot.data as Price).value;
final price = snapshot.data as Price;
_pricePerGb = price.value;
_sizeController.text = _currentSliderGbValue.truncate().toString();
_priceController.text =
(_euroPerGb * double.parse(_sizeController.text))
(_pricePerGb * double.parse(_sizeController.text))
.toStringAsFixed(2);
minSize =
widget.diskVolumeToResize.sizeTotal + DiskSize.fromGibibyte(3);
@ -127,7 +128,7 @@ class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
decoration: InputDecoration(
border: const OutlineInputBorder(),
errorText: _isError ? ' ' : null,
labelText: 'storage.euro'.tr(),
labelText: price.currency.shortcode,
),
),
),