|
|
|
|
@ -32,8 +32,6 @@ enum CanSendStatus {
|
|
|
|
|
class SubscriptionController extends BaseController {
|
|
|
|
|
late PangeaController _pangeaController;
|
|
|
|
|
SubscriptionInfo? subscription;
|
|
|
|
|
|
|
|
|
|
bool initialized = false;
|
|
|
|
|
final StreamController subscriptionStream = StreamController.broadcast();
|
|
|
|
|
|
|
|
|
|
SubscriptionController(PangeaController pangeaController) : super() {
|
|
|
|
|
@ -45,7 +43,28 @@ class SubscriptionController extends BaseController {
|
|
|
|
|
(subscription!.currentSubscriptionId != null ||
|
|
|
|
|
subscription!.currentSubscription != null);
|
|
|
|
|
|
|
|
|
|
bool _isInitializing = false;
|
|
|
|
|
Completer<void> initialized = Completer<void>();
|
|
|
|
|
|
|
|
|
|
Future<void> initialize() async {
|
|
|
|
|
if (initialized.isCompleted) return;
|
|
|
|
|
if (_isInitializing) {
|
|
|
|
|
await initialized.future;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
_isInitializing = true;
|
|
|
|
|
await _initialize();
|
|
|
|
|
_isInitializing = false;
|
|
|
|
|
initialized.complete();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> reinitialize() async {
|
|
|
|
|
initialized = Completer<void>();
|
|
|
|
|
_isInitializing = false;
|
|
|
|
|
await initialize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> _initialize() async {
|
|
|
|
|
try {
|
|
|
|
|
if (_pangeaController.matrixState.client.userID == null) {
|
|
|
|
|
debugPrint(
|
|
|
|
|
@ -63,8 +82,6 @@ class SubscriptionController extends BaseController {
|
|
|
|
|
setNewUserTrial();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
initialized = true;
|
|
|
|
|
|
|
|
|
|
if (!kIsWeb) {
|
|
|
|
|
Purchases.addCustomerInfoUpdateListener(
|
|
|
|
|
(CustomerInfo info) async {
|
|
|
|
|
@ -186,6 +203,9 @@ class SubscriptionController extends BaseController {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> updateCustomerInfo() async {
|
|
|
|
|
if (!initialized.isCompleted) {
|
|
|
|
|
await initialize();
|
|
|
|
|
}
|
|
|
|
|
if (subscription == null) {
|
|
|
|
|
ErrorHandler.logError(
|
|
|
|
|
m: "Null subscription info in subscription settings",
|
|
|
|
|
@ -220,7 +240,7 @@ class SubscriptionController extends BaseController {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool get _shouldShowPaywall {
|
|
|
|
|
return initialized &&
|
|
|
|
|
return initialized.isCompleted &&
|
|
|
|
|
!isSubscribed &&
|
|
|
|
|
(_lastDismissedPaywall == null ||
|
|
|
|
|
DateTime.now().difference(_lastDismissedPaywall!).inHours >
|
|
|
|
|
@ -245,7 +265,7 @@ class SubscriptionController extends BaseController {
|
|
|
|
|
|
|
|
|
|
Future<void> showPaywall(BuildContext context) async {
|
|
|
|
|
try {
|
|
|
|
|
if (!initialized) {
|
|
|
|
|
if (!initialized.isCompleted) {
|
|
|
|
|
await initialize();
|
|
|
|
|
}
|
|
|
|
|
if (subscription?.availableSubscriptions.isEmpty ?? true) {
|
|
|
|
|
|