Files
peyawallet/lib/native/native_library_loader.dart
T
2026-04-06 21:11:25 +02:00

48 lines
1.4 KiB
Dart

import 'dart:ffi';
import 'dart:io';
import 'package:logger/logger.dart';
import 'package:path/path.dart' as p;
import 'platform_adapter.dart';
class NativeLibraryLoader {
NativeLibraryLoader({
required this.logger,
PlatformAdapter? adapter,
}) : _adapter = adapter ?? const PlatformAdapter();
final Logger logger;
final PlatformAdapter _adapter;
DynamicLibrary load() {
final overridePath =
Platform.environment['PEYA_WALLET_LIB'] ?? Platform.environment['SALVIUM_WALLET_LIB'];
if (overridePath != null && overridePath.isNotEmpty) {
return _loadFromPath(overridePath);
}
for (final root in _adapter.librarySearchPaths()) {
for (final libName in _adapter.libraryNames()) {
final candidate = p.join(Directory.current.path, root, libName);
if (File(candidate).existsSync()) {
logger.i('Loading wallet library from $candidate');
return DynamicLibrary.open(candidate);
}
}
}
logger.w('Wallet library not found in search paths. Falling back.');
throw StateError('Wallet library not found. Set PEYA_WALLET_LIB or build native wrapper.');
}
DynamicLibrary _loadFromPath(String path) {
final resolved = p.normalize(path);
if (!File(resolved).existsSync()) {
throw StateError('Wallet library not found at $resolved');
}
logger.i('Loading wallet library from $resolved');
return DynamicLibrary.open(resolved);
}
}