Files
hash-wallet/lib/view_model/dev/exchange_provider_logs_view_model.dart
T
jwinterm 04203654f1 Rename Flutter project + binary: cake_wallet -> hash_wallet
The big one. Touches 760+ files. Locks in the user's decision to break
import-line compatibility with upstream cake-tech/cake_wallet in exchange
for a binary named hash_wallet on every platform.

Changes:
- pubspec_description.yaml: project name cake_wallet -> hash_wallet
- 762 Dart files: every 'package:cake_wallet/...' import rewritten to
  'package:hash_wallet/...' (lib/, cw_*/lib/, tool/, test/, integration_test/)
- linux/CMakeLists.txt: BINARY_NAME cake_wallet -> hash_wallet
- windows/CMakeLists.txt: project + BINARY_NAME (CakeWallet -> HashWallet)
- windows/runner/Runner.rc: company / file / product strings to Hash Wallet
  + Such Software LLC copyright
- macos/Runner.xcodeproj/project_base.pbxproj: cake_wallet_new.app refs
  -> hash_wallet.app (macOS output bundle name)
- com.suchsoftware.HashWallet.yml (Flatpak): all binary path refs
  cake_wallet -> hash_wallet (e.g. /app/hash_wallet/hash_wallet)
- linux/com.suchsoftware.HashWallet.desktop: Exec=hash_wallet
- scripts/android/copy_monero_deps.sh: CW_DIR target path
- configure_hash_wallet.sh: error message typo (old filename)

INTENTIONALLY UNCHANGED:
- cw_* subpackage names (cw_core, cw_bitcoin, cw_wownero, etc.) — they
  remain as the historical 'cake wallet' naming; renaming them would
  cascade through every sub-package's internal structure
- Method channel name 'com.cake_wallet/native_utils' in iOS/macOS/Android
  AppDelegates and MainActivity — it's a string identifier that has to
  match the Dart side exactly. Renaming requires both-sides change; it's
  internal-only and not user-visible.
- ghcr.io/cake-tech/cake_wallet:debian13-... docker image references in
  build scripts — that's Cake Labs' published image we use as the build
  environment, not ours.

User data directory now follows the new binary name:
  ~/.local/share/hash_wallet/  (was ~/.local/share/cake_wallet/)
  ~/.config/hash_wallet/       (was ~/.config/cake_wallet/)
Existing users on the old name will need migration if any exist.
2026-05-16 11:33:25 -04:00

86 lines
2.1 KiB
Dart

import 'package:hash_wallet/utils/exchange_provider_logger.dart';
import 'package:hash_wallet/exchange/exchange_provider_description.dart';
import 'package:mobx/mobx.dart';
part 'exchange_provider_logs_view_model.g.dart';
enum LogFilter { all, success, error }
class ExchangeProviderLogsViewModel = ExchangeProviderLogsViewModelBase with _$ExchangeProviderLogsViewModel;
abstract class ExchangeProviderLogsViewModelBase with Store {
@observable
bool isLoading = false;
@observable
String? error;
@observable
ObservableList<ExchangeProviderLogEntry> logs = ObservableList<ExchangeProviderLogEntry>();
@observable
LogFilter currentFilter = LogFilter.all;
@computed
ObservableList<ExchangeProviderLogEntry> get filteredLogs {
switch (currentFilter) {
case LogFilter.all:
return logs;
case LogFilter.success:
return ObservableList.of(logs.where((log) => log.isSuccess).toList());
case LogFilter.error:
return ObservableList.of(logs.where((log) => !log.isSuccess).toList());
}
}
@computed
int get totalLogs => logs.length;
@computed
int get successLogs => logs.where((log) => log.isSuccess).length;
@computed
int get errorLogs => logs.where((log) => !log.isSuccess).length;
@computed
Map<ExchangeProviderDescription?, int> get logsByProvider {
final Map<ExchangeProviderDescription, int> counts = {};
for (final log in logs) {
if (log.provider == null) continue;
counts[log.provider!] = (counts[log.provider!] ?? 0) + 1;
}
return counts;
}
String getLogsAsText() => ExchangeProviderLogger.getLogsAsText();
String getLogsAsJson() => ExchangeProviderLogger.getLogsAsJson();
@action
void loadLogs() {
isLoading = true;
error = null;
try {
logs.clear();
logs.addAll(ExchangeProviderLogger.logs);
} catch (e) {
error = e.toString();
} finally {
isLoading = false;
}
}
@action
void clearLogs() {
ExchangeProviderLogger.clearLogs();
logs.clear();
}
@action
void refreshLogs() => loadLogs();
@action
void setFilter(LogFilter filter) => currentFilter = filter;
}