1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-26 06:49:22 +00:00
comunicmobile/lib/helpers/push_notifications_helper.dart

76 lines
2.6 KiB
Dart
Raw Normal View History

2021-04-12 17:26:05 +00:00
import 'package:comunic/helpers/preferences_helper.dart';
2021-04-13 15:21:00 +00:00
import 'package:comunic/helpers/server_config_helper.dart';
2021-04-12 17:26:05 +00:00
import 'package:comunic/models/api_request.dart';
2021-04-13 15:21:00 +00:00
import 'package:comunic/utils/flutter_utils.dart';
2021-04-12 17:26:05 +00:00
/// Push notifications helper
///
/// @author Pierre Hubert
enum PushNotificationsStatus { UNDEFINED, DISABLED, FIREBASE, INDEPENDENT }
const _PushNotificationsAPIMap = {
"undefined": PushNotificationsStatus.UNDEFINED,
"disabled": PushNotificationsStatus.DISABLED,
"firebase": PushNotificationsStatus.FIREBASE,
"independent": PushNotificationsStatus.INDEPENDENT
};
class PushNotificationsHelper {
/// Get cached status of push notifications
static Future<PushNotificationsStatus> getLocalStatus() async {
final pref = await PreferencesHelper.getInstance();
if (!pref.containsKey(PreferencesKeyList.PUSH_NOTIFICATIONS_STATUS))
return PushNotificationsStatus.UNDEFINED;
return _PushNotificationsAPIMap[
pref.getString(PreferencesKeyList.PUSH_NOTIFICATIONS_STATUS)];
}
/// Refresh local status with information from server
///
/// Throws in case of failure
static Future<void> refreshLocalStatus() async {
final response = await APIRequest.withLogin("push_notifications/status")
.execWithThrowGetObject();
2021-04-12 17:34:06 +00:00
var status = _PushNotificationsAPIMap[response["status"]];
if (status == null) status = PushNotificationsStatus.UNDEFINED;
2021-04-12 17:26:05 +00:00
2021-04-12 17:34:06 +00:00
if (status == PushNotificationsStatus.INDEPENDENT) {
// TODO : Invoke plugin to apply new WebSocket URL
2021-04-12 17:26:05 +00:00
}
2021-04-12 17:34:06 +00:00
await (await PreferencesHelper.getInstance()).setString(
PreferencesKeyList.PUSH_NOTIFICATIONS_STATUS, response["status"]);
2021-04-12 17:26:05 +00:00
}
/// Clear local push notifications status
static Future<void> clearLocalStatus() async {
await (await PreferencesHelper.getInstance())
.removeKey(PreferencesKeyList.PUSH_NOTIFICATIONS_STATUS);
// TODO : stop local refresh notification refresh
}
/// Set new push notification status on the server
static Future<void> setNewStatus(
PushNotificationsStatus newStatus, {
String firebaseToken = "",
}) async =>
await APIRequest.withLogin("push_notifications/configure")
.addString(
"status",
_PushNotificationsAPIMap.entries
.firstWhere((e) => e.value == newStatus)
.key)
.addString("firebase_token", firebaseToken)
.execWithThrow();
2021-04-13 15:21:00 +00:00
/// Is true if possible if push notifications are configurable
static bool get arePushNotificationsAvailable =>
srvConfig.notificationsPolicy.hasFirebase ||
(isAndroid && srvConfig.notificationsPolicy.hasFirebase);
2021-04-12 17:26:05 +00:00
}