aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'app/scripts')
-rw-r--r--app/scripts/metamask-controller.js4
-rw-r--r--app/scripts/migrations/008.js36
-rw-r--r--app/scripts/migrations/index.js1
-rw-r--r--app/scripts/notice-controller.js50
4 files changed, 63 insertions, 28 deletions
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 9f79cf038..785bb7b33 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -85,7 +85,7 @@ module.exports = class MetamaskController extends EventEmitter {
// notices
this.noticeController = new NoticeController({
- configManager: this.configManager,
+ initState: initState.NoticeController,
})
this.noticeController.updateNoticesList()
// to be uncommented when retrieving notices from a remote server.
@@ -189,7 +189,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.messageManager.memStore.getState(),
this.keyringController.memStore.getState(),
this.preferencesController.store.getState(),
- this.noticeController.getState(),
+ this.noticeController.memStore.getState(),
// config manager
this.configManager.getConfig(),
{
diff --git a/app/scripts/migrations/008.js b/app/scripts/migrations/008.js
new file mode 100644
index 000000000..7f6e72ee6
--- /dev/null
+++ b/app/scripts/migrations/008.js
@@ -0,0 +1,36 @@
+const version = 8
+
+/*
+
+This migration breaks out the NoticeController substate
+
+*/
+
+const extend = require('xtend')
+
+module.exports = {
+ version,
+
+ migrate: function (versionedData) {
+ versionedData.meta.version = version
+ try {
+ const state = versionedData.data
+ const newState = transformState(state)
+ versionedData.data = newState
+ } catch (err) {
+ console.warn(`MetaMask Migration #${version}` + err.stack)
+ }
+ return Promise.resolve(versionedData)
+ },
+}
+
+function transformState (state) {
+ const newState = extend(state, {
+ NoticeController: {
+ noticesList: state.noticesList || [],
+ },
+ })
+ delete newState.noticesList
+
+ return newState
+}
diff --git a/app/scripts/migrations/index.js b/app/scripts/migrations/index.js
index d608f5314..a25d3b044 100644
--- a/app/scripts/migrations/index.js
+++ b/app/scripts/migrations/index.js
@@ -18,4 +18,5 @@ module.exports = [
require('./005'),
require('./006'),
require('./007'),
+ require('./008'),
]
diff --git a/app/scripts/notice-controller.js b/app/scripts/notice-controller.js
index c3777b4b1..ba7c68df4 100644
--- a/app/scripts/notice-controller.js
+++ b/app/scripts/notice-controller.js
@@ -1,36 +1,37 @@
const EventEmitter = require('events').EventEmitter
+const extend = require('xtend')
+const ObservableStore = require('obs-store')
const hardCodedNotices = require('../../notices/notices.json')
module.exports = class NoticeController extends EventEmitter {
constructor (opts) {
super()
- this.configManager = opts.configManager
this.noticePoller = null
+ const initState = extend({
+ noticesList: [],
+ }, opts.initState)
+ this.store = new ObservableStore(initState)
+ this.memStore = new ObservableStore({})
+ this.store.subscribe(() => this._updateMemstore())
}
- getState () {
- var lastUnreadNotice = this.getLatestUnreadNotice()
+ getNoticesList () {
+ return this.store.getState().noticesList
+ }
- return {
- lastUnreadNotice: lastUnreadNotice,
- noActiveNotices: !lastUnreadNotice,
- }
+ getUnreadNotices () {
+ const notices = this.getNoticesList()
+ return notices.filter((notice) => notice.read === false)
}
- getNoticesList () {
- var data = this.configManager.getData()
- if ('noticesList' in data) {
- return data.noticesList
- } else {
- return []
- }
+ getLatestUnreadNotice () {
+ const unreadNotices = this.getUnreadNotices()
+ return unreadNotices[unreadNotices.length - 1]
}
- setNoticesList (list) {
- var data = this.configManager.getData()
- data.noticesList = list
- this.configManager.setData(data)
+ setNoticesList (noticesList) {
+ this.store.updateState({ noticesList })
return Promise.resolve(true)
}
@@ -56,14 +57,6 @@ module.exports = class NoticeController extends EventEmitter {
})
}
- getLatestUnreadNotice () {
- var notices = this.getNoticesList()
- var filteredNotices = notices.filter((notice) => {
- return notice.read === false
- })
- return filteredNotices[filteredNotices.length - 1]
- }
-
startPolling () {
if (this.noticePoller) {
clearInterval(this.noticePoller)
@@ -92,5 +85,10 @@ module.exports = class NoticeController extends EventEmitter {
return Promise.resolve(hardCodedNotices)
}
+ _updateMemstore () {
+ const lastUnreadNotice = this.getLatestUnreadNotice()
+ const noActiveNotices = !lastUnreadNotice
+ this.memStore.updateState({ lastUnreadNotice, noActiveNotices })
+ }
}