state.go
1 package system 2 3 import ( 4 "fmt" 5 6 dogeboxd "github.com/dogeorg/dogeboxd/pkg" 7 ) 8 9 var ( 10 _ dogeboxd.StateManager = &StateManager{} // interface guard 11 current string = "0" // Key for singletons in the database 12 ) 13 14 func NewStateManager(store *dogeboxd.StoreManager) dogeboxd.StateManager { 15 // Set initial state 16 s := &StateManager{ 17 storeManager: store, 18 netStore: dogeboxd.GetTypeStore[dogeboxd.NetworkState](store), 19 dbxStore: dogeboxd.GetTypeStore[dogeboxd.DogeboxState](store), 20 srcStore: dogeboxd.GetTypeStore[dogeboxd.SourceState](store), 21 network: dogeboxd.NetworkState{ 22 CurrentNetwork: nil, 23 PendingNetwork: nil, 24 }, 25 dogebox: dogeboxd.DogeboxState{ 26 InitialState: dogeboxd.DogeboxStateInitialSetup{ 27 HasGeneratedKey: false, 28 HasSetNetwork: false, 29 HasFullyConfigured: false, 30 }, 31 }, 32 source: dogeboxd.SourceState{ 33 SourceConfigs: []dogeboxd.ManifestSourceConfiguration{}, 34 }, 35 } 36 37 // try loading state from the DB 38 net, err := s.netStore.Get(current) 39 if err != nil { 40 fmt.Println(">> couldn't load network state, using default") 41 } else { 42 s.network = net 43 } 44 45 dbx, err := s.dbxStore.Get(current) 46 if err != nil { 47 fmt.Println(">> couldn't load dbx state, using default") 48 } else { 49 s.dogebox = dbx 50 } 51 52 src, err := s.srcStore.Get(current) 53 if err != nil { 54 fmt.Println(">> couldn't load src state, using default") 55 } else { 56 s.source = src 57 } 58 59 return s 60 } 61 62 type StateManager struct { 63 storeManager *dogeboxd.StoreManager 64 netStore *dogeboxd.TypeStore[dogeboxd.NetworkState] 65 dbxStore *dogeboxd.TypeStore[dogeboxd.DogeboxState] 66 srcStore *dogeboxd.TypeStore[dogeboxd.SourceState] 67 network dogeboxd.NetworkState 68 dogebox dogeboxd.DogeboxState 69 source dogeboxd.SourceState 70 } 71 72 func (s *StateManager) Get() dogeboxd.State { 73 return dogeboxd.State{ 74 Network: s.network, 75 Dogebox: s.dogebox, 76 Sources: s.source, 77 } 78 } 79 80 func (s *StateManager) CloseDB() error { 81 return s.storeManager.CloseDB() 82 } 83 84 func (s *StateManager) OpenDB() error { 85 return s.storeManager.OpenDB() 86 } 87 88 func (s *StateManager) SetNetwork(ns dogeboxd.NetworkState) error { 89 s.network = ns 90 return s.netStore.Set(current, s.network) 91 } 92 93 func (s *StateManager) SetDogebox(dbs dogeboxd.DogeboxState) error { 94 s.dogebox = dbs 95 return s.dbxStore.Set(current, s.dogebox) 96 } 97 98 func (s *StateManager) SetSources(state dogeboxd.SourceState) error { 99 s.source = state 100 return s.srcStore.Set(current, s.source) 101 }