mirror of
https://github.com/status-im/status-lib.git
synced 2025-01-13 05:54:55 +00:00
5285cf7d8c
abstract backend; add mock backend and testing move bookmarks to backend wrapper move bookmarks to backend wrapper move bookmarks to backend wrapper working version cleanup add mock backend add nimble task & test folder add evn.sh make test run; implement bookmark method in the mock add nim unit test removing duplicated statement that was causing tests to run twice re-enable other initilizations in the status object; support specifying backend in the constructor update bookmark test update bookmark test update nimble and makefile update nimble and makefile update bookmarks test remove old browser file
114 lines
4.5 KiB
Nim
114 lines
4.5 KiB
Nim
import statusgo_backend/accounts as statusgo_backend_accounts
|
|
import statusgo_backend/core as statusgo_backend_core
|
|
import statusgo_backend/settings as statusgo_backend_settings
|
|
import chat, accounts, wallet, wallet2, node, network, messages, contacts, profile, stickers, permissions, fleet, settings, mailservers, browser, tokens, provider
|
|
import notifications/os_notifications
|
|
import ../eventemitter
|
|
import bitops, stew/byteutils, chronicles
|
|
import ./types/[setting]
|
|
|
|
import ../backends/backend
|
|
|
|
export chat, accounts, node, messages, contacts, profile, network, permissions, fleet, eventemitter
|
|
|
|
type Status* = ref object
|
|
backend*: BackendWrapper
|
|
events*: EventEmitter
|
|
fleet*: FleetModel
|
|
chat*: ChatModel
|
|
messages*: MessagesModel
|
|
accounts*: AccountModel
|
|
wallet*: WalletModel
|
|
wallet2*: Wallet2Model
|
|
node*: NodeModel
|
|
profile*: ProfileModel
|
|
contacts*: ContactModel
|
|
network*: NetworkModel
|
|
stickers*: StickersModel
|
|
permissions*: PermissionsModel
|
|
settings*: SettingsModel
|
|
mailservers*: MailserversModel
|
|
browser*: BrowserModel
|
|
tokens*: TokensModel
|
|
provider*: ProviderModel
|
|
osnotifications*: OsNotifications
|
|
|
|
proc newStatusInstance*(fleetConfig: string, backendName:string = "statusgo"): Status =
|
|
result = Status()
|
|
result.backend = newBackendWrapperInstance()
|
|
result.backend.loadBackend(backendName)
|
|
result.events = createEventEmitter()
|
|
result.fleet = fleet.newFleetModel(fleetConfig)
|
|
result.chat = chat.newChatModel(result.events)
|
|
result.accounts = accounts.newAccountModel(result.events)
|
|
result.wallet = wallet.newWalletModel(result.events)
|
|
result.wallet.initEvents()
|
|
result.wallet2 = wallet2.newWallet2Model(result.events)
|
|
result.node = node.newNodeModel()
|
|
result.messages = messages.newMessagesModel(result.events)
|
|
result.profile = profile.newProfileModel()
|
|
result.contacts = contacts.newContactModel(result.events)
|
|
result.network = network.newNetworkModel(result.events)
|
|
result.stickers = stickers.newStickersModel(result.events)
|
|
result.permissions = permissions.newPermissionsModel(result.events)
|
|
result.settings = settings.newSettingsModel(result.events)
|
|
result.mailservers = mailservers.newMailserversModel(result.events)
|
|
result.browser = browser.newBrowserModel(result.events, result.backend)
|
|
result.tokens = tokens.newTokensModel(result.events)
|
|
result.provider = provider.newProviderModel(result.events, result.permissions, result.wallet)
|
|
result.osnotifications = newOsNotifications(result.events)
|
|
|
|
proc initNode*(self: Status, statusGoDir, keystoreDir: string) =
|
|
statusgo_backend_accounts.initNode(statusGoDir, keystoreDir)
|
|
|
|
proc startMessenger*(self: Status) {.exportc, dynlib.} =
|
|
statusgo_backend_core.startMessenger()
|
|
|
|
proc reset*(self: Status) {.exportc, dynlib.} =
|
|
# TODO: remove this once accounts are not tracked in the AccountsModel
|
|
self.accounts.reset()
|
|
|
|
# NOT NEEDED self.chat.reset()
|
|
# NOT NEEDED self.wallet.reset()
|
|
# NOT NEEDED self.node.reset()
|
|
# NOT NEEDED self.mailservers.reset()
|
|
# NOT NEEDED self.profile.reset()
|
|
|
|
# TODO: add all resets here
|
|
|
|
proc getNodeVersion*(self: Status): string {.exportc, dynlib.} =
|
|
statusgo_backend_settings.getWeb3ClientVersion()
|
|
|
|
# TODO: duplicated??
|
|
proc saveSetting*(self: Status, setting: Setting, value: string | bool) =
|
|
discard statusgo_backend_settings.saveSetting(setting, value)
|
|
|
|
proc getBloomFilter*(self: Status): string {.exportc, dynlib.} =
|
|
result = statusgo_backend_core.getBloomFilter()
|
|
|
|
proc getBloomFilterBitsSet*(self: Status): int {.exportc, dynlib.} =
|
|
let bloomFilter = statusgo_backend_core.getBloomFilter()
|
|
var bitCount = 0;
|
|
for b in hexToSeqByte(bloomFilter):
|
|
bitCount += countSetBits(b)
|
|
return bitCount
|
|
|
|
# C Helpers
|
|
# ==============================================================================
|
|
# This creates extra functions with a simpler API for C interop. This is to avoid
|
|
# having to manually create nim strings, (we can use cstring) instead, and also
|
|
# because functions that accept more than one type for the same parameter are not
|
|
# exported correctly
|
|
|
|
|
|
proc newStatusInstance*(fleetConfig: cstring): Status {.exportc, dynlib.} =
|
|
newStatusInstance($fleetConfig)
|
|
|
|
proc initNode*(self: Status, statusGoDir, keystoreDir: cstring) {.exportc, dynlib.} =
|
|
self.initNode($statusGoDir, $keystoreDir)
|
|
|
|
proc saveStringSetting*(self: Status, setting: Setting, value: cstring) {.exportc, dynlib.} =
|
|
self.saveSetting(setting, $value)
|
|
|
|
proc saveBoolSetting*(self: Status, setting: Setting, value: bool) {.exportc, dynlib.} =
|
|
self.saveSetting(setting, value) |