From 135ede6a78f8d293ce97ad0ac7591ce7349375b1 Mon Sep 17 00:00:00 2001 From: clear <100709132+clear-xmr@users.noreply.github.com> Date: Tue, 12 Apr 2022 17:38:47 +0200 Subject: [PATCH] Cw-58: Show subaddress label on the transaction details page (#333) * CW-58: Show subaddress label on the transaction details page * add translations * Fix interface --- cw_monero/ios/Classes/monero_api.cpp | 5 +++++ cw_monero/lib/api/signatures.dart | 4 ++++ cw_monero/lib/api/types.dart | 6 +++++- cw_monero/lib/api/wallet.dart | 8 ++++++++ cw_monero/lib/monero_wallet.dart | 4 ++++ lib/monero/cw_monero.dart | 5 +++++ lib/view_model/transaction_details_view_model.dart | 9 +++++++++ res/values/strings_de.arb | 1 + res/values/strings_en.arb | 1 + res/values/strings_es.arb | 3 ++- res/values/strings_fr.arb | 1 + res/values/strings_hi.arb | 3 ++- res/values/strings_hr.arb | 3 ++- res/values/strings_it.arb | 3 ++- res/values/strings_ja.arb | 3 ++- res/values/strings_ko.arb | 3 ++- res/values/strings_nl.arb | 3 ++- res/values/strings_pl.arb | 3 ++- res/values/strings_pt.arb | 3 ++- res/values/strings_ru.arb | 3 ++- res/values/strings_uk.arb | 3 ++- res/values/strings_zh.arb | 3 ++- tool/configure.dart | 2 ++ 23 files changed, 69 insertions(+), 13 deletions(-) diff --git a/cw_monero/ios/Classes/monero_api.cpp b/cw_monero/ios/Classes/monero_api.cpp index 6dbc0976..f81f63d1 100644 --- a/cw_monero/ios/Classes/monero_api.cpp +++ b/cw_monero/ios/Classes/monero_api.cpp @@ -766,6 +766,11 @@ extern "C" return strdup(m_wallet->getTxKey(std::string(txId)).c_str()); } + char *get_subaddress_label(uint32_t accountIndex, uint32_t addressIndex) + { + return strdup(get_current_wallet()->getSubaddressLabel(accountIndex, addressIndex).c_str()); + } + #ifdef __cplusplus } #endif diff --git a/cw_monero/lib/api/signatures.dart b/cw_monero/lib/api/signatures.dart index e97003dc..9781aff2 100644 --- a/cw_monero/lib/api/signatures.dart +++ b/cw_monero/lib/api/signatures.dart @@ -120,3 +120,7 @@ typedef close_current_wallet = Void Function(); typedef on_startup = Void Function(); typedef rescan_blockchain = Void Function(); + +typedef get_subaddress_label = Pointer Function( + Int32 accountIndex, + Int32 addressIndex); \ No newline at end of file diff --git a/cw_monero/lib/api/types.dart b/cw_monero/lib/api/types.dart index d65f2d0d..4caa1283 100644 --- a/cw_monero/lib/api/types.dart +++ b/cw_monero/lib/api/types.dart @@ -117,4 +117,8 @@ typedef CloseCurrentWallet = void Function(); typedef OnStartup = void Function(); -typedef RescanBlockchainAsync = void Function(); \ No newline at end of file +typedef RescanBlockchainAsync = void Function(); + +typedef GetSubaddressLabel = Pointer Function( + int accountIndex, + int addressIndex); \ No newline at end of file diff --git a/cw_monero/lib/api/wallet.dart b/cw_monero/lib/api/wallet.dart index 97245990..72507e91 100644 --- a/cw_monero/lib/api/wallet.dart +++ b/cw_monero/lib/api/wallet.dart @@ -112,6 +112,10 @@ final rescanBlockchainAsyncNative = moneroApi .lookup>('rescan_blockchain') .asFunction(); +final getSubaddressLabelNative = moneroApi + .lookup>('get_subaddress_label') + .asFunction(); + int getSyncingHeight() => getSyncingHeightNative(); bool isNeededToRefresh() => isNeededToRefreshNative() != 0; @@ -327,3 +331,7 @@ Future isConnected() => compute(_isConnected, 0); Future getNodeHeight() => compute(_getNodeHeight, 0); void rescanBlockchainAsync() => rescanBlockchainAsyncNative(); + +String getSubaddressLabel(int accountIndex, int addressIndex) { + return convertUTF8ToString(pointer: getSubaddressLabelNative(accountIndex, addressIndex)); +} \ No newline at end of file diff --git a/cw_monero/lib/monero_wallet.dart b/cw_monero/lib/monero_wallet.dart index 1d675cd8..6ac31c9f 100644 --- a/cw_monero/lib/monero_wallet.dart +++ b/cw_monero/lib/monero_wallet.dart @@ -314,6 +314,10 @@ abstract class MoneroWalletBase extends WalletBase _getAllTransactions(dynamic _) => monero_transaction_history .getAllTransations() diff --git a/lib/monero/cw_monero.dart b/lib/monero/cw_monero.dart index 878fdda9..98ba2644 100644 --- a/lib/monero/cw_monero.dart +++ b/lib/monero/cw_monero.dart @@ -294,4 +294,9 @@ class CWMonero extends Monero { final moneroWallet = wallet as MoneroWallet; return moneroWallet.getTransactionAddress(accountIndex, addressIndex); } + + String getSubaddressLabel(Object wallet, int accountIndex, int addressIndex) { + final moneroWallet = wallet as MoneroWallet; + return moneroWallet.getSubaddressLabel(accountIndex, addressIndex); + } } diff --git a/lib/view_model/transaction_details_view_model.dart b/lib/view_model/transaction_details_view_model.dart index 5c9b18ca..41b4e0c6 100644 --- a/lib/view_model/transaction_details_view_model.dart +++ b/lib/view_model/transaction_details_view_model.dart @@ -60,6 +60,7 @@ abstract class TransactionDetailsViewModelBase with Store { addressIndex != null) { try { final address = monero.getTransactionAddress(wallet, accountIndex, addressIndex); + final label = monero.getSubaddressLabel(wallet, accountIndex, addressIndex); if (address?.isNotEmpty ?? false) { isRecipientAddressShown = true; @@ -68,6 +69,14 @@ abstract class TransactionDetailsViewModelBase with Store { title: S.current.transaction_details_recipient_address, value: address)); } + + if (label?.isNotEmpty ?? false) { + _items.add( + StandartListItem( + title: S.current.address_label, + value: label) + ); + } } catch (e) { print(e.toString()); } diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index b29cbf05..306cc9e8 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Bezeichnung", "new_subaddress_create" : "Erstellen", + "address_label" : "Address label", "subaddress_title" : "Unteradressenliste", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 2de02e8b..42f3e05f 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Label name", "new_subaddress_create" : "Create", + "address_label" : "Address label", "subaddress_title" : "Subaddress list", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index a3cbb755..8e00ddcd 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Nombre de etiqueta", "new_subaddress_create" : "Crear", + "address_label" : "Address label", "subaddress_title" : "Lista de subdirecciones", @@ -528,4 +529,4 @@ "search": "Búsqueda", "new_template" : "Nueva plantilla", "electrum_address_disclaimer": "Generamos nuevas direcciones cada vez que usa una, pero las direcciones anteriores siguen funcionando" -} \ No newline at end of file +} diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 7e373a3a..c173e526 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -266,6 +266,7 @@ "new_subaddress_label_name" : "Nom", "new_subaddress_create" : "Créer", + "address_label" : "Address label", "subaddress_title" : "Liste des sous-adresses", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 6baae968..bad0ae87 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "लेबल का नाम", "new_subaddress_create" : "सर्जन करना", + "address_label" : "Address label", "subaddress_title" : "उपखंड सूची", @@ -528,4 +529,4 @@ "search": "खोज", "new_template" : "नया टेम्पलेट", "electrum_address_disclaimer": "हर बार जब आप एक का उपयोग करते हैं तो हम नए पते उत्पन्न करते हैं, लेकिन पिछले पते काम करना जारी रखते हैं" -} \ No newline at end of file +} diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 5650fd30..03e7708b 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Oznaka", "new_subaddress_create" : "Izradi", + "address_label" : "Address label", "subaddress_title" : "Lista podadresa", @@ -528,4 +529,4 @@ "search": "Traži", "new_template" : "novi predložak", "electrum_address_disclaimer": "Minden egyes alkalommal új címeket generálunk, de a korábbi címek továbbra is működnek" -} \ No newline at end of file +} diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 715698d3..e92f4da5 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Nome etichetta", "new_subaddress_create" : "Crea", + "address_label" : "Address label", "subaddress_title" : "Lista sottoindirizzi", @@ -528,4 +529,4 @@ "search": "Ricerca", "new_template" : "Nuovo modello", "electrum_address_disclaimer": "Generiamo nuovi indirizzi ogni volta che ne utilizzi uno, ma gli indirizzi precedenti continuano a funzionare" -} \ No newline at end of file +} diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 410fe3a8..734c769d 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "ラベル名", "new_subaddress_create" : "作成する", + "address_label" : "Address label", "subaddress_title" : "サブアドレス一覧", @@ -528,4 +529,4 @@ "search": "検索", "new_template" : "新しいテンプレート", "electrum_address_disclaimer": "使用するたびに新しいアドレスが生成されますが、以前のアドレスは引き続き機能します" -} \ No newline at end of file +} diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index bec483e4..cd671228 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "라벨 이름", "new_subaddress_create" : "몹시 떠들어 대다", + "address_label" : "Address label", "subaddress_title" : "하위 주소 목록", @@ -528,4 +529,4 @@ "search": "찾다", "new_template" : "새 템플릿", "electrum_address_disclaimer": "사용할 때마다 새 주소가 생성되지만 이전 주소는 계속 작동합니다." -} \ No newline at end of file +} diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 8987df4e..365858b8 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Label naam", "new_subaddress_create" : "Creëren", + "address_label" : "Address label", "subaddress_title" : "Subadreslijst", @@ -528,4 +529,4 @@ "search": "Zoekopdracht", "new_template" : "Nieuwe sjabloon", "electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work" -} \ No newline at end of file +} diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 7249c88b..97101bfd 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -271,6 +271,7 @@ "new_subaddress_label_name" : "Nazwa etykiety", "new_subaddress_create" : "Stwórz", + "address_label" : "Address label", "subaddress_title" : "Lista podadresów", @@ -531,4 +532,4 @@ "search": "Szukaj", "new_template" : "Nowy szablon", "electrum_address_disclaimer": "Za każdym razem, gdy korzystasz z jednego z nich, generujemy nowe adresy, ale poprzednie adresy nadal działają" -} \ No newline at end of file +} diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 15db684f..db7369e5 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Nome", "new_subaddress_create" : "Criar", + "address_label" : "Address label", "subaddress_title" : "Sub-endereços", @@ -528,4 +529,4 @@ "search": "Procurar", "new_template" : "Novo modelo", "electrum_address_disclaimer": "Geramos novos endereços cada vez que você usa um, mas os endereços anteriores continuam funcionando" -} \ No newline at end of file +} diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 2719e82e..2d685b80 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "Имя", "new_subaddress_create" : "Создать", + "address_label" : "Address label", "subaddress_title" : "Список субадресов", @@ -528,4 +529,4 @@ "search": "Поиск", "new_template" : "Новый шаблон", "electrum_address_disclaimer": "Мы генерируем новые адреса каждый раз, когда вы их используете, но предыдущие адреса продолжают работать." -} \ No newline at end of file +} diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 383f812f..9bf2d85c 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -267,6 +267,7 @@ "new_subaddress_label_name" : "Ім'я", "new_subaddress_create" : "Створити", + "address_label" : "Address label", "subaddress_title" : "Список Субадрес", @@ -527,4 +528,4 @@ "search": "Пошук", "new_template" : "Новий шаблон", "electrum_address_disclaimer": "Ми створюємо нові адреси щоразу, коли ви використовуєте їх, але попередні адреси продовжують працювати" -} \ No newline at end of file +} diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 787d7bd5..c55b7147 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -268,6 +268,7 @@ "new_subaddress_label_name" : "标签名称", "new_subaddress_create" : "创建", + "address_label" : "Address label", "subaddress_title" : "子地址列表", @@ -526,4 +527,4 @@ "search": "搜索", "new_template" : "新模板", "electrum_address_disclaimer": "每次您使用一个地址时,我们都会生成新地址,但之前的地址仍然有效" -} \ No newline at end of file +} diff --git a/tool/configure.dart b/tool/configure.dart index f74d9c9d..dcbac59c 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -209,6 +209,8 @@ abstract class Monero { String getTransactionAddress(Object wallet, int accountIndex, int addressIndex); + String getSubaddressLabel(Object wallet, int accountIndex, int addressIndex); + int getHeigthByDate({DateTime date}); TransactionPriority getDefaultTransactionPriority(); TransactionPriority deserializeMoneroTransactionPriority({int raw});