Persist subscription plan returned by the server
This commit is contained in:
parent
cd3eb478be
commit
540cea31df
65
lib/models/subscription.dart
Normal file
65
lib/models/subscription.dart
Normal file
|
@ -0,0 +1,65 @@
|
|||
import 'dart:convert';
|
||||
|
||||
class Subscription {
|
||||
final String id;
|
||||
final String billingPlanID;
|
||||
final int validTill;
|
||||
|
||||
Subscription({
|
||||
this.id,
|
||||
this.billingPlanID,
|
||||
this.validTill,
|
||||
});
|
||||
|
||||
Subscription copyWith({
|
||||
String id,
|
||||
String billingPlanID,
|
||||
int validTill,
|
||||
}) {
|
||||
return Subscription(
|
||||
id: id ?? this.id,
|
||||
billingPlanID: billingPlanID ?? this.billingPlanID,
|
||||
validTill: validTill ?? this.validTill,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
'id': id,
|
||||
'billingPlanID': billingPlanID,
|
||||
'validTill': validTill,
|
||||
};
|
||||
}
|
||||
|
||||
factory Subscription.fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
|
||||
return Subscription(
|
||||
id: map['id'],
|
||||
billingPlanID: map['billingPlanID'],
|
||||
validTill: map['validTill'],
|
||||
);
|
||||
}
|
||||
|
||||
String toJson() => json.encode(toMap());
|
||||
|
||||
factory Subscription.fromJson(String source) =>
|
||||
Subscription.fromMap(json.decode(source));
|
||||
|
||||
@override
|
||||
String toString() =>
|
||||
'Subscription(id: $id, billingPlanID: $billingPlanID, validTill: $validTill)';
|
||||
|
||||
@override
|
||||
bool operator ==(Object o) {
|
||||
if (identical(this, o)) return true;
|
||||
|
||||
return o is Subscription &&
|
||||
o.id == id &&
|
||||
o.billingPlanID == billingPlanID &&
|
||||
o.validTill == validTill;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => id.hashCode ^ billingPlanID.hashCode ^ validTill.hashCode;
|
||||
}
|
|
@ -2,17 +2,25 @@ import 'package:logging/logging.dart';
|
|||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/models/billing_plan.dart';
|
||||
import 'package:photos/models/subscription.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class BillingService {
|
||||
BillingService._privateConstructor() {}
|
||||
|
||||
static final BillingService instance = BillingService._privateConstructor();
|
||||
static const subscriptionKey = "subscription";
|
||||
|
||||
final _logger = Logger("BillingService");
|
||||
final _dio = Network.instance.getDio();
|
||||
|
||||
SharedPreferences _prefs;
|
||||
Future<List<BillingPlan>> _future;
|
||||
|
||||
Future<void> init() async {
|
||||
_prefs = await SharedPreferences.getInstance();
|
||||
}
|
||||
|
||||
Future<List<BillingPlan>> getBillingPlans() {
|
||||
if (_future == null) {
|
||||
_future = _dio
|
||||
|
@ -27,4 +35,18 @@ class BillingService {
|
|||
}
|
||||
return _future;
|
||||
}
|
||||
|
||||
Subscription getSubscription() {
|
||||
final jsonValue = _prefs.getString(subscriptionKey);
|
||||
if (jsonValue == null) {
|
||||
return null;
|
||||
} else {
|
||||
return Subscription.fromJson(jsonValue);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> setSubscription(Subscription subscription) async {
|
||||
await _prefs.setString(
|
||||
subscriptionKey, subscription == null ? null : subscription.toJson());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ import 'package:photos/db/public_keys_db.dart';
|
|||
import 'package:photos/events/user_authenticated_event.dart';
|
||||
import 'package:photos/models/key_attributes.dart';
|
||||
import 'package:photos/models/public_key.dart';
|
||||
import 'package:photos/models/subscription.dart';
|
||||
import 'package:photos/services/billing_service.dart';
|
||||
import 'package:photos/ui/ott_verification_page.dart';
|
||||
import 'package:photos/ui/password_entry_page.dart';
|
||||
import 'package:photos/ui/password_reentry_page.dart';
|
||||
|
@ -160,5 +162,10 @@ class UserService {
|
|||
await Configuration.instance
|
||||
.setKeyAttributes(KeyAttributes.fromMap(keyAttributes));
|
||||
}
|
||||
final subscription = response.data["subscription"];
|
||||
if (subscription != null) {
|
||||
await BillingService.instance
|
||||
.setSubscription(Subscription.fromMap(subscription));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue