@@ -8,6 +8,10 @@ import AddressService from 'services/addresses'
88import genesisBlockHash from './genesis'
99import InitDatabase from './init-database'
1010import DataUpdateSubject from 'models/subjects/data-update'
11+ import logger from 'utils/logger'
12+ import NodeService from 'services/node'
13+ import NetworksService from 'services/networks'
14+ import { distinctUntilChanged } from 'rxjs/operators'
1115
1216export { genesisBlockHash }
1317
@@ -22,32 +26,49 @@ export interface DatabaseInitParams {
2226 chain : string
2327}
2428
29+ // network switch or network connect
30+ const networkChange = async ( network : NetworkWithID ) => {
31+ await InitDatabase . getInstance ( ) . stopAndWait ( )
32+ const info = await InitDatabase . getInstance ( ) . init ( network )
33+
34+ DataUpdateSubject . next ( {
35+ dataType : 'transaction' ,
36+ actionType : 'update' ,
37+ } )
38+
39+ if ( info !== 'killed' ) {
40+ const databaseInitParams : DatabaseInitParams = {
41+ network,
42+ genesisBlockHash : info . hash ,
43+ chain : info . chain
44+ }
45+ databaseInitSubject . next ( databaseInitParams )
46+ // re init txCount in addresses if switch network
47+ await updateAllAddressesTxCount ( network . remote )
48+ }
49+ }
50+
2551export const databaseInitSubject = new ReplaySubject < DatabaseInitParams > ( 1 )
2652
2753networkSwitchSubject . subscribe ( async ( network : NetworkWithID | undefined ) => {
2854 if ( network ) {
29- // TODO: only switch if genesisHash is different
30-
31- await InitDatabase . getInstance ( ) . stopAndWait ( )
32- const info = await InitDatabase . getInstance ( ) . init ( network )
33-
34- DataUpdateSubject . next ( {
35- dataType : 'transaction' ,
36- actionType : 'update' ,
37- } )
55+ await networkChange ( network )
56+ }
57+ } )
3858
39- if ( info !== 'killed' ) {
40- const databaseInitParams : DatabaseInitParams = {
41- network,
42- genesisBlockHash : info . hash ,
43- chain : info . chain
59+ NodeService
60+ . getInstance ( )
61+ . connectionStatusSubject
62+ . pipe ( distinctUntilChanged ( ) )
63+ . subscribe ( async ( status : boolean ) => {
64+ if ( status && InitDatabase . getInstance ( ) . isUsingPrevious ( ) ) {
65+ const network = NetworksService . getInstance ( ) . getCurrent ( )
66+ logger . debug ( 'networkConnect:' , network )
67+ if ( network ) {
68+ await networkChange ( network )
4469 }
45- databaseInitSubject . next ( databaseInitParams )
46- // re init txCount in addresses if switch network
47- await updateAllAddressesTxCount ( network . remote )
4870 }
49- }
50- } )
71+ } )
5172
5273const loadURL = `file://${ path . join ( __dirname , 'index.html' ) } `
5374
0 commit comments