Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit fb9cdbcc authored by David Luhmer's avatar David Luhmer Committed by GitHub
Browse files

Merge pull request #42 from PhieF/InputStream

Handling inputstream for post and put methods
parents 5ca969c4 71c01eba
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -18,5 +18,6 @@
package com.nextcloud.android.sso.aidl;

interface IInputStreamService {
    ParcelFileDescriptor performNextcloudRequestAndBodyStream(in ParcelFileDescriptor input, in ParcelFileDescriptor requestBodyParcelFileDescriptor);
    ParcelFileDescriptor performNextcloudRequest(in ParcelFileDescriptor input);
}
+34 −6
Original line number Diff line number Diff line
@@ -235,7 +235,6 @@ public class NextcloudAPI {
        return result;
    }


     /**
     * The InputStreams needs to be closed after reading from it
     *
@@ -244,14 +243,27 @@ public class NextcloudAPI {
     * @throws Exception or SSOException
     */
    public InputStream performNetworkRequest(NextcloudRequest request) throws Exception {
        return performNetworkRequest(request, null);
    }

    /**
     * The InputStreams needs to be closed after reading from it
     *
     * @param request {@link NextcloudRequest} request to be executed on server via Files app
     * @param requestBodyInputStream inputstream to be sent to the server
     * @return InputStream answer from server as InputStream
     * @throws Exception or SSOException
     */
    public InputStream performNetworkRequest(NextcloudRequest request, InputStream requestBodyInputStream) throws Exception {
        InputStream os = null;
        Exception exception = null;
        Exception exception;
        try {
            ParcelFileDescriptor output = performAidlNetworkRequest(request);
            ParcelFileDescriptor output = performAidlNetworkRequest(request, requestBodyInputStream);
            os = new ParcelFileDescriptor.AutoCloseInputStream(output);
            exception = deserializeObject(os);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            //e.printStackTrace();
            exception = e;
        }

        // Handle Remote Exceptions
@@ -272,7 +284,7 @@ public class NextcloudAPI {
     * @return
     * @throws IOException
     */
    private ParcelFileDescriptor performAidlNetworkRequest(NextcloudRequest request)
    private ParcelFileDescriptor performAidlNetworkRequest(NextcloudRequest request, InputStream requestBodyInputStream)
            throws IOException, RemoteException, NextcloudApiNotRespondingException {

        // Check if we are on the main thread
@@ -302,7 +314,23 @@ public class NextcloudAPI {
                    }
                });

        ParcelFileDescriptor output = mService.performNextcloudRequest(input);
        ParcelFileDescriptor requestBodyParcelFileDescriptor = null;
        if(requestBodyInputStream != null) {
            requestBodyParcelFileDescriptor = ParcelFileDescriptorUtil.pipeFrom(requestBodyInputStream,
                    new IThreadListener() {
                        @Override
                        public void onThreadFinished(Thread thread) {
                            Log.d(TAG, "copy data from service finished");
                        }
                    });
        }

        ParcelFileDescriptor output;
        if(requestBodyParcelFileDescriptor != null) {
            output = mService.performNextcloudRequestAndBodyStream(input, requestBodyParcelFileDescriptor);
        } else {
            output = mService.performNextcloudRequest(input);
        }

        return output;
    }