refactor: extract app constants from status-lib to desktop

This commit is contained in:
Richard Ramos 2021-09-09 15:09:17 -04:00 committed by RichΛrd
parent 2599903ca4
commit a13a0e0d3a
8 changed files with 78 additions and 16 deletions

View File

@ -1,6 +1,5 @@
import NimQml, Tables, json, sequtils, chronicles, strutils, os, strformat import NimQml, Tables, json, sequtils, chronicles, strutils, os, strformat
import status/[status] import status/[status]
import status/constants
import status/utils as status_utils import status/utils as status_utils
import status/chat as status_chat import status/chat as status_chat
import status/messages as status_messages import status/messages as status_messages
@ -18,7 +17,7 @@ import ../utils/image_utils
import web3/[conversions, ethtypes] import web3/[conversions, ethtypes]
import views/message_search/[view_controller] import views/message_search/[view_controller]
import views/[channels_list, message_list, chat_item, reactions, stickers, groups, transactions, communities, community_list, community_item, format_input, ens, activity_notification_list, channel, messages, message_item, gif] import views/[channels_list, message_list, chat_item, reactions, stickers, groups, transactions, communities, community_list, community_item, format_input, ens, activity_notification_list, channel, messages, message_item, gif]
import ../../constants
# TODO: remove me # TODO: remove me
import status/libstatus/chat as libstatus_chat import status/libstatus/chat as libstatus_chat

View File

@ -3,6 +3,7 @@ import status/[signals, status]
import status/types/[account, rpc_response] import status/types/[account, rpc_response]
import view import view
import eventemitter import eventemitter
import ../../constants
type LoginController* = ref object type LoginController* = ref object
status*: Status status*: Status
@ -33,7 +34,7 @@ proc handleNodeLogin(self: LoginController, response: NodeSignal) =
self.status.events.emit("login", AccountArgs(account: self.view.currentAccount.account.toAccount)) self.status.events.emit("login", AccountArgs(account: self.view.currentAccount.account.toAccount))
proc init*(self: LoginController) = proc init*(self: LoginController) =
let nodeAccounts = self.status.accounts.openAccounts() let nodeAccounts = self.status.accounts.openAccounts(STATUSGODIR)
self.status.accounts.nodeAccounts = nodeAccounts self.status.accounts.nodeAccounts = nodeAccounts
for nodeAccount in nodeAccounts: for nodeAccount in nodeAccounts:
self.view.addAccountToList(nodeAccount) self.view.addAccountToList(nodeAccount)

View File

@ -2,7 +2,7 @@ import NimQml, os
import chronicles import chronicles
import profile_info import profile_info
import status/status import status/status
import status/constants as accountConstants import ../../../constants
logScope: logScope:
topics = "profile-settings-view" topics = "profile-settings-view"
@ -35,14 +35,14 @@ QtObject:
else: else:
self.profile.pubKey self.profile.pubKey
return os.joinPath(accountConstants.DATADIR, "qt", pubkey) return os.joinPath(DATADIR, "qt", pubkey)
QtProperty[string] settingsFile: QtProperty[string] settingsFile:
read = getSettingsFile read = getSettingsFile
notify = settingsFileChanged notify = settingsFileChanged
proc getGlobalSettingsFile(self: ProfileSettingsView): string {.slot.} = proc getGlobalSettingsFile(self: ProfileSettingsView): string {.slot.} =
return os.joinPath(accountConstants.DATADIR, "qt", "global") return os.joinPath(DATADIR, "qt", "global")
proc globalSettingsFileChanged*(self: ProfileSettingsView) {.signal.} proc globalSettingsFileChanged*(self: ProfileSettingsView) {.signal.}
@ -53,7 +53,7 @@ QtObject:
proc removeUnknownAccountSettings*(self: ProfileSettingsView) = proc removeUnknownAccountSettings*(self: ProfileSettingsView) =
# Remove old 'unknownAccount' settings file if it was created # Remove old 'unknownAccount' settings file if it was created
self.settingsFileChanged() self.settingsFileChanged()
let unknownSettingsPath = os.joinPath(accountConstants.DATADIR, "qt", UNKNOWN_ACCOUNT) let unknownSettingsPath = os.joinPath(DATADIR, "qt", UNKNOWN_ACCOUNT)
if (not unknownSettingsPath.tryRemoveFile): if (not unknownSettingsPath.tryRemoveFile):
# Only fails if the file exists and an there was an error removing it # Only fails if the file exists and an there was an error removing it
# More info: https://nim-lang.org/docs/os.html#tryRemoveFile%2Cstring # More info: https://nim-lang.org/docs/os.html#tryRemoveFile%2Cstring

View File

@ -4,7 +4,7 @@ import
status/[status, settings], status/[status, settings],
status/wallet as status_wallet, status/wallet as status_wallet,
status/types/[rpc_response] status/types/[rpc_response]
import ../../../../constants
import account_list, account_item import account_list, account_item
logScope: logScope:
@ -40,13 +40,13 @@ QtObject:
proc addAccountsFromSeed*(self: AccountsView, seed: string, password: string, accountName: string, color: string): string {.slot.} = proc addAccountsFromSeed*(self: AccountsView, seed: string, password: string, accountName: string, color: string): string {.slot.} =
try: try:
self.status.wallet.addAccountsFromSeed(seed.strip(), password, accountName, color) self.status.wallet.addAccountsFromSeed(seed.strip(), password, accountName, color, KEYSTOREDIR)
except StatusGoException as e: except StatusGoException as e:
result = StatusGoError(error: e.msg).toJson result = StatusGoError(error: e.msg).toJson
proc addAccountsFromPrivateKey*(self: AccountsView, privateKey: string, password: string, accountName: string, color: string): string {.slot.} = proc addAccountsFromPrivateKey*(self: AccountsView, privateKey: string, password: string, accountName: string, color: string): string {.slot.} =
try: try:
self.status.wallet.addAccountsFromPrivateKey(privateKey, password, accountName, color) self.status.wallet.addAccountsFromPrivateKey(privateKey, password, accountName, color, KEYSTOREDIR)
except StatusGoException as e: except StatusGoException as e:
result = StatusGoError(error: e.msg).toJson result = StatusGoError(error: e.msg).toJson

View File

@ -4,7 +4,7 @@ import
status/[status, settings], status/[status, settings],
status/wallet2 as status_wallet, status/wallet2 as status_wallet,
status/types/[rpc_response] status/types/[rpc_response]
import ../../../../constants
import account_list, account_item import account_list, account_item
logScope: logScope:
@ -40,13 +40,13 @@ QtObject:
proc addAccountsFromSeed*(self: AccountsView, seed: string, password: string, accountName: string, color: string): string {.slot.} = proc addAccountsFromSeed*(self: AccountsView, seed: string, password: string, accountName: string, color: string): string {.slot.} =
try: try:
self.status.wallet2.addAccountsFromSeed(seed.strip(), password, accountName, color) self.status.wallet2.addAccountsFromSeed(seed.strip(), password, accountName, color, KEYSTOREDIR)
except StatusGoException as e: except StatusGoException as e:
result = StatusGoError(error: e.msg).toJson result = StatusGoError(error: e.msg).toJson
proc addAccountsFromPrivateKey*(self: AccountsView, privateKey: string, password: string, accountName: string, color: string): string {.slot.} = proc addAccountsFromPrivateKey*(self: AccountsView, privateKey: string, password: string, accountName: string, color: string): string {.slot.} =
try: try:
self.status.wallet2.addAccountsFromPrivateKey(privateKey, password, accountName, color) self.status.wallet2.addAccountsFromPrivateKey(privateKey, password, accountName, color, KEYSTOREDIR)
except StatusGoException as e: except StatusGoException as e:
result = StatusGoError(error: e.msg).toJson result = StatusGoError(error: e.msg).toJson

60
src/constants.nim Normal file
View File

@ -0,0 +1,60 @@
import os, sequtils, strutils
import # vendor libs
confutils
const sep = when defined(windows): "\\" else: "/"
proc defaultDataDir(): string =
let homeDir = getHomeDir()
let parentDir =
if defined(development):
parentDir(getAppDir())
elif homeDir == "":
getCurrentDir()
elif defined(macosx):
joinPath(homeDir, "Library", "Application Support")
elif defined(windows):
let targetDir = getEnv("LOCALAPPDATA").string
if targetDir == "":
joinPath(homeDir, "AppData", "Local")
else:
targetDir
else:
let targetDir = getEnv("XDG_CONFIG_HOME").string
if targetDir == "":
joinPath(homeDir, ".config")
else:
targetDir
absolutePath(joinPath(parentDir, "Status"))
type StatusDesktopConfig = object
dataDir* {.
defaultValue: defaultDataDir()
desc: "Status Desktop data directory"
abbr: "d" .}: string
# On macOS the first time when a user gets the "App downloaded from the
# internet" warning, and clicks the Open button, the OS passes a unique process
# serial number (PSN) as -psn_... command-line argument, which we remove before
# processing the arguments with nim-confutils.
# Credit: https://github.com/bitcoin/bitcoin/blame/b6e34afe9735faf97d6be7a90fafd33ec18c0cbb/src/util/system.cpp#L383-L389
var cliParams = commandLineParams()
if defined(macosx):
cliParams.keepIf(proc(p: string): bool = not p.startsWith("-psn_"))
let desktopConfig = StatusDesktopConfig.load(cliParams)
let
baseDir = absolutePath(expandTilde(desktopConfig.dataDir))
DATADIR* = baseDir & sep
STATUSGODIR* = joinPath(baseDir, "data") & sep
KEYSTOREDIR* = joinPath(baseDir, "data", "keystore") & sep
TMPDIR* = joinPath(baseDir, "tmp") & sep
LOGDIR* = joinPath(baseDir, "logs") & sep
proc ensureDirectories*(dataDir, tmpDir, logDir: string) =
createDir(dataDir)
createDir(tmpDir)
createDir(logDir)

View File

@ -11,13 +11,13 @@ import app/onboarding/core as onboarding
import app/login/core as login import app/login/core as login
import app/provider/core as provider import app/provider/core as provider
import status/types/[account] import status/types/[account]
import status/constants
import status_go import status_go
import status/status as statuslib import status/status as statuslib
import eventemitter import eventemitter
import app_service/tasks/marathon/mailserver/controller as mailserver_controller import app_service/tasks/marathon/mailserver/controller as mailserver_controller
import app_service/tasks/marathon/mailserver/worker as mailserver_worker import app_service/tasks/marathon/mailserver/worker as mailserver_worker
import app_service/main import app_service/main
import constants
var signalsQObjPointer: pointer var signalsQObjPointer: pointer
@ -28,6 +28,8 @@ proc mainProc() =
if defined(macosx) and defined(production): if defined(macosx) and defined(production):
setCurrentDir(getAppDir()) setCurrentDir(getAppDir())
ensureDirectories(DATADIR, TMPDIR, LOGDIR)
let logFile = fmt"app_{getTime().toUnix}.log" let logFile = fmt"app_{getTime().toUnix}.log"
discard defaultChroniclesStream.output.open(LOGDIR & logFile, fmAppend) discard defaultChroniclesStream.output.open(LOGDIR & logFile, fmAppend)
@ -48,7 +50,7 @@ proc mainProc() =
let appService = newAppService(status, mailserverWorker) let appService = newAppService(status, mailserverWorker)
defer: appService.delete() defer: appService.delete()
status.initNode() status.initNode(STATUSGODIR, KEYSTOREDIR)
let uiScaleFilePath = joinPath(DATADIR, "ui-scale") let uiScaleFilePath = joinPath(DATADIR, "ui-scale")
enableHDPI(uiScaleFilePath) enableHDPI(uiScaleFilePath)

2
vendor/status-lib vendored

@ -1 +1 @@
Subproject commit 7058328bb3da96a01477f6f2f476aa8277bfafe9 Subproject commit efe2790db6cf5e3f01d4b3265d2a671fed70e2d1