aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorCsaba Solya <csaba.solya@gmail.com>2018-07-20 19:20:40 +0800
committerCsaba Solya <csaba.solya@gmail.com>2018-07-20 19:20:40 +0800
commita3822b4680a295848f900616e3e154a1e1003a54 (patch)
tree56f6b102b3247534c5c67ac6f35cb3c91b02b3ca /app
parent6921f94bfe11e618dbe586e608a5b6aeaa8feadf (diff)
downloadtangerine-wallet-browser-a3822b4680a295848f900616e3e154a1e1003a54.tar
tangerine-wallet-browser-a3822b4680a295848f900616e3e154a1e1003a54.tar.gz
tangerine-wallet-browser-a3822b4680a295848f900616e3e154a1e1003a54.tar.bz2
tangerine-wallet-browser-a3822b4680a295848f900616e3e154a1e1003a54.tar.lz
tangerine-wallet-browser-a3822b4680a295848f900616e3e154a1e1003a54.tar.xz
tangerine-wallet-browser-a3822b4680a295848f900616e3e154a1e1003a54.tar.zst
tangerine-wallet-browser-a3822b4680a295848f900616e3e154a1e1003a54.zip
add notifications
Diffstat (limited to 'app')
-rw-r--r--app/scripts/controllers/transactions/lib/transaction-notification-manager.js27
-rw-r--r--app/scripts/controllers/transactions/tx-state-manager.js3
-rw-r--r--app/scripts/metamask-controller.js7
-rw-r--r--app/scripts/platforms/extension.js64
4 files changed, 71 insertions, 30 deletions
diff --git a/app/scripts/controllers/transactions/lib/transaction-notification-manager.js b/app/scripts/controllers/transactions/lib/transaction-notification-manager.js
deleted file mode 100644
index 6bdf40b62..000000000
--- a/app/scripts/controllers/transactions/lib/transaction-notification-manager.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const extension = require('extensionizer')
-
-// Confirmed tx
-// Transaction ${tx.nonce} confirmed! View on Etherscan
-
-// Failed tx
-// Transaction ${tx.nonce} failed. (Maybe append tx.error.message)
-
-// Dropped tx
-// A Transaction ${tx.nonce} was dropped, because another transaction with that number was successfully processed.
-
-function showConfirmedNotification (txMeta) {
- extension.notifications.create({
- "type": "basic",
- "title": "Confirmed transaction",
- "iconUrl": extension.extension.getURL('../../../../images/icon-64.png'),
- "message": JSON.stringify(txMeta)
- });
-}
-
-
-/**
-@module
-*/
-module.exports = {
- showConfirmedNotification
-} \ No newline at end of file
diff --git a/app/scripts/controllers/transactions/tx-state-manager.js b/app/scripts/controllers/transactions/tx-state-manager.js
index 72da45913..28a18ca2e 100644
--- a/app/scripts/controllers/transactions/tx-state-manager.js
+++ b/app/scripts/controllers/transactions/tx-state-manager.js
@@ -5,7 +5,6 @@ const ethUtil = require('ethereumjs-util')
const log = require('loglevel')
const txStateHistoryHelper = require('./lib/tx-state-history-helper')
const createId = require('../../lib/random-id')
-const transactionNotificationManager = require('./lib/transaction-notification-manager')
const { getFinalStates } = require('./lib/util')
/**
TransactionStateManager is responsible for the state of a transaction and
@@ -333,8 +332,6 @@ class TransactionStateManager extends EventEmitter {
*/
setTxStatusConfirmed (txId) {
this._setTxStatus(txId, 'confirmed')
- const txMeta = this.getTx(txId)
- transactionNotificationManager.showConfirmedNotification(txMeta)
}
/**
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 450113acf..31156b5b6 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -164,6 +164,13 @@ module.exports = class MetamaskController extends EventEmitter {
})
this.txController.on('newUnapprovedTx', opts.showUnapprovedTx.bind(opts))
+ this.txController.on(`tx:status-update`, (txId, status) => {
+ if (status === 'confirmed' || status === 'failed' || status === 'dropped') {
+ const txMeta = this.txController.txStateManager.getTx(txId)
+ this.platform.showTransactionNotification(txMeta)
+ }
+ })
+
// computed balances (accounting for pending transactions)
this.balancesController = new BalancesController({
accountTracker: this.accountTracker,
diff --git a/app/scripts/platforms/extension.js b/app/scripts/platforms/extension.js
index f5cc255d1..afcc9bbca 100644
--- a/app/scripts/platforms/extension.js
+++ b/app/scripts/platforms/extension.js
@@ -1,4 +1,5 @@
const extension = require('extensionizer')
+const explorerLink = require('etherscan-link').createExplorerLink
class ExtensionPlatform {
@@ -31,6 +32,69 @@ class ExtensionPlatform {
cb(e)
}
}
+
+ showTransactionNotification (txMeta) {
+
+ const status = txMeta.status
+ if (status === 'confirmed') {
+ this._showConfirmedTransaction(txMeta)
+ } else if (status === 'failed') {
+ this._showFailedTransaction(txMeta)
+ } else if (status === 'dropped') {
+ this._showDroppedTransaction(txMeta)
+ }
+ }
+
+ _showConfirmedTransaction (txMeta) {
+
+ this._subscribeToNotificationClicked()
+
+ const url = explorerLink(txMeta.hash, parseInt(txMeta.metamaskNetworkId))
+ const nonce = parseInt(txMeta.txParams.nonce, 16)
+
+ const title = 'Confirmed transaction'
+ const message = `Transaction ${nonce} confirmed! View on EtherScan`
+ this._showNotification(title, message, url)
+ }
+
+ _showFailedTransaction (txMeta) {
+
+ const nonce = parseInt(txMeta.txParams.nonce, 16)
+ const title = 'Failed transaction'
+ const message = `Transaction ${nonce} failed! ${txMeta.err.message}`
+ this._showNotification(title, message)
+ }
+
+ _showDroppedTransaction (txMeta) {
+
+ const nonce = parseInt(txMeta.txParams.nonce, 16)
+ const title = 'Dropped transaction'
+ const message = `Transaction ${nonce} was dropped, because another transaction with that number was successfully processed.`
+ this._showNotification(title, message)
+ }
+
+ _showNotification (title, message, url) {
+ extension.notifications.create(
+ url,
+ {
+ 'type': 'basic',
+ 'title': title,
+ 'iconUrl': extension.extension.getURL('../../images/icon-64.png'),
+ 'message': message,
+ })
+ }
+
+ _subscribeToNotificationClicked () {
+ if (!extension.notifications.onClicked.hasListener(this._viewOnEtherScan)) {
+ extension.notifications.onClicked.addListener(this._viewOnEtherScan)
+ }
+ }
+
+ _viewOnEtherScan (txId) {
+ if (txId.startsWith('http://')) {
+ global.metamaskController.platform.openWindow({ url: txId })
+ }
+ }
}
module.exports = ExtensionPlatform