2016-01-07 1 views
1

Est-ce que quelqu'un sait comment annuler un téléchargement en utilisant le plugin $ cordovaFileTransfer avec ionic? J'ai une vue où l'utilisateur a l'option de télécharger un fichier, mais je veux m'assurer que si ils commencent à télécharger le fichier, puis appuyez sur le bouton "retour", il annule le téléchargement et réinitialise fondamentalement le vue. Ce qui semble se produire est quand le téléchargement commence et la vue est à gauche, le téléchargement fait encore sa chose, même si je suis en train de faire quelque chose comme cela dans le code:

// If the user leaves, check if a download is in progress. 
    // - If so, reset the variable, and remove the directory 
    $scope.$on('$ionicView.leave', function() { 
     if($scope.downloading === true) { 
     $scope.downloading = false; 

     $cordovaFile.removeRecursively(cordova.file.dataDirectory, courseDir) 
     .then(function (success) { 
     }); 
     } 
    }); 

J'ai essayé d'appeler $ cordovaFileTransfer.abort() et il me dit qu'il n'y a pas une telle fonction, même si je vois une fonction d'abandon dans le plugin, lui-même. Est-ce que quelqu'un a un aperçu de cela, parce que je pense que ce serait une fonctionnalité commune que les gens recherchent.

Merci!

Répondre

1

Je fini par résoudre ce problème en allant dans le fichier ng-cordova.js directement et en ajoutant la fonction abort comme ceci:

J'ai fait une variable globale appelée pieds à l'intérieur de l'objet usine et retiré la variable instanciation à l'intérieur de la fonction "téléchargement", afin de le rendre global à toutes les fonctions.

/* globals FileTransfer: true */ 
angular.module('ngCordova.plugins.fileTransfer', []) 

    .factory('$cordovaFileTransfer', ['$q', '$timeout', function ($q, $timeout) { 
    var ft = new FileTransfer(); 
    return { 
     download: function (source, filePath, options, trustAllHosts) { 
     var q = $q.defer(); 
     var uri = (options && options.encodeURI === false) ? source : encodeURI(source); 

     if (options && options.timeout !== undefined && options.timeout !== null) { 
      $timeout(function() { 
      ft.abort(); 
      }, options.timeout); 
      options.timeout = null; 
     } 

     ft.onprogress = function (progress) { 
      q.notify(progress); 
     }; 

     q.promise.abort = function() { 
      ft.abort(); 
     }; 

     ft.download(uri, filePath, q.resolve, q.reject, trustAllHosts, options); 
     return q.promise; 
     }, 

     upload: function (server, filePath, options, trustAllHosts) { 
     var q = $q.defer(); 

     var uri = (options && options.encodeURI === false) ? server : encodeURI(server); 

     if (options && options.timeout !== undefined && options.timeout !== null) { 
      $timeout(function() { 
      ft.abort(); 
      }, options.timeout); 
      options.timeout = null; 
     } 

     ft.onprogress = function (progress) { 
      q.notify(progress); 
     }; 

     q.promise.abort = function() { 
      ft.abort(); 
     }; 

     ft.upload(filePath, uri, q.resolve, q.reject, options, trustAllHosts); 
     return q.promise; 
     }, 

     /* Here is the added abort function that will 
     kill the download or upload by calling $cordovaFileTransfer.abort() */ 
     abort: function() { 
     var q = $q.defer; 
     ft.abort(); 
     q.resolve; 
     return q.promise; 
     } 
    }; 
}]); 
+0

Qu'advient-il s'il y a plusieurs téléchargements? –

0

Abandonner est ajouté à une version plus récente de la méthode de téléchargement cordovaFileTransfer $, donc un code comme les œuvres suivantes sans problème si vous mettez à niveau votre ngcordova:

var transferPromise = $cordovaFileTransfer.download(url, targetPath, {}, true); 
transferPromise.then(
    function() { },     
    function() { }, 
    function (progress) { } 
    ); 
. 
. 
. 
transferPromise.abort(); 
+0

Cela ne semble plus être une méthode dans le fichier NGCordova - https://github.com/driftyco/ng-cordova/blob/master/src/plugins/fileTransfer.js –

+1

Salut, c'est là. download (...) renvoie une promesse et abort() est ajouté à cette promesse. vérifier la ligne 25. – Sep

+0

Je ne peux pas obtenir ce à travailler - faire - $ cordovaFileTransfer.fileDownloading = $ cordovaFileTransfer.download (chemin complet, chemin, options, trustHosts) .then ((fonction (résultat) {}), (fonction (erreur) {}), function (progression) {}, false); Et puis plus tard, l'appel de $ cordovaFileTransfer.fileDownloading.abort() ne dit aucune fonction - peut-être que je suis le traitement de la promesse - et le retour de ce ... –