protected BaseSignInPresenter(IGlobalSignInRepository globalRepository, IRequestHelper requestHandler,
                                      IInjectionHandler injectionHandler, IBaseSignInView view, IBaseCallback callback)
            : base(view)
        {
            RequestHandler   = requestHandler;
            InjectionHandler = injectionHandler;

            _globalRepository = globalRepository;
            _callback         = callback;
        }
 /// <summary>
 /// Catches any exceptions when making a request and returns an appropriate data error to return in the callback
 /// </summary>
 public static async Task SafeCallApi(Func <Task> action, IBaseCallback callback)
 {
     try
     {
         await action( );
     }
     catch (ApiException e)
     {
         callback.OnDataError(e.StatusCode.ToDataError( ));
     }
     catch (Exception)
     {
         callback.OnDataError(Enums.DataError.Connection);
     }
 }
        private async Task CheckIsInstanceUrlChanged(IBaseCallback callback, IBasePresenter basePresenter)
        {
            string storedInstanceUrl = RequestHandler.GetInstanceUrl( );

            ContactUserGet         contactUser        = new ContactUserGet(RequestHandler.GetUserEmail( ), RequestHandler);
            ContactUserGetResponse contactUserRespose = await SafeCallApi(() => _globalSignInApi.GetContactUserInstance(contactUser));

            if (contactUserRespose.IsRequestSuccessful && contactUserRespose.InstanceUrl != storedInstanceUrl)
            {
                //set new url and call injectapi method to use new url
                //RequestHandler.SetInstanceUrl( "http://192.168.1.66:57204/" );
                RequestHandler.SetInstanceUrl(contactUserRespose.InstanceUrl);
                _injectionHandler.InjectApi( );
                await basePresenter.Start( );
            }
            else
            {
                callback.OnDataError(contactUserRespose.DataError);
            }
        }
 public virtual async Task HandleResponse(BaseResponse response, Action successAction, IBaseCallback callback, IBasePresenter basePresenter)
 {
     if (response.IsRequestSuccessful)
     {
         successAction( );
     }
     else if (response.DataError == Enums.DataError.Connection && RequestHandler.IsDeviceConnectedToInternet( ))
     {
         await CheckIsInstanceUrlChanged(callback, basePresenter);
     }
     else
     {
         callback.OnDataError(response.DataError);
     }
 }
 public virtual void HandleResponseForSignIn(BaseResponse response, Action successAction, IBaseCallback callback)
 {
     if (response.IsRequestSuccessful)
     {
         successAction( );
     }
     else
     {
         callback.OnDataError(response.DataError);
     }
 }