migration #8 - break out NoticeController substate

feature/default_network_editable
kumavis 8 years ago
parent 73edfc9f31
commit 8b5e3aa287
  1. 4
      app/scripts/metamask-controller.js
  2. 36
      app/scripts/migrations/008.js
  3. 1
      app/scripts/migrations/index.js
  4. 50
      app/scripts/notice-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(),
{

@ -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
}

@ -18,4 +18,5 @@ module.exports = [
require('./005'),
require('./006'),
require('./007'),
require('./008'),
]

@ -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 })
}
}

Loading…
Cancel
Save