cake_wallet/cw_monero/lib/subaddress_list.dart

82 lines
2.8 KiB
Dart
Raw Normal View History

2020-01-04 19:31:52 +00:00
import 'dart:ffi';
import 'package:ffi/ffi.dart';
import 'package:flutter/foundation.dart';
import 'package:cw_monero/signatures.dart';
import 'package:cw_monero/types.dart';
import 'package:cw_monero/monero_api.dart';
import 'package:cw_monero/structs/subaddress_row.dart';
final subaddressSizeNative = moneroApi
.lookup<NativeFunction<subaddrress_size>>('subaddrress_size')
.asFunction<SubaddressSize>();
final subaddressRefreshNative = moneroApi
.lookup<NativeFunction<subaddrress_refresh>>('subaddress_refresh')
.asFunction<SubaddressRefresh>();
final subaddrressGetAllNative = moneroApi
.lookup<NativeFunction<subaddress_get_all>>('subaddrress_get_all')
.asFunction<SubaddressGetAll>();
final subaddrressAddNewNative = moneroApi
.lookup<NativeFunction<subaddress_add_new>>('subaddress_add_row')
.asFunction<SubaddressAddNew>();
final subaddrressSetLabelNative = moneroApi
.lookup<NativeFunction<subaddress_set_label>>('subaddress_set_label')
.asFunction<SubaddressSetLabel>();
2020-01-08 12:26:34 +00:00
void refreshSubaddresses({int accountIndex}) =>
2020-01-04 19:31:52 +00:00
subaddressRefreshNative(accountIndex);
List<SubaddressRow> getAllSubaddresses() {
final size = subaddressSizeNative();
final subaddressAddressesPointer = subaddrressGetAllNative();
final subaddressAddresses = subaddressAddressesPointer.asTypedList(size);
return subaddressAddresses
.map((addr) => Pointer<SubaddressRow>.fromAddress(addr).ref)
.toList();
}
2020-01-08 12:26:34 +00:00
void addSubaddressSync({int accountIndex, String label}) {
2020-01-04 19:31:52 +00:00
final labelPointer = Utf8.toUtf8(label);
subaddrressAddNewNative(accountIndex, labelPointer);
free(labelPointer);
}
2020-01-08 12:26:34 +00:00
void setLabelForSubaddressSync(
{int accountIndex, int addressIndex, String label}) {
2020-01-04 19:31:52 +00:00
final labelPointer = Utf8.toUtf8(label);
2020-01-08 12:26:34 +00:00
2020-01-04 19:31:52 +00:00
subaddrressSetLabelNative(accountIndex, addressIndex, labelPointer);
free(labelPointer);
}
2020-01-08 12:26:34 +00:00
void _addSubaddress(Map<String, dynamic> args) {
final label = args['label'] as String;
final accountIndex = args['accountIndex'] as int;
2020-01-04 19:31:52 +00:00
2020-01-08 12:26:34 +00:00
addSubaddressSync(accountIndex: accountIndex, label: label);
}
void _setLabelForSubaddress(Map<String, dynamic> args) {
final label = args['label'] as String;
final accountIndex = args['accountIndex'] as int;
final addressIndex = args['addressIndex'] as int;
setLabelForSubaddressSync(
accountIndex: accountIndex, addressIndex: addressIndex, label: label);
}
2020-01-04 19:31:52 +00:00
Future addSubaddress({int accountIndex, String label}) async =>
2020-05-26 15:27:10 +00:00
compute<Map<String, Object>, void>(_addSubaddress, {'accountIndex': accountIndex, 'label': label});
2020-01-04 19:31:52 +00:00
Future setLabelForSubaddress(
{int accountIndex, int addressIndex, String label}) =>
2020-05-26 15:27:10 +00:00
compute<Map<String, Object>, void>(_setLabelForSubaddress, {
2020-01-04 19:31:52 +00:00
'accountIndex': accountIndex,
'addressIndex': addressIndex,
'label': label
2020-01-08 12:26:34 +00:00
});