You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by jm...@apache.org on 2016/06/10 04:32:14 UTC

[2/4] incubator-guacamole-client git commit: GUACAMOLE-44: Use tunnel REST service for file uploads.

GUACAMOLE-44: Use tunnel REST service for file uploads.


Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/f207b29c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/f207b29c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/f207b29c

Branch: refs/heads/master
Commit: f207b29cc6480c8d2aeaa3be39f5c1594858dbbb
Parents: 4059054
Author: Michael Jumper <mj...@apache.org>
Authored: Sun Jun 5 16:16:53 2016 -0700
Committer: Michael Jumper <mj...@apache.org>
Committed: Thu Jun 9 14:04:01 2016 -0700

----------------------------------------------------------------------
 .../webapp/app/client/types/ManagedClient.js    |  2 +-
 .../app/client/types/ManagedFileUpload.js       | 85 ++++++++++----------
 2 files changed, 44 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/f207b29c/guacamole/src/main/webapp/app/client/types/ManagedClient.js
----------------------------------------------------------------------
diff --git a/guacamole/src/main/webapp/app/client/types/ManagedClient.js b/guacamole/src/main/webapp/app/client/types/ManagedClient.js
index 128cf90..9a28706 100644
--- a/guacamole/src/main/webapp/app/client/types/ManagedClient.js
+++ b/guacamole/src/main/webapp/app/client/types/ManagedClient.js
@@ -519,7 +519,7 @@ angular.module('client').factory('ManagedClient', ['$rootScope', '$injector',
         }
 
         // Start and manage file upload
-        managedClient.uploads.push(ManagedFileUpload.getInstance(managedClient.client, file, object, streamName));
+        managedClient.uploads.push(ManagedFileUpload.getInstance(managedClient, file, object, streamName));
 
     };
 

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/f207b29c/guacamole/src/main/webapp/app/client/types/ManagedFileUpload.js
----------------------------------------------------------------------
diff --git a/guacamole/src/main/webapp/app/client/types/ManagedFileUpload.js b/guacamole/src/main/webapp/app/client/types/ManagedFileUpload.js
index 7fe4f35..06fabbb 100644
--- a/guacamole/src/main/webapp/app/client/types/ManagedFileUpload.js
+++ b/guacamole/src/main/webapp/app/client/types/ManagedFileUpload.js
@@ -24,10 +24,12 @@ angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector'
     function defineManagedFileUpload($rootScope, $injector) {
 
     // Required types
+    var Error                    = $injector.get('Error');
     var ManagedFileTransferState = $injector.get('ManagedFileTransferState');
 
     // Required services
-    var $window = $injector.get('$window');
+    var $window       = $injector.get('$window');
+    var tunnelService = $injector.get('tunnelService');
 
     /**
      * Object which serves as a surrogate interface, encapsulating a Guacamole
@@ -105,8 +107,8 @@ angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector'
      * Creates a new ManagedFileUpload which uploads the given file to the
      * server through the given Guacamole client.
      * 
-     * @param {Guacamole.Client} client
-     *     The Guacamole client through which the file is to be uploaded.
+     * @param {ManagedClient} managedClient
+     *     The ManagedClient through which the file is to be uploaded.
      * 
      * @param {File} file
      *     The file to upload.
@@ -123,10 +125,13 @@ angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector'
      *     A new ManagedFileUpload object which can be used to track the
      *     progress of the upload.
      */
-    ManagedFileUpload.getInstance = function getInstance(client, file, object, streamName) {
+    ManagedFileUpload.getInstance = function getInstance(managedClient, file, object, streamName) {
 
         var managedFileUpload = new ManagedFileUpload();
-        var streamAcknowledged = false;
+
+        // Pull Guacamole.Tunnel and Guacamole.Client from given ManagedClient
+        var client = managedClient.client;
+        var tunnel = managedClient.tunnel;
 
         // Open file for writing
         var stream;
@@ -153,10 +158,8 @@ angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector'
 
         });
 
-        var writer = new Guacamole.FileWriter(stream);
-
-        // Begin upload when stream is acknowledged, notify of any errors
-        writer.onack = function ackReceived(status) {
+        // Upload file once stream is acknowledged
+        stream.onack = function beginUpload(status) {
 
             // Notify of any errors from the Guacamole server
             if (status.isError()) {
@@ -165,50 +168,48 @@ angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector'
                         ManagedFileTransferState.StreamState.ERROR,
                         status.code);
                 });
+                return;
             }
 
-            // Begin sending the requested file once stream is acknowledged
-            else if (!streamAcknowledged) {
-                writer.sendFile(file);
-                streamAcknowledged = true;
-            }
-
-        };
-
-        // Abort and notify if the file cannot be read
-        writer.onerror = function fileReadError(file, offset, error) {
-
-            // Abort transfer
-            writer.sendEnd();
+            // Begin upload
+            tunnelService.uploadToStream(tunnel.uuid, stream, file, function uploadContinuing(length) {
+                $rootScope.$apply(function uploadStreamProgress() {
+                    managedFileUpload.progress = length;
+                });
+            })
 
-            // Upload failed
-            ManagedFileTransferState.setStreamState(managedFileUpload.transferState,
-                ManagedFileTransferState.StreamState.ERROR);
+            // Notify if upload succeeds
+            .then(function uploadSuccessful() {
 
-        };
+                // Upload complete
+                managedFileUpload.progress = file.size;
+                ManagedFileTransferState.setStreamState(managedFileUpload.transferState,
+                    ManagedFileTransferState.StreamState.CLOSED);
 
-        // Notify of upload progress
-        writer.onprogress = function uploadProgressing(file, length) {
+                // Notify of upload completion
+                $rootScope.$broadcast('guacUploadComplete', file.name);
 
-            $rootScope.$apply(function uploadStreamProgress() {
-                managedFileUpload.progress = length;
-            });
+            },
 
-        };
+            // Notify if upload fails
+            function uploadFailed(error) {
 
-        // Clean up and notify when upload completes
-        writer.oncomplete = function uploadComplete(file) {
+                // Use provide status code if the error is coming from the stream
+                if (error.type === Error.Type.STREAM_ERROR)
+                    ManagedFileTransferState.setStreamState(managedFileUpload.transferState,
+                        ManagedFileTransferState.StreamState.ERROR,
+                        error.statusCode);
 
-            // If at end, stop upload
-            writer.sendEnd();
-            managedFileUpload.progress = file.size;
+                // Fail with internal error for all other causes
+                else
+                    ManagedFileTransferState.setStreamState(managedFileUpload.transferState,
+                        ManagedFileTransferState.StreamState.ERROR,
+                        Guacamole.Status.Code.INTERNAL_ERROR);
 
-            // Upload complete
-            ManagedFileTransferState.setStreamState(managedFileUpload.transferState,
-                ManagedFileTransferState.StreamState.CLOSED);
+            });
 
-            // Notify of upload completion
-            $rootScope.$broadcast('guacUploadComplete', file.name);
+            // Ignore all further acks
+            stream.onack = null;
 
         };