Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/app/core/signals/remote_signals/wallet.nim
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ proc fromEvent*(T: type WalletSignal, signalType: SignalType, jsonSignal: JsonNo
result.errorCode = errorResponseJsonNode["code"].getStr
result.updatedPrices = initTable[string, float64]()
if event.contains("UpdatedPrices"):
for tokenSymbol, price in event["UpdatedPrices"].pairs():
result.updatedPrices[tokenSymbol] = price.getFloat
for tokenKey, price in event["UpdatedPrices"].pairs():
result.updatedPrices[tokenKey] = price.getFloat
except Exception as e:
error "Error parsing best route: ", err=e.msg
return
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ proc getEnabledChainIds*(self: Controller): seq[int] =
proc getCurrentCurrency*(self: Controller): string =
return self.walletAccountService.getCurrency()

proc getCurrencyFormat*(self: Controller, symbol: string): CurrencyFormatDto =
return self.currencyService.getCurrencyFormat(symbol)
proc getCurrencyFormat*(self: Controller, key: string): CurrencyFormatDto =
return self.currencyService.getCurrencyFormat(key)

proc areTestNetworksEnabled*(self: Controller): bool =
return self.walletAccountService.areTestNetworksEnabled()
Expand Down
20 changes: 10 additions & 10 deletions src/app/modules/main/chat_section/chat_content/input_area/view.nim
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import nimqml, sets
import ./io_interface
import ./preserved_properties
import ./urls_model
import ../../../../../../app/modules/shared_models/link_preview_model as link_preview_model
import ../../../../../../app/modules/shared_models/payment_request_model as payment_request_model
import app/modules/shared_models/link_preview_model as link_preview_model
import app/modules/shared_models/payment_request_model as payment_request_model

QtObject:
type
Expand Down Expand Up @@ -84,7 +84,7 @@ QtObject:
QtProperty[bool] askToEnableLinkPreview:
read = getAskToEnableLinkPreview
notify = askToEnableLinkPreviewChanged

# Currently used to fetch link previews, but could be used elsewhere
proc setText*(self: View, text: string) {.slot.} =
self.delegate.setText(text, true)
Expand All @@ -95,7 +95,7 @@ QtObject:
proc updateLinkPreviewsFromCache*(self: View, urls: seq[string]) =
let linkPreviews = self.delegate.linkPreviewsFromCache(urls)
self.linkPreviewModel.updateLinkPreviews(linkPreviews)

for contactId in self.linkPreviewModel.getContactIds().items:
let contact = self.delegate.getContactDetails(contactId)
if contact.dto.displayName != "":
Expand All @@ -110,25 +110,25 @@ QtObject:

proc reloadLinkPreview(self: View, link: string) {.slot.} =
self.delegate.loadLinkPreviews(@[link])

proc loadLinkPreviews(self: View, links: seq[string]) =
self.delegate.loadLinkPreviews(links)

proc enableLinkPreview(self: View) {.slot.} =
self.delegate.setLinkPreviewEnabled(true)

proc disableLinkPreview(self: View) {.slot.} =
self.delegate.setLinkPreviewEnabled(false)

proc setLinkPreviewEnabledForCurrentMessage(self: View, enabled: bool) {.slot.} =
self.delegate.setLinkPreviewEnabledForThisMessage(enabled)
self.delegate.reloadUnfurlingPlan()

proc removeLinkPreviewData*(self: View, index: int) {.slot.} =
self.linkPreviewModel.removePreviewData(index)

proc addPaymentRequest*(self: View, receiver: string, amount: string, symbol: string, chainId: int) {.slot.} =
self.paymentRequestModel.addPaymentRequest(receiver, amount, symbol, chainId)
proc addPaymentRequest*(self: View, receiver: string, amount: string, tokenKey: string, symbol: string) {.slot.} =
self.paymentRequestModel.addPaymentRequest(receiver, amount, tokenKey, symbol)

proc removePaymentRequestPreviewData*(self: View, index: int) {.slot.} =
self.paymentRequestModel.removeItemWithIndex(index)
Expand Down
43 changes: 7 additions & 36 deletions src/app/modules/main/chat_section/controller.nim
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ import ../../../core/signals/types
import ../../../core/eventemitter
import ../../../core/unique_event_emitter

import backend/collectibles_types

type
Controller* = ref object of RootObj
delegate: io_interface.AccessInterface
Expand Down Expand Up @@ -279,7 +277,7 @@ proc init*(self: Controller) =
let args = CommunityTokenPermissionArgs(e)
if (args.communityId == self.sectionId):
self.delegate.onCommunityTokenPermissionUpdated(args.communityId, args.tokenPermission)

self.events.on(SIGNAL_COMMUNITY_TOKEN_PERMISSION_DELETED) do(e: Args):
let args = CommunityTokenPermissionArgs(e)
if (args.communityId == self.sectionId):
Expand Down Expand Up @@ -702,45 +700,18 @@ proc getMessagesParsedPlainText*(self: Controller, message: MessageDto, communit
proc getColorId*(self: Controller, pubkey: string): int =
procs_from_visual_identity_service.colorIdOf(pubkey)

proc getTokenByKey*(self: Controller, tokenKey: string): TokenItem =
return self.tokenService.getTokenByKey(tokenKey)

proc getTokensByGroupKey*(self: Controller, groupKey: string): seq[TokenItem] =
return self.tokenService.getTokensByGroupKey(groupKey)

proc createOrEditCommunityTokenPermission*(self: Controller, tokenPermission: CommunityTokenPermissionDto) =
self.communityService.createOrEditCommunityTokenPermission(self.sectionId, tokenPermission)

proc deleteCommunityTokenPermission*(self: Controller, permissionId: string) =
self.communityService.deleteCommunityTokenPermission(self.sectionId, permissionId)

proc allAccountsTokenBalance*(self: Controller, symbol: string): float64 =
return self.walletAccountService.allAccountsTokenBalance(symbol)

proc getTokenDecimals*(self: Controller, symbol: string): int =
let asset = self.tokenService.findTokenBySymbol(symbol)
if asset != nil:
return asset.decimals
return 0

# find addresses by tokenKey from UI
# tokenKey can be: symbol for ERC20, or chain+address[+tokenId] for ERC721
proc getContractAddressesForToken*(self: Controller, tokenKey: string): Table[int, string] =
var contractAddresses = initTable[int, string]()
let token = self.tokenService.findTokenBySymbol(tokenKey)
if token != nil:
for addrPerChain in token.addressPerChainId:
# depending on areTestNetworksEnabled (in getNetworkByChainId), contractAddresses will
# contain mainnets or testnets only
let network = self.networkService.getNetworkByChainId(addrPerChain.chainId)
if network == nil:
continue
contractAddresses[addrPerChain.chainId] = addrPerChain.address
let communityToken = self.communityService.getCommunityTokenBySymbol(self.getMySectionId(), tokenKey)
if communityToken.address != "":
contractAddresses[communityToken.chainId] = communityToken.address
if contractAddresses.len == 0:
try:
let chainAndAddress = toContractID(tokenKey)
contractAddresses[chainAndAddress.chainID] = chainAndAddress.address
except Exception:
discard
return contractAddresses

proc getCommunityTokenList*(self: Controller): seq[CommunityTokenDto] =
return self.communityTokensService.getCommunityTokens(self.getMySectionId())

Expand Down
116 changes: 75 additions & 41 deletions src/app/modules/main/chat_section/module.nim
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,37 @@ import ../io_interface as delegate_interface
import view, controller, active_item
import model as chats_model
import item as chat_item
import ../../shared_models/message_item as member_msg_item
import ../../shared_models/message_model as member_msg_model
import ../../shared_models/user_item as user_item
import ../../shared_models/user_model as user_model
import ../../shared_models/[token_permissions_model, token_permission_item, token_criteria_item, token_criteria_model, token_permission_chat_list_model, contacts_utils]

import app/modules/shared_models/message_item as member_msg_item
import app/modules/shared_models/message_model as member_msg_model
import app/modules/shared_models/user_item as user_item
import app/modules/shared_models/user_model as user_model
import app/modules/shared_models/[token_permissions_model, token_permission_item, token_criteria_item, token_criteria_model, token_permission_chat_list_model, contacts_utils]

import chat_content/module as chat_content_module
import chat_content/users/module as users_module

import ../../../global/global_singleton
import ../../../core/eventemitter
import ../../../core/unique_event_emitter
import ../../../core/notifications/details as notification_details
import ../../../../app_service/common/types
import ../../../../app_service/service/settings/service as settings_service
import ../../../../app_service/service/node_configuration/service as node_configuration_service
import ../../../../app_service/service/contacts/service as contact_service
import ../../../../app_service/service/chat/service as chat_service
import ../../../../app_service/service/network/service as network_service
import ../../../../app_service/service/community/service as community_service
import ../../../../app_service/service/message/service as message_service
import ../../../../app_service/service/mailservers/service as mailservers_service
import ../../../../app_service/service/wallet_account/service as wallet_account_service
import ../../../../app_service/service/token/service as token_service
import ../../../../app_service/service/community_tokens/service as community_tokens_service
import ../../../../app_service/service/shared_urls/service as shared_urls_service
import ../../../../app_service/service/contacts/dto/contacts as contacts_dto
import ../../../../app/core/signals/types
import app/global/global_singleton
import app/core/eventemitter
import app/core/unique_event_emitter
import app/core/notifications/details as notification_details
import app_service/common/types
import app_service/common/utils as service_common_utils
import app_service/service/settings/service as settings_service
import app_service/service/node_configuration/service as node_configuration_service
import app_service/service/contacts/service as contact_service
import app_service/service/chat/service as chat_service
import app_service/service/network/service as network_service
import app_service/service/community/service as community_service
import app_service/service/message/service as message_service
import app_service/service/mailservers/service as mailservers_service
import app_service/service/wallet_account/service as wallet_account_service
import app_service/service/token/service as token_service
import app_service/service/community_tokens/service as community_tokens_service
import app_service/service/shared_urls/service as shared_urls_service
import app_service/service/contacts/dto/contacts as contacts_dto
import app/core/signals/types
import backend/collectibles_types

export io_interface

Expand Down Expand Up @@ -369,7 +372,7 @@ method onChatsLoaded*(
sharedUrlsService: shared_urls_service.Service,
) =
self.chatsLoaded = true

self.buildChatSectionUI(community, chats, events, settingsService, nodeConfigurationService,
contactService, chatService, communityService, messageService, mailserversService, sharedUrlsService)

Expand Down Expand Up @@ -451,7 +454,7 @@ method activeItemSet*(self: Module, itemId: string) =
# Should never be here
error "chat-view unexisting item id: ", itemId, methodName="activeItemSet"
return

if not self.chatContentModules[itemId].isLoaded:
self.chatContentModules[itemId].load(chat_item)

Expand Down Expand Up @@ -834,7 +837,7 @@ method onCommunityChannelDeletedOrChatLeft*(self: Module, chatId: string) =
let activeChatId = self.controller.getActiveChatId()
if chatId == activeChatId:
self.setFirstChannelAsActive()

self.updateParentBadgeNotifications()

proc refreshHiddenBecauseNotPermittedState(self: Module) =
Expand Down Expand Up @@ -1479,22 +1482,53 @@ method createOrEditCommunityTokenPermission*(self: Module, permissionId: string,
if tokenPermission.`type` != TokenPermissionType.View and tokenPermission.`type` != TokenPermissionType.ViewAndPost:
tokenPermission.chatIDs = @[]

let emitUnexistingKeyError = proc(key: string) =
error "unexisting key: ", key, methodName="createOrEditCommunityTokenPermission"
let communityId = self.controller.getMySectionId()
if permissionId == "":
self.onCommunityTokenPermissionCreationFailed(communityId)
return
self.onCommunityTokenPermissionUpdateFailed(communityId)

let tokenCriteriaJsonObj = tokenCriteriaJson.parseJson
for tokenCriteria in tokenCriteriaJsonObj:

let tokenKey = tokenCriteria{"key"}.getStr()
let key = tokenCriteria{"key"}.getStr() # can be group key or token key or community token key or collectible key
var contractAddresses = initTable[int, string]()
var tokenCriteriaDto = tokenCriteria.toTokenCriteriaDto
if tokenCriteriaDto.`type` == TokenType.ERC20:
tokenCriteriaDto.decimals = self.controller.getTokenDecimals(tokenKey)

let contractAddresses = self.controller.getContractAddressesForToken(tokenKey)
if contractAddresses.len == 0 and tokenCriteriaDto.`type` != TokenType.ENS:
let communityId = self.controller.getMySectionId()
if permissionId == "":
self.onCommunityTokenPermissionCreationFailed(communityId)
return
self.onCommunityTokenPermissionUpdateFailed(communityId)
return

if tokenCriteriaDto.`type` != TokenType.ENS:
if not service_common_utils.isTokenKey(key):
# handle token group
let tokens = self.controller.getTokensByGroupKey(key)
if tokens.len == 0:
emitUnexistingKeyError(key)
return
for token in tokens:
contractAddresses[token.chainId] = token.address
tokenCriteriaDto.name = token.name
tokenCriteriaDto.symbol = token.symbol
tokenCriteriaDto.decimals = token.decimals
else:
let tokenKey = service_common_utils.communityKeyToTokenKey(key)
var token = self.controller.getTokenByKey(tokenKey)
if token.isNil and tokenCriteriaDto.`type` != TokenType.ENS:
# if tokens is nil, could be that it's a collectible and we figure out the contract addresses from the key
try:
let contractId = toContractID(key)
token = createTokenItem(TokenDto(
address: contractId.address,
chainId: contractId.chainID,
decimals: 0
), TokenType.ERC721)
except Exception:
discard
if token.isNil:
emitUnexistingKeyError(key)
return
contractAddresses[token.chainId] = token.address
tokenCriteriaDto.name = token.name
tokenCriteriaDto.symbol = token.symbol
tokenCriteriaDto.decimals = token.decimals

tokenCriteriaDto.amountInWei = tokenCriteria{"amount"}.getStr
tokenCriteriaDto.contractAddresses = contractAddresses
Expand Down Expand Up @@ -1533,7 +1567,7 @@ method setChannelsPermissionsCheckOngoing*(self: Module, value: bool) =
for id, chat_item in self.view.chatsModel().items():
if self.view.chatsModel().getItemPermissionsRequired(chat_item.id):
self.view.chatsModel().updatePermissionsCheckOngoing(chat_item.id, true)

method onWaitingOnNewCommunityOwnerToConfirmRequestToRejoin*(self: Module) =
self.view.setWaitingOnNewCommunityOwnerToConfirmRequestToRejoin(true)

Expand Down
8 changes: 4 additions & 4 deletions src/app/modules/main/communities/controller.nim
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,9 @@ proc requestCancelDiscordCommunityImport*(self: Controller, id: string) =
proc requestCancelDiscordChannelImport*(self: Controller, discordChannelId: string) =
self.communityService.requestCancelDiscordChannelImport(discordChannelId)

proc getAllTokenGroupsForActiveNetworksMode*(self: Controller): seq[TokenGroupItem] =
return self.tokenService.getAllTokenGroupsForActiveNetworksMode()

proc getCommunityTokens*(self: Controller, communityId: string): seq[CommunityTokenDto] =
self.communityTokensService.getCommunityTokens(communityId)

Expand All @@ -353,9 +356,6 @@ proc getAllCommunityTokens*(self: Controller): seq[CommunityTokenDto] =
proc getNetworkByChainId*(self:Controller, chainId: int): NetworkItem =
self.networksService.getNetworkByChainId(chainId)

proc getTokenBySymbolList*(self: Controller): seq[TokenBySymbolItem] =
return self.tokenService.getTokenBySymbolList()

proc shareCommunityUrlWithChatKey*(self: Controller, communityId: string): string =
return self.communityService.shareCommunityUrlWithChatKey(communityId)

Expand Down Expand Up @@ -449,7 +449,7 @@ proc runSigningOnKeycard*(self: Controller, keyUid: string, path: string, dataTo
var finalDataToSign = status_general.hashMessageForSigning(dataToSign)
if finalDataToSign.startsWith("0x"):
finalDataToSign = finalDataToSign[2..^1]

if pin.len == 0:
let data = SharedKeycarModuleSigningArgs(uniqueIdentifier: UNIQUE_COMMUNITIES_MODULE_SIGNING_IDENTIFIER,
keyUid: keyUid,
Expand Down
Loading