activity screen: add gdev start time delimiter

This commit is contained in:
poka 2022-12-03 08:44:44 +01:00
parent 5b89f661ed
commit 806a96d127
7 changed files with 132 additions and 11 deletions

View File

@ -50,3 +50,6 @@ const debugPin = true;
String indexerEndpoint = '';
late double balanceRatio;
late int udValue;
// Indexer
late DateTime startBlockchainTime;

View File

@ -87,3 +87,12 @@ query ($name: String!) {
}
}
''';
const String getBlockchainStartQ = r'''
query {
block(limit: 1) {
created_at
number
}
}
''';

View File

@ -446,7 +446,24 @@ class DuniterIndexer with ChangeNotifier {
// QueryResult<Object?> result, FetchMoreOptions options, String address) {}
}
//// Manuals queries
Future<bool> isIdtyExist(String name) async {
final variables = <String, dynamic>{
'name': name,
};
final result = await _execQuery(isIdtyExistQ, variables);
return result.data!['identity']?.isEmpty ?? false ? false : true;
}
Future<DateTime> getBlockStart() async {
final result = await _execQuery(getBlockchainStartQ, {});
startBlockchainTime = DateTime.parse(result.data!['block'][0]['created_at']);
return startBlockchainTime;
}
Future<QueryResult> _execQuery(
String query, Map<String, dynamic> variables) async {
final httpLink = HttpLink(
'$indexerEndpoint/v1/graphql',
);
@ -456,14 +473,8 @@ Future<bool> isIdtyExist(String name) async {
link: httpLink,
);
final QueryOptions options = QueryOptions(
document: gql(isIdtyExistQ),
variables: <String, dynamic>{
'name': name,
},
);
final QueryOptions options =
QueryOptions(document: gql(query), variables: variables);
final QueryResult result = await client.query(options);
return result.data!['identity']?.isEmpty ?? false ? false : true;
return await client.query(options);
}

View File

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/wallet_options.dart';
@ -383,6 +384,77 @@ class SubstrateSdk with ChangeNotifier {
return estimateFees.partialFee / 100;
}
int hexStringToUint16(String input) {
// Slice the string in 2-char substrings and parse it from hex to decimal
final bytes = sliceString(input, 2).map((s) => int.parse(s, radix: 16));
// Create a Uint8 from the 2-bytes list
final u8list = Uint8List.fromList(bytes.toList());
// Return a Uint16 little endian representation
return ByteData.view(u8list.buffer).getUint16(0, Endian.little);
}
List<String> sliceString(String input, int count) {
if (input.isEmpty) return [];
if (input.length % count != 0) {
throw ArgumentError("Cannot slice $input in $count slices.");
}
// final slices = List<String>(count);
var slices = List<String>.filled(count, '');
int len = input.length;
int sliceSize = len ~/ count;
for (var i = 0; i < count; i++) {
var start = i * sliceSize;
slices[i] = input.substring(start, start + sliceSize);
}
return List.unmodifiable(slices);
}
Future<DateFormat> getBlockchainStart() async {
////// Manu indexer
//// Extract block date. Ugly, I can't find a better way to get the date of the block ?
//// The only polkadot issue for that : https://github.com/polkadot-js/api/issues/2603
// const created_at = new Date(
// signedBlock.block.extrinsics
// .filter(
// ({ method: { section, method } }) =>
// section === 'timestamp' && method === 'set'
// )[0]
// .args[0].toNumber()
// )
//// manu rpc
// genesis: api.genesisHash.toHex(),
// chain: await api.rpc.chain.getHeader(),
// chainInfo: await api.registry.getChainProperties(),
// test: await api.rpc.state.getPairs('0x')
// query block finalisé qui ne change jamais.
// api.rpc.chain.subscribeFinalizedHeads
// events: await api.rpc.state.getStorage('0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7'),
// lastFinalizedBlock: await api.rpc.chain.getFinalizedHead()
// get block
// api.rpc.chain.getFinalizedHead
// shit
// final blockHash =
// await sdk.webView!.evalJavascript('api.rpc.chain.getBlockHash(1)');
// final Map blockContent = await sdk.webView!
// .evalJavascript('api.rpc.chain.getBlock("$blockHash")');
// final String dateBrut = blockContent['block']['extrinsics'][0];
// final dateTextByte = hex.decode(dateBrut.substring(2));
// final dateText = await sdk.webView!
// .evalJavascript('api.tx($dateTextByte)', wrapPromise: false);
// log.d('aaaaaaaaaaaaaaaaaaaaa: $dateText');
return DateFormat();
}
/////////////////////////////////////
////// 3: SUBSTRATE CONNECTION //////
/////////////////////////////////////
@ -403,7 +475,7 @@ class SubstrateSdk with ChangeNotifier {
}
Future<void> connectNode(BuildContext ctx) async {
HomeProvider homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
final homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
final myWalletProvider = Provider.of<MyWalletsProvider>(ctx, listen: false);
homeProvider.changeMessage("connectionPending".tr(), 0);
@ -448,6 +520,9 @@ class SubstrateSdk with ChangeNotifier {
await initCurrencyParameters();
await getBalanceRatio();
// Indexer
getBlockStart();
notifyListeners();
homeProvider.changeMessage(
"wellConnectedToNode"

View File

@ -34,6 +34,8 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false);
// log.d('aaaaaaaaaaaaaaaaaaaaa $startBlockchainTime');
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
@ -196,6 +198,8 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
bool isTody = false;
bool isYesterday = false;
bool isThisWeek = false;
bool isMigrationTime = false;
bool isMigrationTimePassed = false;
final Map<int, String> monthsInYear = {
1: "month1".tr(),
@ -278,7 +282,25 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier {
finalAmount = '$amount $currencyName';
}
if (!isMigrationTimePassed && date.compareTo(startBlockchainTime) < 0) {
isMigrationTimePassed = true;
isMigrationTime = true;
} else {
isMigrationTime = false;
}
return Column(children: <Widget>[
if (isMigrationTime)
const Padding(
padding: EdgeInsets.symmetric(vertical: 30),
child: Text(
'Début de la ĞDev',
style: TextStyle(
fontSize: 25,
color: Colors.blueAccent,
fontWeight: FontWeight.w500),
),
),
if (dateDelimiter != null)
Padding(
padding: const EdgeInsets.symmetric(vertical: 30),

View File

@ -32,6 +32,7 @@ class HeaderProfile extends StatelessWidget {
return Stack(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sub, _) {
// sub.getBlockchainStart();
bool isAccountExist = balanceCache[address] != 0;
return Container(
height: 180,

View File

@ -5,7 +5,7 @@ description: Pay with G1.
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.0.12+37
version: 0.0.12+39
environment:
sdk: '>=2.12.0 <3.0.0'