copay/old/notificationsService.js

116 lines
3.1 KiB
JavaScript

'use strict';
angular.module('copayApp.services')
.factory('notificationService', function profileServiceFactory($filter, notification, lodash, configService, gettext) {
var root = {};
var groupingTime = 5000;
var lastNotificationOnWallet = {};
root.getLast = function(walletId) {
var last = lastNotificationOnWallet[walletId];
if (!last) return null;
return Date.now() - last.ts < groupingTime ? last : null;
};
root.storeLast = function(notificationData, walletId) {
if (notificationData.type == 'NewAddress')
return;
lastNotificationOnWallet[walletId] = {
creatorId: notificationData.creatorId,
type: notificationData.type,
ts: Date.now(),
};
};
root.shouldSkip = function(notificationData, last) {
if (!last) return false;
// rules...
if (last.type === 'NewTxProposal' &&
notificationData.type === 'TxProposalAcceptedBy')
return true;
if (last.type === 'TxProposalFinallyAccepted' &&
notificationData.type === 'NewOutgoingTx')
return true;
if (last.type === 'TxProposalRejectedBy' &&
notificationData.type === 'TxProposalFinallyRejected')
return true;
return false;
};
root.newBWCNotification = function(notificationData, walletId, walletName) {
var last = root.getLast(walletId);
root.storeLast(notificationData, walletId);
if (root.shouldSkip(notificationData, last))
return;
var config = configService.getSync();
config.colorFor = config.colorFor || {};
var color = config.colorFor[walletId] || '#4A90E2';
var name = config.aliasFor[walletId] || walletName;
switch (notificationData.type) {
case 'NewTxProposal':
notification.new(gettext('New Payment Proposal'),
name, {
color: color
});
break;
case 'TxProposalAcceptedBy':
notification.success(gettext('Payment Proposal Signed by Copayer'),
name, {
color: color
});
break;
case 'TxProposalRejectedBy':
notification.error(gettext('Payment Proposal Rejected by Copayer'),
name, {
color: color
});
break;
case 'TxProposalFinallyRejected':
notification.error(gettext('Payment Proposal Rejected'),
name, {
color: color
});
break;
case 'NewOutgoingTx':
notification.sent(gettext('Payment Sent'),
name, {
color: color
});
break;
case 'NewIncomingTx':
notification.funds(gettext('Funds received'),
name, {
color: color
});
break;
case 'ScanFinished':
notification.success(gettext('Scan Finished'),
name, {
color: color
});
break;
case 'NewCopayer':
// No UX notification
break;
case 'BalanceUpdated':
// No UX notification
break;
}
};
return root;
});