Search in sources :

Example 6 with SendTransferRequest

use of run.wallet.iota.api.requests.SendTransferRequest in project run-wallet-android by runplay.

the class SendTransferRequestHandler method handle.

@Override
public ApiResponse handle(ApiRequest request) {
    int notificationId = Utils.createNewID();
    ApiResponse response;
    try {
        List<Transfer> transfers = ((SendTransferRequest) request).prepareTransfers();
        List<Input> inputs = null;
        String remainder = null;
        if (((SendTransferRequest) request).getFromAddresses() != null) {
            inputs = new ArrayList<>();
            for (Address address : ((SendTransferRequest) request).getFromAddresses()) {
                Input inp = new Input(address.getAddress(), address.getValue(), address.getIndex(), address.getSecurity());
                inputs.add(inp);
            }
            remainder = ((SendTransferRequest) request).getRemainder().getAddress();
        }
        try {
            response = new SendTransferResponse(context, ((SendTransferRequest) request).getSeed(), apiProxy.sendTransfer(String.valueOf(Store.getSeedRaw(context, ((SendTransferRequest) request).getSeed())), ((SendTransferRequest) request).getSecurity(), ((SendTransferRequest) request).getDepth(), ((SendTransferRequest) request).getMinWeightMagnitude(), transfers, // inputs
            inputs, // remainder address
            remainder, true, false));
        } catch (Exception e) {
            // currently this just waits 10 seconds and re-tries
            try {
                wait(10000);
            } catch (Exception ew) {
            }
            response = new SendTransferResponse(context, ((SendTransferRequest) request).getSeed(), apiProxy.sendTransfer(String.valueOf(Store.getSeedRaw(context, ((SendTransferRequest) request).getSeed())), ((SendTransferRequest) request).getSecurity(), ((SendTransferRequest) request).getDepth(), ((SendTransferRequest) request).getMinWeightMagnitude(), transfers, // inputs
            inputs, // remainder address
            remainder, true, false));
        }
        AppService.setFastMode();
    } catch (ArgumentException | IllegalAccessError e) {
        // Log.e("SNT","ex: "+e.getMessage());
        NetworkError error = new NetworkError();
        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        if (mNotificationManager != null) {
            mNotificationManager.cancel(notificationId);
        }
        if (e instanceof IllegalStateException) {
            // if (e.getMessage().contains("Sending to a used address.") || e.getMessage().contains("Private key reuse detect!")) {
            final Activity activity = (Activity) context;
            Bundle bundle = new Bundle();
            bundle.putString("error", e.getMessage());
            KeyReuseDetectedDialog dialog = new KeyReuseDetectedDialog();
            dialog.setArguments(bundle);
            dialog.show(activity.getFragmentManager(), null);
            error.setErrorType(NetworkErrorType.KEY_REUSE_ERROR);
        // }
        }
        if (e instanceof ArgumentException) {
            if (e.getMessage().contains("Sending to a used address.") || e.getMessage().contains("Private key reuse detect!")) {
                final Activity activity = (Activity) context;
                Bundle bundle = new Bundle();
                bundle.putString("error", e.getMessage());
                KeyReuseDetectedDialog dialog = new KeyReuseDetectedDialog();
                dialog.setArguments(bundle);
                dialog.show(activity.getFragmentManager(), null);
                error.setErrorType(NetworkErrorType.KEY_REUSE_ERROR);
            }
        }
        if (e instanceof IllegalAccessError) {
            error.setErrorType(NetworkErrorType.ACCESS_ERROR);
            if (((SendTransferRequest) request).getTag().equals(Constants.NEW_ADDRESS_TAG))
                NotificationHelper.responseNotification(context, R.drawable.ic_error, context.getString(R.string.notification_address_attach_to_tangle_blocked_title), notificationId);
            else
                NotificationHelper.responseNotification(context, R.drawable.ic_error, context.getString(R.string.notification_transfer_attach_to_tangle_blocked_title), notificationId);
        } else {
            if (error.getErrorType() != NetworkErrorType.KEY_REUSE_ERROR) {
                error.setErrorType(NetworkErrorType.NETWORK_ERROR);
            }
            if (((SendTransferRequest) request).getValue() == 0 && ((SendTransferRequest) request).getTag().equals(Constants.NEW_ADDRESS_TAG)) {
                NotificationHelper.responseNotification(context, R.drawable.ic_address, context.getString(R.string.notification_attaching_new_address_response_failed_title), notificationId);
            } else {
                NotificationHelper.responseNotification(context, R.drawable.ic_fab_send, context.getString(R.string.notification_send_transfer_response_failed_title), notificationId);
            }
        }
        response = error;
    }
    if (response instanceof SendTransferResponse && ((SendTransferRequest) request).getValue() == 0 && ((SendTransferRequest) request).getTag().equals(Constants.NEW_ADDRESS_TAG)) {
    } else if (response instanceof SendTransferResponse) {
        if (Arrays.asList(((SendTransferResponse) response).getSuccessfully()).contains(true)) {
            if (AppService.isAppStarted()) {
                NotificationHelper.vibrate(context);
            } else {
                NotificationHelper.responseNotification(context, R.drawable.ic_fab_send, context.getString(R.string.notification_send_transfer_response_succeeded_title), notificationId);
            }
        } else {
            NotificationHelper.responseNotification(context, R.drawable.ic_fab_send, context.getString(R.string.notification_send_transfer_response_failed_title), notificationId);
        }
    }
    return response;
}
Also used : SendTransferResponse(run.wallet.iota.api.responses.SendTransferResponse) Address(run.wallet.iota.model.Address) NotificationManager(android.app.NotificationManager) Bundle(android.os.Bundle) NetworkError(run.wallet.iota.api.responses.error.NetworkError) Activity(android.app.Activity) ApiResponse(run.wallet.iota.api.responses.ApiResponse) ArgumentException(jota.error.ArgumentException) SendTransferRequest(run.wallet.iota.api.requests.SendTransferRequest) Input(jota.model.Input) Transfer(jota.model.Transfer) ArgumentException(jota.error.ArgumentException) KeyReuseDetectedDialog(run.wallet.iota.ui.dialog.KeyReuseDetectedDialog)

Aggregations

SendTransferRequest (run.wallet.iota.api.requests.SendTransferRequest)6 TaskManager (run.wallet.iota.api.TaskManager)4 Activity (android.app.Activity)1 NotificationManager (android.app.NotificationManager)1 Intent (android.content.Intent)1 SharedPreferences (android.content.SharedPreferences)1 Bundle (android.os.Bundle)1 View (android.view.View)1 ImageView (android.widget.ImageView)1 LinearLayout (android.widget.LinearLayout)1 TextView (android.widget.TextView)1 ArrayList (java.util.ArrayList)1 ArgumentException (jota.error.ArgumentException)1 Input (jota.model.Input)1 Transfer (jota.model.Transfer)1 ApiRequest (run.wallet.iota.api.requests.ApiRequest)1 AuditAddressesRequest (run.wallet.iota.api.requests.AuditAddressesRequest)1 AutoNudgeRequest (run.wallet.iota.api.requests.AutoNudgeRequest)1 GetAccountDataRequest (run.wallet.iota.api.requests.GetAccountDataRequest)1 GetFirstLoadRequest (run.wallet.iota.api.requests.GetFirstLoadRequest)1