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
|
// notices
|
||||||
this.noticeController = new NoticeController({
|
this.noticeController = new NoticeController({
|
||||||
configManager: this.configManager,
|
initState: initState.NoticeController,
|
||||||
})
|
})
|
||||||
this.noticeController.updateNoticesList()
|
this.noticeController.updateNoticesList()
|
||||||
// to be uncommented when retrieving notices from a remote server.
|
// 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.messageManager.memStore.getState(),
|
||||||
this.keyringController.memStore.getState(),
|
this.keyringController.memStore.getState(),
|
||||||
this.preferencesController.store.getState(),
|
this.preferencesController.store.getState(),
|
||||||
this.noticeController.getState(),
|
this.noticeController.memStore.getState(),
|
||||||
// config manager
|
// config manager
|
||||||
this.configManager.getConfig(),
|
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('./005'),
|
||||||
require('./006'),
|
require('./006'),
|
||||||
require('./007'),
|
require('./007'),
|
||||||
|
require('./008'),
|
||||||
]
|
]
|
||||||
|
@ -1,36 +1,37 @@
|
|||||||
const EventEmitter = require('events').EventEmitter
|
const EventEmitter = require('events').EventEmitter
|
||||||
|
const extend = require('xtend')
|
||||||
|
const ObservableStore = require('obs-store')
|
||||||
const hardCodedNotices = require('../../notices/notices.json')
|
const hardCodedNotices = require('../../notices/notices.json')
|
||||||
|
|
||||||
module.exports = class NoticeController extends EventEmitter {
|
module.exports = class NoticeController extends EventEmitter {
|
||||||
|
|
||||||
constructor (opts) {
|
constructor (opts) {
|
||||||
super()
|
super()
|
||||||
this.configManager = opts.configManager
|
|
||||||
this.noticePoller = null
|
this.noticePoller = null
|
||||||
}
|
const initState = extend({
|
||||||
|
noticesList: [],
|
||||||
getState () {
|
}, opts.initState)
|
||||||
var lastUnreadNotice = this.getLatestUnreadNotice()
|
this.store = new ObservableStore(initState)
|
||||||
|
this.memStore = new ObservableStore({})
|
||||||
return {
|
this.store.subscribe(() => this._updateMemstore())
|
||||||
lastUnreadNotice: lastUnreadNotice,
|
|
||||||
noActiveNotices: !lastUnreadNotice,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getNoticesList () {
|
getNoticesList () {
|
||||||
var data = this.configManager.getData()
|
return this.store.getState().noticesList
|
||||||
if ('noticesList' in data) {
|
|
||||||
return data.noticesList
|
|
||||||
} else {
|
|
||||||
return []
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setNoticesList (list) {
|
getUnreadNotices () {
|
||||||
var data = this.configManager.getData()
|
const notices = this.getNoticesList()
|
||||||
data.noticesList = list
|
return notices.filter((notice) => notice.read === false)
|
||||||
this.configManager.setData(data)
|
}
|
||||||
|
|
||||||
|
getLatestUnreadNotice () {
|
||||||
|
const unreadNotices = this.getUnreadNotices()
|
||||||
|
return unreadNotices[unreadNotices.length - 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
setNoticesList (noticesList) {
|
||||||
|
this.store.updateState({ noticesList })
|
||||||
return Promise.resolve(true)
|
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 () {
|
startPolling () {
|
||||||
if (this.noticePoller) {
|
if (this.noticePoller) {
|
||||||
clearInterval(this.noticePoller)
|
clearInterval(this.noticePoller)
|
||||||
@ -92,5 +85,10 @@ module.exports = class NoticeController extends EventEmitter {
|
|||||||
return Promise.resolve(hardCodedNotices)
|
return Promise.resolve(hardCodedNotices)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_updateMemstore () {
|
||||||
|
const lastUnreadNotice = this.getLatestUnreadNotice()
|
||||||
|
const noActiveNotices = !lastUnreadNotice
|
||||||
|
this.memStore.updateState({ lastUnreadNotice, noActiveNotices })
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user