aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Serrano <kevgagser@gmail.com>2017-03-10 05:58:42 +0800
committerKevin Serrano <kevgagser@gmail.com>2017-03-10 05:58:42 +0800
commit9f6c04055419f54a730bcbd3f1da4c5f992db94d (patch)
tree666d9433754e6e38c3b9550aee74bb28187a5fb0
parentd270cbc9d2f45b6dae184efbe6c405889ee8cba5 (diff)
downloadtangerine-wallet-browser-9f6c04055419f54a730bcbd3f1da4c5f992db94d.tar.gz
tangerine-wallet-browser-9f6c04055419f54a730bcbd3f1da4c5f992db94d.tar.zst
tangerine-wallet-browser-9f6c04055419f54a730bcbd3f1da4c5f992db94d.zip
Create persistence address book.
-rw-r--r--app/scripts/controllers/address-book.js46
-rw-r--r--app/scripts/metamask-controller.js11
-rw-r--r--ui/app/reducers/metamask.js1
3 files changed, 58 insertions, 0 deletions
diff --git a/app/scripts/controllers/address-book.js b/app/scripts/controllers/address-book.js
new file mode 100644
index 000000000..824a256d1
--- /dev/null
+++ b/app/scripts/controllers/address-book.js
@@ -0,0 +1,46 @@
+const ObservableStore = require('obs-store')
+const extend = require('xtend')
+
+class AddressBookController {
+
+ constructor (opts = {}) {
+ const initState = extend({
+ addressBook: [],
+ }, opts.initState)
+ this.store = new ObservableStore(initState)
+ }
+
+ //
+ // PUBLIC METHODS
+ //
+
+ setAddressList (address, name) {
+ return this.addToAddressList(address, name)
+ .then((addressBook) => {
+ this.store.updateState({
+ addressBook,
+ })
+ return Promise.resolve()
+ })
+ }
+
+ addToAddressList (address, name) {
+ let addressBook = this.getAddressList()
+ let index = addressBook.findIndex((element) => { return element.address === address })
+ if (index !== -1) {
+ addressBook.splice(index, 1)
+ }
+ addressBook.push({
+ address,
+ name,
+ })
+ return Promise.resolve(addressBook)
+ }
+
+ getAddressList () {
+ return this.store.getState().addressBook
+ }
+
+}
+
+module.exports = AddressBookController
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 536891dc6..6cdd8e96f 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -15,6 +15,7 @@ const PreferencesController = require('./controllers/preferences')
const CurrencyController = require('./controllers/currency')
const NoticeController = require('./notice-controller')
const ShapeShiftController = require('./controllers/shapeshift')
+const AddressBookController = require('./controllers/address-book')
const MessageManager = require('./lib/message-manager')
const PersonalMessageManager = require('./lib/personal-message-manager')
const TxManager = require('./transaction-manager')
@@ -50,6 +51,11 @@ module.exports = class MetamaskController extends EventEmitter {
initState: initState.PreferencesController,
})
+ // address book controller
+ this.addressBookController = new AddressBookController({
+ initState: initState.AddressBookController,
+ })
+
// currency controller
this.currencyController = new CurrencyController({
initState: initState.CurrencyController,
@@ -124,6 +130,9 @@ module.exports = class MetamaskController extends EventEmitter {
this.preferencesController.store.subscribe((state) => {
this.store.updateState({ PreferencesController: state })
})
+ this.addressBookController.store.subscribe((state) => {
+ this.store.updateState({ AddressBookController: state })
+ })
this.currencyController.store.subscribe((state) => {
this.store.updateState({ CurrencyController: state })
})
@@ -142,6 +151,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.personalMessageManager.memStore.subscribe(this.sendUpdate.bind(this))
this.keyringController.memStore.subscribe(this.sendUpdate.bind(this))
this.preferencesController.store.subscribe(this.sendUpdate.bind(this))
+ this.addressBookController.store.subscribe(this.sendUpdate.bind(this))
this.currencyController.store.subscribe(this.sendUpdate.bind(this))
this.noticeController.memStore.subscribe(this.sendUpdate.bind(this))
this.shapeshiftController.store.subscribe(this.sendUpdate.bind(this))
@@ -219,6 +229,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.personalMessageManager.memStore.getState(),
this.keyringController.memStore.getState(),
this.preferencesController.store.getState(),
+ this.addressBookController.store.getState(),
this.currencyController.store.getState(),
this.noticeController.memStore.getState(),
// config manager
diff --git a/ui/app/reducers/metamask.js b/ui/app/reducers/metamask.js
index a3c07d977..10d3b0461 100644
--- a/ui/app/reducers/metamask.js
+++ b/ui/app/reducers/metamask.js
@@ -19,6 +19,7 @@ function reduceMetamask (state, action) {
noActiveNotices: true,
lastUnreadNotice: undefined,
frequentRpcList: [],
+ addressBook: [],
}, state.metamask)
switch (action.type) {