addSubscription method

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

Add new subscription

Implementation

Future<void> addSubscription(T 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 SiprixVoipSdk().addSubscription(sub) ?? 0;

    _integrateAddedSubscription(sub, saveChanges);

  } on PlatformException catch (err) {
    if(err.code == SiprixVoipSdk.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 {
      _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());
  }
}