48 lines
1.4 KiB
Dart
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);
|
|
}
|
|
}
|