Skip to content
Snippets Groups Projects
myWallets.dart 6.26 KiB
Newer Older
poka's avatar
poka committed
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'dart:async';
poka's avatar
poka committed
import 'package:gecko/globals.dart';
import 'package:provider/provider.dart';
poka's avatar
poka committed

class MyWalletsProvider with ChangeNotifier {
poka's avatar
poka committed
  List<WalletData> listWallets = [];
    getDefaultWallet();

    final bool isWalletFolderExist = await walletsDirectory.exists();
    if (!isWalletFolderExist) {
      await Directory(walletsDirectory.path).create();
    }

    File _currentChestFile = File('${walletsDirectory.path}/currentChest.conf');

    await _currentChestFile.create();
    await _currentChestFile.writeAsString('0');

    final bool isChestsExist =
        await Directory('${walletsDirectory.path}/0').exists();
    if (!isChestsExist) {
      await Directory('${walletsDirectory.path}/0').create();
      await Directory('${walletsDirectory.path}/1').create();
      await File('${walletsDirectory.path}/0/list.conf').create();
      await File('${walletsDirectory.path}/0/order.conf').create();
      await File('${walletsDirectory.path}/1/list.conf').create();
      await File('${walletsDirectory.path}/1/order.conf').create();
    }
  }

  int getCurrentChest() {
    File _currentChestFile = File('${walletsDirectory.path}/currentChest.conf');

    bool isCurrentChestExist = _currentChestFile.existsSync();
    if (!isCurrentChestExist) {
      _currentChestFile.createSync();
      _currentChestFile.writeAsString('0');
    }
    return int.parse(_currentChestFile.readAsStringSync());
  }

poka's avatar
poka committed
  bool checkIfWalletExist() {
poka's avatar
poka committed
    if (appPath == null) {
poka's avatar
poka committed
      return false;
    }

poka's avatar
poka committed
    final List _walletList = readAllWallets(0);
poka's avatar
poka committed
    if (_walletList.isEmpty) {
poka's avatar
poka committed
      print('No wallets detected');
      return false;
    } else {
      print('Some wallets have been detected.');
poka's avatar
poka committed
      return true;
    }
  }

poka's avatar
poka committed
  List readAllWallets(int _chest) {
    print(walletsDirectory.path);

poka's avatar
poka committed
    listWallets = [];

    File _walletConfig = File('${walletsDirectory.path}/$_chest/list.conf');
    _walletConfig.readAsLinesSync().forEach((element) {
poka's avatar
poka committed
      print(element);
      listWallets.add(WalletData(element));
      // listWallets += "${element.split(':')[0]}:${element.split(':')[1]}:${element.split(':')[2]}"
poka's avatar
poka committed
    });
poka's avatar
poka committed
    // listWallets.forEach((e) {
    //   print(e.name);
    // });
    // print(listWallets);
poka's avatar
poka committed
    return listWallets;
  }
poka's avatar
poka committed
  WalletData getWalletData(String _id) {
poka's avatar
poka committed
    int chest = int.parse(_id.split(':')[0]);
    // int nbr = int.parse(_id.split(':')[1]);
    final _walletConfig = File('${walletsDirectory.path}/$chest/list.conf');

poka's avatar
poka committed
    return WalletData(_walletConfig
        .readAsLinesSync()
        .firstWhere((element) => element.startsWith(_id)));
  void getDefaultWallet() {
    defaultWalletFile = File('${appPath.path}/defaultWallet');

poka's avatar
poka committed
    if (!defaultWalletFile.existsSync()) {
      File(defaultWalletFile.path).createSync();
poka's avatar
poka committed
    defaultWallet = getWalletData(defaultWalletFile.readAsStringSync());
    print("found default wallet $defaultWallet");
  Future<int> deleteAllWallet(context) async {
    try {
      print('DELETE THAT ?: $walletsDirectory');

      final bool _answer = await _confirmDeletingAllWallets(context);

      if (_answer) {
        await walletsDirectory.delete(recursive: true);
        await walletsDirectory.create();
        Navigator.pop(context);
      }
      return 0;
    } catch (e) {
      return 1;
    }
  }

  Future<bool> _confirmDeletingAllWallets(context) async {
    return showDialog<bool>(
      context: context,
      barrierDismissible: true, // user must tap button!
      builder: (BuildContext context) {
        MyWalletsProvider _myWalletProvider =
            Provider.of<MyWalletsProvider>(context);
        return AlertDialog(
          title:
              Text('Êtes-vous sûr de vouloir supprimer tous vos trousseaux ?'),
          content: SingleChildScrollView(child: Text('')),
          actions: <Widget>[
            TextButton(
              child: Text("Non"),
              onPressed: () {
                Navigator.pop(context, false);
              },
            ),
            TextButton(
              child: Text("Oui"),
              onPressed: () {
                WidgetsBinding.instance.addPostFrameCallback((_) {
                  _myWalletProvider.listWallets =
poka's avatar
poka committed
                      _myWalletProvider.readAllWallets(getCurrentChest());
                  _myWalletProvider.rebuildWidget();
                });
                Navigator.pop(context, true);
              },
            ),
          ],
        );
      },
    );
  }

  Future<void> generateNewDerivation(context, String _name) async {
    int _newWalletNbr;
    final _walletConfig = File('${walletsDirectory.path}/0/list.conf');
    if (await _walletConfig.readAsString() == '') {
      _newDerivationNbr = 3;
    } else {
      String _lastWallet =
          await _walletConfig.readAsLines().then((value) => value.last);
      int _lastDerivation = int.parse(_lastWallet.split(':')[3]);

      int _lastWalletNbr = int.parse(_lastWallet.split(':')[1]);
      _newWalletNbr = _lastWalletNbr + 1;
    await _walletConfig.writeAsString(
        '\n0:$_newWalletNbr:$_name:$_newDerivationNbr',
poka's avatar
poka committed
        mode: FileMode.append);

    print(await _walletConfig.readAsString());
    notifyListeners();

    Navigator.pop(context);
  }

  void rebuildWidget() {
    notifyListeners();
  }
poka's avatar
poka committed

// wallet data contains elements identifying wallet
class WalletData {
  int chest;
  int number;
  String name;
  int derivation;

  // constructor from ':'-separated string
  WalletData(String element) {
    List parts = element.split(':');

    this.chest = int.parse(parts[0]);
    this.number = int.parse(parts[1]);
    this.name = parts[2];
    this.derivation = int.parse(parts[3]);
  }

  // representation of WalletData when debugging
  @override
  String toString() {
    return this.name;
  }

  // creates the ':'-separated string from the WalletData
  String inLine() {
    return "${this.chest}:${this.number}:${this.name}:${this.derivation}";
  }

  // returns only the id part of the ':'-separated string
  String id() {
    return "${this.chest}:${this.number}";
  }
}