Persist subscription plan returned by the server

This commit is contained in:
Vishnu Mohandas 2021-01-06 17:26:03 +05:30
parent cd3eb478be
commit 540cea31df
3 changed files with 94 additions and 0 deletions

View 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;
}

View file

@ -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());
}
}

View file

@ -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));
}
}
}