/// Created by Haoyi on 2021/7/1 part of "../app_property.dart"; extension IgcPropertyExtension on AppProperty { Future isFirstUseGemsFeature() async { final gems = await getInt(PropertyKeys.currentIgcBalance, defValue: -1); return gems == -1; } Future _calculateIgcBalance(int coin) async { final bundle = await loadValuesByTag(PropertyTags.igc); int currentCoinBalance = bundle.getInt(PropertyKeys.currentIgcBalance) ?? 0; final cipher = bundle.getInt(PropertyKeys.currentIgcBalanceValidation) ?? GuruApp.instance.appSpec.deployment.igcBalanceSecret; final cipherCoinBalance = cipher ^ GuruApp.instance.appSpec.deployment.igcBalanceSecret; if (cipherCoinBalance != currentCoinBalance) { currentCoinBalance = cipherCoinBalance; } final newBalance = max(currentCoinBalance + coin, 0); final updateBundle = PropertyBundle(); updateBundle.setInt(PropertyKeys.currentIgcBalance, newBalance); updateBundle.setInt(PropertyKeys.currentIgcBalanceValidation, newBalance ^ GuruApp.instance.appSpec.deployment.igcBalanceSecret); setProperties(updateBundle); return newBalance; } Future consumeIgc(int igc) async { return await _calculateIgcBalance(-igc); } Future accumulateIgc(int igc) async { return await _calculateIgcBalance(igc); } Future clearAllIgc() async { return await removeAllWithTag(PropertyTags.igc); } Future increaseAndGetIapCount() async { final count = await getInt(PropertyKeys.iapCount, defValue: 0); await setInt(PropertyKeys.iapCount, count + 1); return count + 1; } Future getIapCount() async { return await getInt(PropertyKeys.iapCount, defValue: 0); } Future isPaidUser() async { return (await getIapCount()) > 0; } Future getIapIgc() async { return await getInt(PropertyKeys.iapIgc, defValue: 0); } Future accumulateIapIgc(int igc) async { final accumulatedIgc = await getInt(PropertyKeys.iapIgc, defValue: 0); await setInt(PropertyKeys.iapIgc, accumulatedIgc + igc); return accumulatedIgc + igc; } Future getNoIapIgc() async { return await getInt(PropertyKeys.noIapIgc, defValue: 0); } Future accumulateNoIapIgc(int igc) async { final accumulatedIgc = await getInt(PropertyKeys.noIapIgc, defValue: 0); await setInt(PropertyKeys.noIapIgc, accumulatedIgc + igc); return accumulatedIgc + igc; } }