From 3700845449e7aa74e5bc461f0fc9c0f856531604 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Sun, 14 May 2017 19:21:12 -0300 Subject: [PATCH] Fix and refactor emailService for notifications by email --- src/js/controllers/onboarding/collectEmail.js | 28 ++++---- .../controllers/preferencesNotifications.js | 33 ++------- src/js/routes.js | 5 +- src/js/services/emailService.js | 70 +++++++++++++------ src/js/services/walletService.js | 6 +- 5 files changed, 75 insertions(+), 67 deletions(-) diff --git a/src/js/controllers/onboarding/collectEmail.js b/src/js/controllers/onboarding/collectEmail.js index a700c3662..53c2af34b 100644 --- a/src/js/controllers/onboarding/collectEmail.js +++ b/src/js/controllers/onboarding/collectEmail.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('collectEmailController', function($scope, $state, $log, $timeout, $http, $httpParamSerializer, $ionicConfig, profileService, configService, walletService, appConfigService) { +angular.module('copayApp.controllers').controller('collectEmailController', function($scope, $state, $log, $timeout, $http, $httpParamSerializer, $ionicConfig, profileService, configService, walletService, appConfigService, emailService) { var wallet, walletId; $scope.data = {}; @@ -48,22 +48,18 @@ angular.module('copayApp.controllers').controller('collectEmailController', func }; $scope.save = function() { - var opts = { - emailFor: {} - }; - opts.emailFor[walletId] = $scope.data.email; - walletService.updateRemotePreferences(wallet, { - email: $scope.data.email, - }, function(err) { - if (err) return; - configService.set(opts, function(err) { - if (err) $log.warn(err); - if ($scope.data.accept) collectEmail(); - $timeout(function() { - $scope.goNextView(); - }, 200); - }); + var enabled = true; // Set enabled email: true + + emailService.updateEmail({ + enabled: enabled, + email: enabled ? $scope.data.email : null }); + + if ($scope.data.accept) collectEmail(); + + $timeout(function() { + $scope.goNextView(); + }, 200); }; $scope.goNextView = function() { diff --git a/src/js/controllers/preferencesNotifications.js b/src/js/controllers/preferencesNotifications.js index c2726cbae..28371e319 100644 --- a/src/js/controllers/preferencesNotifications.js +++ b/src/js/controllers/preferencesNotifications.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('preferencesNotificationsController', function($scope, $log, $timeout, appConfigService, lodash, configService, platformInfo, pushNotificationsService, profileService, emailService) { +angular.module('copayApp.controllers').controller('preferencesNotificationsController', function($scope, $log, $timeout, appConfigService, lodash, configService, platformInfo, pushNotificationsService, emailService) { var updateConfig = function() { var config = configService.getSync(); $scope.appName = appConfigService.nameCase; @@ -13,7 +13,7 @@ angular.module('copayApp.controllers').controller('preferencesNotificationsContr }; $scope.latestEmail = { - value: getLatestEmailConfig() + value: emailService.getEmailIfEnabled() }; $scope.newEmail = lodash.clone($scope.latestEmail); @@ -44,33 +44,19 @@ angular.module('copayApp.controllers').controller('preferencesNotificationsContr $scope.emailNotificationsChange = function() { var opts = { - emailNotifications: { - enabled: $scope.emailNotifications.value - } + enabled: $scope.emailNotifications.value, + email: $scope.newEmail.value }; - configService.set(opts, function(err) { - if (err) $log.debug(err); - }); $scope.latestEmail = { - value: getLatestEmailConfig() + value: emailService.getEmailIfEnabled() }; - $scope.newEmail = lodash.clone($scope.latestEmail); - - if (!$scope.emailNotifications.value) { - emailService.enableEmailNotifications({ - enabled: $scope.emailNotifications.value, - email: null - }); - } - $timeout(function() { - $scope.$apply(); - }); + emailService.updateEmail(opts); }; $scope.save = function() { - emailService.enableEmailNotifications({ + emailService.updateEmail({ enabled: $scope.emailNotifications.value, email: $scope.newEmail.value }); @@ -84,11 +70,6 @@ angular.module('copayApp.controllers').controller('preferencesNotificationsContr }); }; - function getLatestEmailConfig() { - var config = configService.getSync(); - return config.emailFor ? lodash.values(config.emailFor)[0] : null; - }; - $scope.$on("$ionicView.enter", function(event, data) { updateConfig(); }); diff --git a/src/js/routes.js b/src/js/routes.js index b9a31abd4..eb1fb330e 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -1111,7 +1111,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }); }) - .run(function($rootScope, $state, $location, $log, $timeout, startupService, fingerprintService, $ionicHistory, $ionicPlatform, $window, appConfigService, lodash, platformInfo, profileService, uxLanguage, gettextCatalog, openURLService, storageService, scannerService, configService, /* plugins START HERE => */ coinbaseService, glideraService, amazonService, bitpayCardService, applicationService) { + .run(function($rootScope, $state, $location, $log, $timeout, startupService, fingerprintService, $ionicHistory, $ionicPlatform, $window, appConfigService, lodash, platformInfo, profileService, uxLanguage, gettextCatalog, openURLService, storageService, scannerService, configService, emailService, /* plugins START HERE => */ coinbaseService, glideraService, amazonService, bitpayCardService, applicationService) { uxLanguage.init(); @@ -1224,8 +1224,9 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr applicationService.appLockModal('check'); }); }; - // After everything have been loaded, initialize handler URL + // After everything have been loaded $timeout(function() { + emailService.init(); // Update email subscription if necessary openURLService.init(); }, 1000); }); diff --git a/src/js/services/emailService.js b/src/js/services/emailService.js index 3c32e7c56..7cba04fa8 100644 --- a/src/js/services/emailService.js +++ b/src/js/services/emailService.js @@ -1,34 +1,62 @@ 'use strict'; -angular.module('copayApp.services').factory('emailService', function($log, configService, profileService, lodash, walletService) { +angular.module('copayApp.services').factory('emailService', function($log, configService, lodash, walletService, profileService) { var root = {}; - root.enableEmailNotifications = function(opts) { + root.updateEmail = function(opts) { opts = opts || {}; + if (!opts.email) return; var wallets = profileService.getWallets(); - var keys = lodash.map(wallets, function(w) { - return w.credentials.walletId; - }); - - walletService.updateRemotePreferences(wallets, { - email: opts.enabled ? opts.email : null - }); - - var config = configService.getSync(); - if (!config.emailFor) - config.emailFor = {}; - - lodash.each(keys, function(k) { - config.emailFor[k] = opts.email; - }); - - if (!opts.enabled) return; configService.set({ - emailFor: config.emailFor + emailFor: null, // Backward compatibility + emailNotifications: { + enabled: opts.enabled, + email: opts.enabled ? opts.email : null + } }, function(err) { - if (err) $log.debug(err); + if (err) $log.warn(err); + walletService.updateRemotePreferences(wallets); + }); + }; + + root.getEmailIfEnabled = function(config) { + config = config || configService.getSync(); + + if (config.emailNotifications) { + if (!config.emailNotifications.enabled) return; + + if (config.emailNotifications.email) + return config.emailNotifications.email; + } + + if (lodash.isEmpty(config.emailFor)) return; + + // Backward compatibility + var emails = lodash.values(config.emailFor); + for(var i = 0; i < emails.length; i++) { + if (emails[i] !== null && typeof emails[i] !== 'undefined') { + return emails[i]; + } + } + }; + + root.init = function() { + configService.whenAvailable(function(config) { + + if (config.emailNotifications && config.emailNotifications.enabled) { + + // If email already set + if (config.emailNotifications.email) return; + + var currentEmail = root.getEmailIfEnabled(config); + + root.updateEmail({ + enabled: currentEmail ? true : false, + email: currentEmail + }); + } }); }; diff --git a/src/js/services/walletService.js b/src/js/services/walletService.js index 558f422a2..3c6b50e57 100644 --- a/src/js/services/walletService.js +++ b/src/js/services/walletService.js @@ -763,11 +763,13 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim }; // Update this JIC. - var config = configService.getSync().wallet.settings; + var config = configService.getSync(); + var walletSettings = config.wallet.settings; //prefs.email (may come from arguments) + prefs.email = config.emailNotifications.email; prefs.language = uxLanguage.getCurrentLanguage(); - prefs.unit = config.unitCode; + prefs.unit = walletSettings.unitCode; updateRemotePreferencesFor(lodash.clone(clients), prefs, function(err) { if (err) return cb(err);