addSubscription method

Future<void> addSubscription(
  1. SubscriptionModel sub, {
  2. bool saveChanges = true,
})

Add new subscription

Implementation

Future<void> addSubscription(
  SubscriptionModel sub, {
  bool saveChanges = true,
}) async {
  _logs?.print(
    'Adding new subscription ext:${sub.toExt} accId:${sub.fromAccId}',
  );

  try {
    //When accUri present - model loaded from json, search accId as it might be changed
    if (sub.accUri.isNotEmpty) {
      sub.fromAccId = _accountsModel.getAccId(sub.accUri);
    } else {
      sub.accUri = _accountsModel.getUri(sub.fromAccId);
    }

    //Add
    sub.mySubscrId = await PjsipConnectFlutter().addSubscription(sub) ?? 0;

    _integrateAddedSubscription(sub, saveChanges);
  } on PlatformException catch (err) {
    if (err.code == PjsipConnectFlutter.eSubscrAlreadyExist.toString()) {
      int existingSubscrId = err.details;
      int idx = _subscriptions.indexWhere(
        (s) => (s.mySubscrId == existingSubscrId),
      );
      if (idx == -1) {
        //This case is possible in Android when:
        // - activity started as usual and initialized SDK Core
        // - activity destroyed, but SDK Core is still running (as Service)
        // - activity started again, loaded saved state and has to sync it
        sub.mySubscrId = existingSubscrId;
        _integrateAddedSubscription(sub, saveChanges);
      } else {
        return Future.error(err.toString());
      }
    } else {
      _logs?.print('Can\'t add subscription: ${err.code} ${err.message} ');
      return Future.error((err.message == null) ? err.code : err.message!);
    }
  } on Exception catch (err) {
    _logs?.print('Can\'t add subscription: ${err.toString()}');
    return Future.error(err.toString());
  }
}