import '../../src/rust/api/ffi_types.dart' as ffi; class SyncConfigModel { final String baseUrl; final String accessToken; final String refreshToken; final String localRoot; final String remoteRoot; final String syncMode; final String conflictStrategy; final String wcfDeleteMode; final int maxConcurrentTransfers; final int bandwidthLimitKbps; final List excludedPaths; final int maxWorkers; final String dataDir; final String clientId; final String logLevel; const SyncConfigModel({ required this.baseUrl, required this.accessToken, required this.refreshToken, required this.localRoot, required this.dataDir, required this.clientId, this.remoteRoot = 'cloudreve://my', this.syncMode = 'full', this.conflictStrategy = 'keep_both', this.wcfDeleteMode = 'wcf_delete_local_only', this.maxConcurrentTransfers = 3, this.bandwidthLimitKbps = 0, this.excludedPaths = const [], this.maxWorkers = 0, this.logLevel = 'info', }); SyncConfigModel copyWith({ String? baseUrl, String? accessToken, String? refreshToken, String? localRoot, String? remoteRoot, String? syncMode, String? conflictStrategy, String? wcfDeleteMode, int? maxConcurrentTransfers, int? bandwidthLimitKbps, List? excludedPaths, int? maxWorkers, String? dataDir, String? clientId, String? logLevel, }) { return SyncConfigModel( baseUrl: baseUrl ?? this.baseUrl, accessToken: accessToken ?? this.accessToken, refreshToken: refreshToken ?? this.refreshToken, localRoot: localRoot ?? this.localRoot, remoteRoot: remoteRoot ?? this.remoteRoot, syncMode: syncMode ?? this.syncMode, conflictStrategy: conflictStrategy ?? this.conflictStrategy, wcfDeleteMode: wcfDeleteMode ?? this.wcfDeleteMode, maxConcurrentTransfers: maxConcurrentTransfers ?? this.maxConcurrentTransfers, bandwidthLimitKbps: bandwidthLimitKbps ?? this.bandwidthLimitKbps, excludedPaths: excludedPaths ?? this.excludedPaths, maxWorkers: maxWorkers ?? this.maxWorkers, dataDir: dataDir ?? this.dataDir, clientId: clientId ?? this.clientId, logLevel: logLevel ?? this.logLevel, ); } ffi.SyncConfigFfi toFfi() { return ffi.SyncConfigFfi( baseUrl: baseUrl, accessToken: accessToken, refreshToken: refreshToken, localRoot: localRoot, remoteRoot: remoteRoot, syncMode: syncMode, conflictStrategy: conflictStrategy, wcfDeleteMode: wcfDeleteMode, maxConcurrentTransfers: maxConcurrentTransfers, bandwidthLimitKbps: BigInt.from(bandwidthLimitKbps), excludedPaths: excludedPaths, maxWorkers: maxWorkers, dataDir: dataDir, clientId: clientId, logLevel: logLevel, ); } static SyncConfigModel fromFfi(ffi.SyncConfigFfi ffi) { return SyncConfigModel( baseUrl: ffi.baseUrl, accessToken: ffi.accessToken, refreshToken: ffi.refreshToken, localRoot: ffi.localRoot, remoteRoot: ffi.remoteRoot, syncMode: ffi.syncMode, conflictStrategy: ffi.conflictStrategy, wcfDeleteMode: ffi.wcfDeleteMode, maxConcurrentTransfers: ffi.maxConcurrentTransfers, bandwidthLimitKbps: ffi.bandwidthLimitKbps.toInt(), excludedPaths: ffi.excludedPaths, maxWorkers: ffi.maxWorkers, dataDir: ffi.dataDir, clientId: ffi.clientId, logLevel: ffi.logLevel, ); } }