Skip to content

Commit 423109d

Browse files
committed
feat: Add app updater subject and state
1 parent cd82ca4 commit 423109d

9 files changed

Lines changed: 66 additions & 0 deletions

File tree

packages/neuron-ui/src/containers/Main/hooks.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
CurrentNetworkID as CurrentNetworkIDSubject,
1818
ConnectionStatus as ConnectionStatusSubject,
1919
SyncedBlockNumber as SyncedBlockNumberSubject,
20+
AppUpdater as AppUpdaterSubject,
2021
Command as CommandSubject,
2122
} from 'services/subjects'
2223
import { ckbCore, getBlockchainInfo, getTipHeader } from 'services/chain'
@@ -183,6 +184,13 @@ export const useSubscription = ({
183184
})
184185
})
185186

187+
const appUpdaterSubscription = AppUpdaterSubject.subscribe(appUpdaterInfo => {
188+
dispatch({
189+
type: NeuronWalletActions.UpdateAppUpdaterStatus,
190+
payload: appUpdaterInfo,
191+
})
192+
})
193+
186194
const commandSubscription = CommandSubject.subscribe(({ winID, type, payload }: Subject.CommandMetaInfo) => {
187195
if (winID && getWinID() === winID) {
188196
switch (type) {
@@ -223,6 +231,7 @@ export const useSubscription = ({
223231
currentNetworkIDSubscription.unsubscribe()
224232
connectionStatusSubscription.unsubscribe()
225233
syncedBlockNumberSubscription.unsubscribe()
234+
appUpdaterSubscription.unsubscribe()
226235
commandSubscription.unsubscribe()
227236
}
228237
}, [walletID, pageNo, pageSize, keywords, isAllowedToFetchList, history, dispatch])

packages/neuron-ui/src/services/subjects.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const SubjectConstructor = <T>(
2121
| 'connection-status-updated'
2222
| 'synced-block-number-updated'
2323
| 'command'
24+
| 'app-updater-updated'
2425
) => {
2526
return window.ipcRenderer
2627
? {
@@ -45,6 +46,7 @@ export const NetworkList = SubjectConstructor<Subject.NetworkList>('network-list
4546
export const CurrentNetworkID = SubjectConstructor<Subject.CurrentNetworkID>('current-network-id-updated')
4647
export const ConnectionStatus = SubjectConstructor<Subject.ConnectionStatus>('connection-status-updated')
4748
export const SyncedBlockNumber = SubjectConstructor<Subject.BlockNumber>('synced-block-number-updated')
49+
export const AppUpdater = SubjectConstructor<Subject.AppUpdater>('app-updater-updated')
4850
export const Command = SubjectConstructor<Subject.CommandMetaInfo>('command')
4951

5052
export default {
@@ -56,5 +58,6 @@ export default {
5658
CurrentNetworkID,
5759
ConnectionStatus,
5860
SyncedBlockNumber,
61+
AppUpdater,
5962
Command,
6063
}

packages/neuron-ui/src/states/initStates/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@ import chain from './chain'
33
import wallet from './wallet'
44
import settings from './settings'
55
import nervosDAO from './nervosDAO'
6+
import updater from './updater'
67

78
export * from './app'
89
export * from './chain'
910
export * from './wallet'
1011
export * from './settings'
1112
export * from './nervosDAO'
13+
export * from './updater'
1214

1315
const initStates = {
1416
app,
1517
chain,
1618
wallet,
1719
settings,
1820
nervosDAO,
21+
updater,
1922
}
2023

2124
export default initStates
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const appUpdaterState: State.AppUpdater = {
2+
checking: false,
3+
downloadProgress: -1,
4+
version: '',
5+
releaseNotes: '',
6+
}
7+
8+
export default appUpdaterState

packages/neuron-ui/src/states/stateProvider/reducer.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export enum NeuronWalletActions {
2020
UpdateSyncedBlockNumber = 'updateSyncedBlockNumber',
2121
// dao
2222
UpdateNervosDaoData = 'updateNervosDaoData',
23+
// updater
24+
UpdateAppUpdaterStatus = 'updateAppUpdaterStatus',
2325
}
2426
export enum AppActions {
2527
UpdateTransactionID = 'updateTransactionID',
@@ -97,6 +99,12 @@ export const reducer = (
9799
networks,
98100
wallets,
99101
},
102+
updater: {
103+
checking: false,
104+
downloadProgress: -1,
105+
version: '',
106+
releaseNotes: '',
107+
},
100108
}
101109
}
102110
case NeuronWalletActions.UpdateCodeHash: {
@@ -224,6 +232,12 @@ export const reducer = (
224232
},
225233
}
226234
}
235+
case NeuronWalletActions.UpdateAppUpdaterStatus: {
236+
return {
237+
...state,
238+
updater: payload,
239+
}
240+
}
227241
case NeuronWalletActions.UpdateNervosDaoData: {
228242
return {
229243
...state,

packages/neuron-ui/src/types/App/index.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,20 @@ declare namespace State {
184184
records: NervosDAORecord[]
185185
}
186186

187+
interface AppUpdater {
188+
checking: boolean
189+
downloadProgress: number
190+
version: string
191+
releaseNotes: string
192+
}
193+
187194
interface AppWithNeuronWallet {
188195
app: App
189196
chain: Chain
190197
settings: Settings
191198
wallet: Wallet
192199
nervosDAO: NervosDAO
200+
updater: AppUpdater
193201
}
194202
}
195203

packages/neuron-ui/src/types/Subject/index.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ declare namespace Subject {
2929
}
3030
type ConnectionStatus = boolean
3131
type BlockNumber = string
32+
interface AppUpdater {
33+
checking: boolean
34+
downloadProgress: number
35+
version: string
36+
releaseNotes: string
37+
}
3238
}

packages/neuron-wallet/src/controllers/app/subscribe.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { DebouncedCurrentNetworkIDSubject, DebouncedNetworkListSubject } from 'm
77
import { SampledSyncedBlockNumberSubject, DebouncedConnectionStatusSubject } from 'models/subjects/node'
88
import { WalletListSubject, CurrentWalletSubject } from 'models/subjects/wallets'
99
import dataUpdateSubject from 'models/subjects/data-update'
10+
import AppUpdaterSubject from 'models/subjects/app-updater'
1011

1112
interface AppResponder {
1213
sendMessage: (channel: string, arg: any) => void
@@ -52,4 +53,8 @@ export const subscribe = (dispatcher: AppResponder) => {
5253
dataUpdateSubject.next({ dataType: 'current-wallet', actionType: 'update' })
5354
}
5455
})
56+
57+
AppUpdaterSubject.subscribe(params => {
58+
dispatcher.sendMessage('app-updater-updated', params)
59+
})
5560
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Subject } from 'rxjs'
2+
3+
const AppUpdaterSubject = new Subject<{
4+
checking: boolean
5+
downloadProgress: number, // -1: not started, 1: finished, 0~1: downloading
6+
version: string, // "": no update, "v.x.y.z": version v.x.y.z available
7+
releaseNotes: string
8+
}>()
9+
10+
export default AppUpdaterSubject

0 commit comments

Comments
 (0)