Skip to content

Silent payments #1129

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 14 commits into
base: silent_payments
Choose a base branch
from
4 changes: 4 additions & 0 deletions lib/db/isar/main_db.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import '../../models/isar/models/contact_entry.dart';
import '../../models/isar/models/isar_models.dart';
import '../../models/isar/ordinal.dart';
import '../../models/isar/stack_theme.dart';
import '../../models/isar/models/silent_payments/silent_payment_config.dart';
import '../../models/isar/models/silent_payments/silent_payment_metadata.dart';
import '../../utilities/amount/amount.dart';
import '../../utilities/extensions/extensions.dart';
import '../../utilities/stack_file_system.dart';
Expand Down Expand Up @@ -70,6 +72,8 @@ class MainDB {
WalletInfoMetaSchema,
TokenWalletInfoSchema,
FrostWalletInfoSchema,
SilentPaymentConfigSchema,
SilentPaymentMetadataSchema,
],
directory: (await StackFileSystem.applicationIsarDirectory()).path,
// inspector: kDebugMode,
Expand Down
84 changes: 84 additions & 0 deletions lib/models/isar/models/silent_payments/silent_payment_config.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import 'dart:convert';
import 'package:isar/isar.dart';
import '../../../../wallets/isar/isar_id_interface.dart';

part 'silent_payment_config.g.dart';

@Collection(accessor: "silentPaymentConfig", inheritance: false)
class SilentPaymentConfig implements IsarId {
@override
Id id = Isar.autoIncrement;

@Index(unique: true)
final String walletId;

final bool isEnabled;

final int lastScannedHeight;

// Store any computed labels for efficient lookup
final String? labelMapJsonString;

@ignore
Map<String, String>? get labelMap =>
labelMapJsonString == null
? null
: Map<String, String>.from(jsonDecode(labelMapJsonString!) as Map);

SilentPaymentConfig({
required this.walletId,
this.isEnabled = false,
this.lastScannedHeight = 0,
this.labelMapJsonString,
});

SilentPaymentConfig copyWith({
bool? isEnabled,
int? lastScannedHeight,
String? labelMapJsonString,
}) {
return SilentPaymentConfig(
walletId: walletId,
isEnabled: isEnabled ?? this.isEnabled,
lastScannedHeight: lastScannedHeight ?? this.lastScannedHeight,
labelMapJsonString: labelMapJsonString ?? this.labelMapJsonString,
)..id = id;
}

Future<void> updateEnabled({
required bool enabled,
required Isar isar,
}) async {
if (isEnabled != enabled) {
await isar.writeTxn(() async {
await isar.silentPaymentConfig.put(copyWith(isEnabled: enabled));
});
}
}

Future<void> updateLastScannedHeight({
required int height,
required Isar isar,
}) async {
if (lastScannedHeight != height) {
await isar.writeTxn(() async {
await isar.silentPaymentConfig.put(copyWith(lastScannedHeight: height));
});
}
}

Future<void> updateLabelMap({
required Map<String, String> newLabelMap,
required Isar isar,
}) async {
final encodedMap = jsonEncode(newLabelMap);

if (labelMapJsonString != encodedMap) {
await isar.writeTxn(() async {
await isar.silentPaymentConfig.put(
copyWith(labelMapJsonString: encodedMap),
);
});
}
}
}
Loading