mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
migration #8 - break out NoticeController substate
This commit is contained in:
parent
73edfc9f31
commit
8b5e3aa287
@ -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(),
|
||||
{
|
||||
|
36
app/scripts/migrations/008.js
Normal file
36
app/scripts/migrations/008.js
Normal file
@ -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
|
||||
}
|
||||
|
||||
getState () {
|
||||
var lastUnreadNotice = this.getLatestUnreadNotice()
|
||||
|
||||
return {
|
||||
lastUnreadNotice: lastUnreadNotice,
|
||||
noActiveNotices: !lastUnreadNotice,
|
||||
}
|
||||
const initState = extend({
|
||||
noticesList: [],
|
||||
}, opts.initState)
|
||||
this.store = new ObservableStore(initState)
|
||||
this.memStore = new ObservableStore({})
|
||||
this.store.subscribe(() => this._updateMemstore())
|
||||
}
|
||||
|
||||
getNoticesList () {
|
||||
var data = this.configManager.getData()
|
||||
if ('noticesList' in data) {
|
||||
return data.noticesList
|
||||
} else {
|
||||
return []
|
||||
}
|
||||
return this.store.getState().noticesList
|
||||
}
|
||||
|
||||
setNoticesList (list) {
|
||||
var data = this.configManager.getData()
|
||||
data.noticesList = list
|
||||
this.configManager.setData(data)
|
||||
getUnreadNotices () {
|
||||
const notices = this.getNoticesList()
|
||||
return notices.filter((notice) => notice.read === false)
|
||||
}
|
||||
|
||||
getLatestUnreadNotice () {
|
||||
const unreadNotices = this.getUnreadNotices()
|
||||
return unreadNotices[unreadNotices.length - 1]
|
||||
}
|
||||
|
||||
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…
Reference in New Issue
Block a user