From 7f208c193cb036df3325d8bc8c9bd91914d7ac81 Mon Sep 17 00:00:00 2001
From: blavenie <benoit.lavenier@e-is.pro>
Date: Fri, 4 Aug 2017 16:35:51 +0200
Subject: [PATCH] [enh] Login: allow plugin to stop the process (add extension
 point 'loginCheck') [fix] Wot identity: add toast when message sent

---
 www/js/services/wallet-services.js             | 18 +++++++++++++++---
 www/lib/ionic/js/angular/angular-api.js        | 10 +++++++++-
 .../es/js/controllers/wot-controllers.js       |  3 +++
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js
index 4b1d04819..3af70632e 100644
--- a/www/js/services/wallet-services.js
+++ b/www/js/services/wallet-services.js
@@ -136,11 +136,22 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
               };
           }
 
-          // Call extend api
           if (needLogin) {
-            return api.data.raisePromise.login(data);
+            // extend API to check login validity
+            return api.data.raisePromise.loginCheck(data)
+              .catch(function (err) {
+                resetData(); // Reset data if not valid, then exit process
+                throw err;
+              })
+              // Call extend api
+              .then(function() {
+                if (needLogin) {
+                  return api.data.raisePromise.login(data);
+                }
+              });
           }
         })
+
         .then(function() {
           // store wallet if need
           if (csSettings.data.useLocalStorage) {
@@ -1609,7 +1620,8 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
 
     // Register extension points
     api.registerEvent('data', 'init');
-    api.registerEvent('data', 'login');
+    api.registerEvent('data', 'loginCheck'); // allow to stop the login process
+    api.registerEvent('data', 'login'); // executed after login check (cannot stop the login process)
     api.registerEvent('data', 'auth');
     api.registerEvent('data', 'unauth');
     api.registerEvent('data', 'load');
diff --git a/www/lib/ionic/js/angular/angular-api.js b/www/lib/ionic/js/angular/angular-api.js
index bac12860f..ce7526eae 100644
--- a/www/lib/ionic/js/angular/angular-api.js
+++ b/www/lib/ionic/js/angular/angular-api.js
@@ -118,11 +118,19 @@
                   };
                   deferred.checkFinish = function() {
                     if (deferred.count < listenerCount) return;
+                    deferred.count = 0;
                     if (deferred.errors.length) {
-                        deferred.raw.reject(deferred.errors);
+                        if (deferred.errors.length == 1) {
+                            deferred.raw.reject(deferred.errors[0]);
+                        }
+                        else {
+                            deferred.raw.reject(deferred.errors);
+                        }
+                        deferred.errors = [];
                     }
                     else {
                         deferred.raw.resolve(deferred.results);
+                        deferred.results = [];
                     }
                   };
                   deferred.resolve = function(result) {
diff --git a/www/plugins/es/js/controllers/wot-controllers.js b/www/plugins/es/js/controllers/wot-controllers.js
index 749705f4f..0c959ff8b 100644
--- a/www/plugins/es/js/controllers/wot-controllers.js
+++ b/www/plugins/es/js/controllers/wot-controllers.js
@@ -76,6 +76,9 @@ function ESWotIdentityViewController($scope, $ionicPopover, $q, UIUtils, Modals,
         return esModals.showMessageCompose({
           destPub: $scope.formData.pubkey,
           destUid: $scope.formData.name||$scope.formData.uid
+        })
+        .then(function(send) {
+          if (send) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');
         });
       });
   };
-- 
GitLab