watchAsset returns result wether token was added or not

This commit is contained in:
Esteban MIno 2018-08-20 22:32:14 -03:00
parent 81cd29df43
commit 68c1b4c170
3 changed files with 30 additions and 10 deletions

View File

@ -256,7 +256,7 @@ function setupController (initState, initLangCode) {
showUnconfirmedMessage: triggerUi,
unlockAccountMessage: triggerUi,
showUnapprovedTx: triggerUi,
showAddTokenUi: triggerUi,
showWatchAssetUi: showWatchAssetUi,
// initial state
initState,
// initial locale code
@ -444,6 +444,24 @@ function triggerUi () {
})
}
/**
* Opens the browser popup for user confirmation of watchAsset
* then it waits until user interact with the UI
*/
function showWatchAssetUi () {
triggerUi()
return new Promise(
(resolve) => {
var interval = setInterval(() => {
if (!notificationIsOpen) {
clearInterval(interval)
resolve()
}
}, 1000)
}
)
}
// On first install, open a window to MetaMask website to how-it-works.
extension.runtime.onInstalled.addListener(function (details) {
if ((details.reason === 'install') && (!METAMASK_DEBUG)) {

View File

@ -41,7 +41,7 @@ class PreferencesController {
this.diagnostics = opts.diagnostics
this.network = opts.network
this.store = new ObservableStore(initState)
this.showAddTokenUi = opts.showAddTokenUi
this.showWatchAssetUi = opts.showWatchAssetUi
this._subscribeProviderType()
}
// PUBLIC METHODS
@ -82,13 +82,12 @@ class PreferencesController {
* @param {Function} - next
* @param {Function} - end
*/
requestAddToken (req, res, next, end) {
async requestWatchAsset (req, res, next, end) {
if (req.method === 'metamask_watchAsset') {
const { type, options } = req.params
switch (type) {
case 'ERC20':
this._handleWatchAssetERC20(options, res)
res.result = options.address
res.result = await this._handleWatchAssetERC20(options)
end()
break
default:
@ -521,17 +520,20 @@ class PreferencesController {
/**
* Handle the suggestion of an ERC20 asset through `watchAsset`
* *
* @param {Object} options Parameters according to addition of ERC20 token
* @param {Boolean} assetAdded Boolean according to addition of ERC20 token
*
*/
_handleWatchAssetERC20 (options) {
async _handleWatchAssetERC20 (options) {
// TODO handle bad parameters
const { address, symbol, decimals, imageUrl } = options
const rawAddress = address
this._validateSuggestedTokenParams({ rawAddress, symbol, decimals })
const tokenOpts = { rawAddress, decimals, symbol, imageUrl }
this.addSuggestedToken(tokenOpts)
this.showAddTokenUi()
return this.showWatchAssetUi().then(() => {
const tokenAddresses = this.getTokens().filter(token => token.address === normalizeAddress(rawAddress))
return tokenAddresses.length > 0
})
}
}

View File

@ -88,7 +88,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.preferencesController = new PreferencesController({
initState: initState.PreferencesController,
initLangCode: opts.initLangCode,
showAddTokenUi: opts.showAddTokenUi,
showWatchAssetUi: opts.showWatchAssetUi,
network: this.networkController,
})
@ -1241,7 +1241,7 @@ module.exports = class MetamaskController extends EventEmitter {
engine.push(createOriginMiddleware({ origin }))
engine.push(createLoggerMiddleware({ origin }))
engine.push(filterMiddleware)
engine.push(this.preferencesController.requestAddToken.bind(this.preferencesController))
engine.push(this.preferencesController.requestWatchAsset.bind(this.preferencesController))
engine.push(createProviderMiddleware({ provider: this.provider }))
// setup connection