status-desktop/src/app/boot/app_controller.nim

384 lines
16 KiB
Nim
Raw Normal View History

import NimQml
import ../../app_service/service/general/service as general_service
import ../../app_service/service/keychain/service as keychain_service
import ../../app_service/service/accounts/service as accounts_service
import ../../app_service/service/contacts/service as contacts_service
2021-10-21 14:37:21 -04:00
import ../../app_service/service/language/service as language_service
import ../../app_service/service/chat/service as chat_service
import ../../app_service/service/community/service as community_service
import ../../app_service/service/message/service as message_service
import ../../app_service/service/token/service as token_service
import ../../app_service/service/transaction/service as transaction_service
import ../../app_service/service/collectible/service as collectible_service
import ../../app_service/service/wallet_account/service as wallet_account_service
import ../../app_service/service/bookmarks/service as bookmark_service
import ../../app_service/service/dapp_permissions/service as dapp_permissions_service
2021-10-22 14:26:11 -04:00
import ../../app_service/service/privacy/service as privacy_service
2021-10-26 10:36:31 -04:00
import ../../app_service/service/provider/service as provider_service
import ../../app_service/service/node/service as node_service
import ../../app_service/service/profile/service as profile_service
import ../../app_service/service/settings/service as settings_service
import ../../app_service/service/stickers/service as stickers_service
import ../../app_service/service/about/service as about_service
import ../../app_service/service/node_configuration/service as node_configuration_service
import ../../app_service/service/network/service as network_service
import ../../app_service/service/activity_center/service as activity_center_service
import ../../app_service/service/saved_address/service as saved_address_service
import ../../app_service/service/devices/service as devices_service
import ../../app_service/service/mailservers/service as mailservers_service
2022-01-13 09:58:42 +01:00
import ../../app_service/service/gif/service as gif_service
import ../../app_service/service/ens/service as ens_service
import ../modules/startup/module as startup_module
import ../modules/main/module as main_module
import ../core/notifications/notifications_manager
import ../global/global_singleton
import ../core/[main]
2022-02-09 10:43:23 +01:00
type
AppController* = ref object of RootObj
statusFoundation: StatusFoundation
notificationsManager*: NotificationsManager
2022-02-09 10:43:23 +01:00
# Global
localAppSettingsVariant: QVariant
localAccountSettingsVariant: QVariant
localAccountSensitiveSettingsVariant: QVariant
userProfileVariant: QVariant
globalUtilsVariant: QVariant
# Services
generalService: general_service.Service
keychainService: keychain_service.Service
accountsService: accounts_service.Service
contactsService: contacts_service.Service
chatService: chat_service.Service
communityService: community_service.Service
messageService: message_service.Service
tokenService: token_service.Service
transactionService: transaction_service.Service
collectibleService: collectible_service.Service
walletAccountService: wallet_account_service.Service
bookmarkService: bookmark_service.Service
dappPermissionsService: dapp_permissions_service.Service
2021-10-26 10:36:31 -04:00
providerService: provider_service.Service
profileService: profile_service.Service
settingsService: settings_service.Service
stickersService: stickers_service.Service
aboutService: about_service.Service
networkService: network_service.Service
activityCenterService: activity_center_service.Service
2021-10-21 14:37:21 -04:00
languageService: language_service.Service
# mnemonicService: mnemonic_service.Service
2021-10-22 14:26:11 -04:00
privacyService: privacy_service.Service
nodeConfigurationService: node_configuration_service.Service
savedAddressService: saved_address_service.Service
devicesService: devices_service.Service
mailserversService: mailservers_service.Service
nodeService: node_service.Service
2022-01-13 09:58:42 +01:00
gifService: gif_service.Service
ensService: ens_service.Service
# Modules
2021-10-19 09:19:03 +02:00
startupModule: startup_module.AccessInterface
mainModule: main_module.AccessInterface
#################################################
# Forward declaration section
proc load(self: AppController)
proc buildAndRegisterLocalAccountSensitiveSettings(self: AppController)
proc buildAndRegisterUserProfile(self: AppController)
# Startup Module Delegate Interface
proc startupDidLoad*(self: AppController)
2021-10-15 21:47:43 +02:00
proc userLoggedIn*(self: AppController)
# Main Module Delegate Interface
proc mainDidLoad*(self: AppController)
#################################################
proc connect(self: AppController) =
self.statusFoundation.events.once("nodeStopped") do(a: Args):
# not sure, but maybe we should take some actions when node stops
discard
proc newAppController*(statusFoundation: StatusFoundation): AppController =
result = AppController()
result.statusFoundation = statusFoundation
result.notificationsManager = newNotificationsManager(statusFoundation.events)
# Global
result.localAppSettingsVariant = newQVariant(singletonInstance.localAppSettings)
result.localAccountSettingsVariant = newQVariant(singletonInstance.localAccountSettings)
result.localAccountSensitiveSettingsVariant = newQVariant(singletonInstance.localAccountSensitiveSettings)
result.userProfileVariant = newQVariant(singletonInstance.userProfile)
result.globalUtilsVariant = newQVariant(singletonInstance.utils)
# Services
result.generalService = general_service.newService()
result.settingsService = settings_service.newService()
2022-02-09 10:43:23 +01:00
result.nodeConfigurationService = node_configuration_service.newService(statusFoundation.fleetConfiguration,
result.settingsService)
result.keychainService = keychain_service.newService(statusFoundation.events)
result.accountsService = accounts_service.newService(statusFoundation.fleetConfiguration)
2022-02-17 10:15:37 +01:00
result.networkService = network_service.newService(statusFoundation.events, result.settingsService)
result.contactsService = contacts_service.newService(
statusFoundation.events, statusFoundation.threadpool, result.settingsService
)
result.chatService = chat_service.newService(statusFoundation.events, result.contactsService)
result.communityService = community_service.newService(statusFoundation.events,
statusFoundation.threadpool, result.chatService)
result.activityCenterService = activity_center_service.newService(statusFoundation.events,
statusFoundation.threadpool, result.chatService)
result.tokenService = token_service.newService(
statusFoundation.events, statusFoundation.threadpool, result.networkService
)
result.collectibleService = collectible_service.newService(result.settingsService)
result.walletAccountService = wallet_account_service.newService(
statusFoundation.events, result.settingsService, result.accountsService, result.tokenService,
result.networkService,
)
result.messageService = message_service.newService(
statusFoundation.events, statusFoundation.threadpool, result.contactsService, result.tokenService, result.walletAccountService, result.networkService
)
result.transactionService = transaction_service.newService(statusFoundation.events, statusFoundation.threadpool,
result.walletAccountService, result.networkService, result.settingsService, result.tokenService)
result.bookmarkService = bookmark_service.newService()
result.profileService = profile_service.newService()
result.stickersService = stickers_service.newService(
statusFoundation.events,
statusFoundation.threadpool,
result.settingsService,
result.walletAccountService,
result.transactionService,
result.networkService,
result.chatService,
result.tokenService
)
2022-02-09 10:43:23 +01:00
result.aboutService = about_service.newService(statusFoundation.events, statusFoundation.threadpool,
result.settingsService)
result.dappPermissionsService = dapp_permissions_service.newService()
2021-10-21 14:37:21 -04:00
result.languageService = language_service.newService()
# result.mnemonicService = mnemonic_service.newService()
2022-02-09 10:43:23 +01:00
result.privacyService = privacy_service.newService(statusFoundation.events, result.settingsService,
result.accountsService)
result.savedAddressService = saved_address_service.newService(statusFoundation.events)
result.devicesService = devices_service.newService(statusFoundation.events, result.settingsService)
2022-02-09 10:43:23 +01:00
result.mailserversService = mailservers_service.newService(statusFoundation.events, statusFoundation.threadpool,
result.settingsService, result.nodeConfigurationService, statusFoundation.fleetConfiguration)
2022-02-09 10:43:23 +01:00
result.nodeService = node_service.newService(statusFoundation.events, statusFoundation.threadpool,
result.settingsService)
2022-01-13 09:58:42 +01:00
result.gifService = gif_service.newService(result.settingsService)
result.ensService = ens_service.newService(statusFoundation.events, statusFoundation.threadpool,
result.settingsService, result.walletAccountService, result.transactionService,
result.networkService, result.tokenService)
2022-03-29 12:21:12 +02:00
result.providerService = provider_service.newService(statusFoundation.events, statusFoundation.threadpool, result.ensService)
# Modules
2021-10-19 09:19:03 +02:00
result.startupModule = startup_module.newModule[AppController](
result,
statusFoundation.events,
2022-02-09 10:43:23 +01:00
result.keychainService,
result.accountsService,
result.generalService
2021-10-19 09:19:03 +02:00
)
result.mainModule = main_module.newModule[AppController](
result,
statusFoundation.events,
result.keychainService,
result.accountsService,
result.chatService,
result.communityService,
result.messageService,
result.tokenService,
result.transactionService,
result.collectibleService,
result.walletAccountService,
result.bookmarkService,
result.profileService,
result.settingsService,
result.contactsService,
result.aboutService,
result.dappPermissionsService,
2021-10-21 18:31:41 -04:00
result.languageService,
# result.mnemonicService,
2021-10-26 10:36:31 -04:00
result.privacyService,
result.providerService,
result.stickersService,
result.activityCenterService,
result.savedAddressService,
result.nodeConfigurationService,
result.devicesService,
result.mailserversService,
2022-01-13 09:58:42 +01:00
result.nodeService,
result.gifService,
result.ensService,
result.networkService,
result.generalService
)
# Do connections
result.connect()
proc delete*(self: AppController) =
singletonInstance.delete
self.notificationsManager.delete
self.keychainService.delete
self.contactsService.delete
self.bookmarkService.delete
2022-01-13 09:58:42 +01:00
self.gifService.delete
self.startupModule.delete
self.mainModule.delete
self.languageService.delete
2022-02-09 10:43:23 +01:00
self.localAppSettingsVariant.delete
self.localAccountSettingsVariant.delete
self.localAccountSensitiveSettingsVariant.delete
self.userProfileVariant.delete
self.globalUtilsVariant.delete
self.accountsService.delete
self.chatService.delete
self.communityService.delete
2021-10-19 09:19:03 +02:00
self.tokenService.delete
self.transactionService.delete
self.collectibleService.delete
self.walletAccountService.delete
self.aboutService.delete
self.networkService.delete
self.activityCenterService.delete
self.dappPermissionsService.delete
2021-10-26 10:36:31 -04:00
self.providerService.delete
self.nodeConfigurationService.delete
self.nodeService.delete
self.settingsService.delete
self.stickersService.delete
self.savedAddressService.delete
self.devicesService.delete
self.mailserversService.delete
self.messageService.delete
self.privacyService.delete
self.profileService.delete
self.generalService.delete
self.ensService.delete
2022-01-26 20:31:45 +01:00
self.gifService.delete
proc startupDidLoad*(self: AppController) =
singletonInstance.engine.setRootContextProperty("localAppSettings", self.localAppSettingsVariant)
singletonInstance.engine.setRootContextProperty("localAccountSettings", self.localAccountSettingsVariant)
2022-03-01 20:14:20 -04:00
singletonInstance.engine.setRootContextProperty("globalUtils", self.globalUtilsVariant)
singletonInstance.engine.load(newQUrl("qrc:///main.qml"))
# We need to init a language service once qml is loaded
self.languageService.init()
# We need this to set app width/height appropriatelly on the app start.
self.startupModule.startUpUIRaised()
proc mainDidLoad*(self: AppController) =
self.startupModule.moveToAppState()
2021-10-16 21:03:01 +02:00
self.mainModule.checkForStoringPassword()
proc start*(self: AppController) =
self.keychainService.init()
self.generalService.init()
self.accountsService.init()
2022-02-09 10:43:23 +01:00
self.startupModule.load()
proc load(self: AppController) =
self.notificationsManager.init()
self.settingsService.init()
self.nodeConfigurationService.init()
self.contactsService.init()
self.chatService.init()
self.messageService.init()
self.communityService.init()
self.bookmarkService.init()
self.dappPermissionsService.init()
2021-10-26 10:36:31 -04:00
self.providerService.init()
self.transactionService.init()
self.stickersService.init()
self.activityCenterService.init()
self.savedAddressService.init()
self.aboutService.init()
self.devicesService.init()
self.mailserversService.init()
self.ensService.init()
2022-01-26 20:31:45 +01:00
self.gifService.init()
singletonInstance.engine.setRootContextProperty("globalUtils", self.globalUtilsVariant)
2022-03-01 20:14:20 -04:00
let pubKey = self.settingsService.getPublicKey()
singletonInstance.localAccountSensitiveSettings.setFileName(pubKey)
singletonInstance.engine.setRootContextProperty("localAccountSensitiveSettings", self.localAccountSensitiveSettingsVariant)
2022-02-09 10:43:23 +01:00
self.buildAndRegisterLocalAccountSensitiveSettings()
self.buildAndRegisterUserProfile()
self.networkService.init()
self.tokenService.init()
self.walletAccountService.init()
# load main module
self.mainModule.load(
self.statusFoundation.events,
self.settingsService,
self.contactsService,
self.chatService,
self.communityService,
2022-01-13 09:58:42 +01:00
self.messageService,
self.gifService,
self.mailserversService,
)
2021-10-15 21:47:43 +02:00
proc userLoggedIn*(self: AppController) =
self.generalService.startMessenger()
self.load()
# Once user is logged in and main module is loaded we need to check if it gets here importing mnemonic or not
# and delete mnemonic in the first case.
let importedAccount = self.accountsService.getImportedAccount()
if(importedAccount.isValid()):
self.privacyService.removeMnemonic()
2022-02-09 10:43:23 +01:00
proc buildAndRegisterLocalAccountSensitiveSettings(self: AppController) =
var pubKey = self.settingsService.getPublicKey()
singletonInstance.localAccountSensitiveSettings.setFileName(pubKey)
singletonInstance.engine.setRootContextProperty("localAccountSensitiveSettings", self.localAccountSensitiveSettingsVariant)
2022-02-09 10:43:23 +01:00
proc buildAndRegisterUserProfile(self: AppController) =
let pubKey = self.settingsService.getPublicKey()
let preferredName = self.settingsService.getPreferredName()
2022-03-01 20:14:20 -04:00
let displayName = self.settingsService.getDisplayName()
let ensUsernames = self.settingsService.getEnsUsernames()
let firstEnsName = if (ensUsernames.len > 0): ensUsernames[0] else: ""
let sendUserStatus = self.settingsService.getSendStatusUpdates()
## This is still not in use. Read a comment in UserProfile.
## let currentUserStatus = self.settingsService.getCurrentUserStatus()
let loggedInAccount = self.accountsService.getLoggedInAccount()
var thumbnail, large: string
for img in loggedInAccount.images:
if(img.imgType == "large"):
large = img.uri
elif(img.imgType == "thumbnail"):
thumbnail = img.uri
let meAsContact = self.contactsService.getContactById(pubKey)
singletonInstance.userProfile.setFixedData(loggedInAccount.name, loggedInAccount.keyUid, pubKey)
2022-03-01 20:14:20 -04:00
singletonInstance.userProfile.setDisplayName(displayName)
singletonInstance.userProfile.setPreferredName(preferredName)
singletonInstance.userProfile.setEnsName(meAsContact.name)
singletonInstance.userProfile.setFirstEnsName(firstEnsName)
singletonInstance.userProfile.setThumbnailImage(thumbnail)
singletonInstance.userProfile.setLargeImage(large)
singletonInstance.userProfile.setUserStatus(sendUserStatus)
2022-01-26 20:31:45 +01:00
singletonInstance.engine.setRootContextProperty("userProfile", self.userProfileVariant)