diff --git a/src/app/modules/main/profile_section/profile/controller.nim b/src/app/modules/main/profile_section/profile/controller.nim index af11275cc2..e4afc26311 100644 --- a/src/app/modules/main/profile_section/profile/controller.nim +++ b/src/app/modules/main/profile_section/profile/controller.nim @@ -80,32 +80,32 @@ proc init*(self: Controller) = let args = CommunitiesArgs(e) self.delegate.onCommunitiesUpdated(args.communities) -proc storeIdentityImage*(self: Controller, address: string, image: string, aX: int, aY: int, bX: int, bY: int) = - discard self.profileService.storeIdentityImage(address, image, aX, aY, bX, bY) +proc storeIdentityImage*(self: Controller, address: string, image: string, aX: int, aY: int, bX: int, bY: int): bool = + len(self.profileService.storeIdentityImage(address, image, aX, aY, bX, bY)) > 0 -proc deleteIdentityImage*(self: Controller, address: string) = +proc deleteIdentityImage*(self: Controller, address: string): bool = self.profileService.deleteIdentityImage(address) -proc setDisplayName*(self: Controller, displayName: string) = +proc setDisplayName*(self: Controller, displayName: string): bool = self.profileService.setDisplayName(displayName) proc getSocialLinks*(self: Controller): SocialLinks = - return self.settingsService.getSocialLinks() + self.settingsService.getSocialLinks() proc getCommunityById*(self: Controller, id: string): CommunityDto = - return self.communityService.getCommunityById(id) + self.communityService.getCommunityById(id) proc getAccountByAddress*(self: Controller, address: string): WalletAccountDto = - return self.walletAccountService.getAccountByAddress(address) + self.walletAccountService.getAccountByAddress(address) proc getWalletAccounts*(self: Controller): seq[wallet_account_service.WalletAccountDto] = - return self.walletAccountService.getWalletAccounts(true) + self.walletAccountService.getWalletAccounts(true) proc getChainIds*(self: Controller): seq[int] = - return self.networkService.getNetworks().map(n => n.chainId) + self.networkService.getNetworks().map(n => n.chainId) proc getEnabledChainIds*(self: Controller): seq[int] = - return self.networkService.getNetworks().filter(n => n.enabled).map(n => n.chainId) + self.networkService.getNetworks().filter(n => n.enabled).map(n => n.chainId) proc setSocialLinks*(self: Controller, links: SocialLinks) = self.settingsService.setSocialLinks(links) @@ -139,4 +139,4 @@ proc requestCommunityInfo*(self: Controller, communityId: string, shard: Shard) self.communityService.requestCommunityInfo(communityId, shard) proc getTokenBySymbolList*(self: Controller): var seq[TokenBySymbolItem] = - return self.tokenService.getTokenBySymbolList() + self.tokenService.getTokenBySymbolList() diff --git a/src/app/modules/main/profile_section/profile/io_interface.nim b/src/app/modules/main/profile_section/profile/io_interface.nim index c9eea39042..cf36f2d7ad 100644 --- a/src/app/modules/main/profile_section/profile/io_interface.nim +++ b/src/app/modules/main/profile_section/profile/io_interface.nim @@ -55,7 +55,7 @@ method onProfileShowcasePreferencesSaveSucceeded*(self: AccessInterface) {.base. method onProfileShowcasePreferencesSaveFailed*(self: AccessInterface) {.base.} = raise newException(ValueError, "No implementation available") -method saveProfileIdentityInfo*(self: AccessInterface, identity: IdentitySaveData) {.base.} = +method saveProfileIdentity*(self: AccessInterface, identity: IdentitySaveData) {.base.} = raise newException(ValueError, "No implementation available") method saveProfileShowcasePreferences*(self: AccessInterface, showcase: ShowcaseSaveData) {.base.} = diff --git a/src/app/modules/main/profile_section/profile/module.nim b/src/app/modules/main/profile_section/profile/module.nim index bd594ccc4d..5cfa66f4eb 100644 --- a/src/app/modules/main/profile_section/profile/module.nim +++ b/src/app/modules/main/profile_section/profile/module.nim @@ -127,7 +127,7 @@ method getProfileShowcaseEntriesLimit*(self: Module): int = method setIsFirstShowcaseInteraction(self: Module) = singletonInstance.localAccountSettings.setIsFirstShowcaseInteraction(false) -proc storeIdentityImage*(self: Module, identityImage: IdentityImage) = +proc storeIdentityImage*(self: Module, identityImage: IdentityImage): bool = let keyUid = singletonInstance.userProfile.getKeyUid() let image = singletonInstance.utils.formatImagePath(identityImage.source) # FIXME the function to get the file size is messed up @@ -136,17 +136,21 @@ proc storeIdentityImage*(self: Module, identityImage: IdentityImage) = # return "Max file size is 20MB" self.controller.storeIdentityImage(keyUid, image, identityImage.aX, identityImage.aY, identityImage.bX, identityImage.bY) -proc deleteIdentityImage*(self: Module) = +proc deleteIdentityImage*(self: Module): bool = let keyUid = singletonInstance.userProfile.getKeyUid() self.controller.deleteIdentityImage(keyUid) -method saveProfileIdentityInfo*(self: Module, identity: IdentitySaveData) = - self.controller.setDisplayName(identity.displayName) - discard self.controller.setBio(identity.bio) +method saveProfileIdentity*(self: Module, identity: IdentitySaveData) = + var ok = self.controller.setDisplayName(identity.displayName) + ok = ok and self.controller.setBio(identity.bio) if identity.image != nil: - self.storeIdentityImage(identity.image) + ok = ok and self.storeIdentityImage(identity.image) else: - self.deleteIdentityImage() + ok = ok and self.deleteIdentityImage() + if ok: + self.view.emitProfileIdentitySaveSucceededSignal() + else: + self.view.emitProfileIdentitySaveFailedSignal() method saveProfileShowcasePreferences*(self: Module, showcase: ShowcaseSaveData) = # TODO: remove this check within old api diff --git a/src/app/modules/main/profile_section/profile/view.nim b/src/app/modules/main/profile_section/profile/view.nim index 7ea84e9f8c..dadf237f88 100644 --- a/src/app/modules/main/profile_section/profile/view.nim +++ b/src/app/modules/main/profile_section/profile/view.nim @@ -197,6 +197,14 @@ QtObject: proc emitBioChangedSignal*(self: View) = self.bioChanged() + proc profileIdentitySaveSucceeded*(self: View) {.signal.} + proc emitProfileIdentitySaveSucceededSignal*(self: View) = + self.profileIdentitySaveSucceeded() + + proc profileIdentitySaveFailed*(self: View) {.signal.} + proc emitProfileIdentitySaveFailedSignal*(self: View) = + self.profileIdentitySaveFailed() + proc profileShowcasePreferencesSaveSucceeded*(self: View) {.signal.} proc emitProfileShowcasePreferencesSaveSucceededSignal*(self: View) = self.profileShowcasePreferencesSaveSucceeded() @@ -272,10 +280,10 @@ QtObject: self.profileShowcaseCollectiblesModel.clear() self.profileShowcaseAssetsModel.clear() - proc saveIdentityInfo(self: View, profileData: string) {.slot.} = + proc saveProfileIdentity(self: View, profileData: string) {.slot.} = let profileDataObj = profileData.parseJson let identityInfo = profileDataObj.toIdentitySaveData() - self.delegate.saveProfileIdentityInfo(identityInfo) + self.delegate.saveProfileIdentity(identityInfo) proc saveProfileShowcasePreferences(self: View, profileData: string) {.slot.} = let profileDataObj = profileData.parseJson diff --git a/src/app/modules/startup/controller.nim b/src/app/modules/startup/controller.nim index f7a987990c..637c8a08af 100644 --- a/src/app/modules/startup/controller.nim +++ b/src/app/modules/startup/controller.nim @@ -198,7 +198,7 @@ proc shouldStartWithOnboardingScreen*(self: Controller): bool = proc storeProfileDataAndProceedWithAppLoading*(self: Controller) = self.delegate.removeAllKeycardUidPairsForCheckingForAChangeAfterLogin() # reason for this is in the table in AppController.nim file - self.profileService.setDisplayName(self.tmpDisplayName) + discard self.profileService.setDisplayName(self.tmpDisplayName) let images = self.storeIdentityImage() self.accountsService.updateLoggedInAccount(self.tmpDisplayName, images) self.delegate.finishAppLoading() diff --git a/src/app_service/service/profile/service.nim b/src/app_service/service/profile/service.nim index cd5cfe6fd2..09fec1155a 100644 --- a/src/app_service/service/profile/service.nim +++ b/src/app_service/service/profile/service.nim @@ -86,29 +86,33 @@ QtObject: except Exception as e: error "error: ", procName="storeIdentityImage", errName = e.name, errDesription = e.msg - proc deleteIdentityImage*(self: Service, address: string) = + proc deleteIdentityImage*(self: Service, address: string): bool = try: let response = status_accounts.deleteIdentityImage(address) if(not response.error.isNil): error "could not delete identity images" - return + return false singletonInstance.userProfile.setLargeImage("") singletonInstance.userProfile.setThumbnailImage("") + return true except Exception as e: error "error: ", procName="deleteIdentityImage", errName = e.name, errDesription = e.msg + return false - proc setDisplayName*(self: Service, displayName: string) = + proc setDisplayName*(self: Service, displayName: string): bool = try: let response = status_accounts.setDisplayName(displayName) if(not response.error.isNil): error "could not set display name" - return + return false if(not self.settingsService.saveDisplayName(displayName)): error "could save display name to the settings" - return + return false + return true except Exception as e: error "error: ", procName="setDisplayName", errName = e.name, errDesription = e.msg + return false proc requestProfileShowcaseForContact*(self: Service, contactId: string) = let arg = AsyncGetProfileShowcaseForContactTaskArg( diff --git a/ui/app/AppLayouts/Profile/stores/ProfileStore.qml b/ui/app/AppLayouts/Profile/stores/ProfileStore.qml index 56d2eac56b..9b6fef52c4 100644 --- a/ui/app/AppLayouts/Profile/stores/ProfileStore.qml +++ b/ui/app/AppLayouts/Profile/stores/ProfileStore.qml @@ -62,7 +62,7 @@ QtObject { } // Identity related: - function saveIdentityInfo(displayName, bio, source, aX, aY, bX, bY) { + function saveProfileIdentity(displayName, bio, source, aX, aY, bX, bY) { var identityInfo = { "displayName": displayName, "bio": bio, @@ -75,7 +75,7 @@ QtObject { } : null } let json = JSON.stringify(identityInfo) - root.profileModule.saveIdentityInfo(json) + root.profileModule.saveProfileIdentity(json) } function getProfileShowcaseEntriesLimit() { @@ -102,12 +102,20 @@ QtObject { root.profileModule.setIsFirstShowcaseInteraction() } + signal profileIdentitySaveSucceeded() + signal profileIdentitySaveFailed() signal profileShowcasePreferencesSaveSucceeded() signal profileShowcasePreferencesSaveFailed() readonly property Connections profileModuleConnections: Connections { target: root.profileModule + function onProfileIdentitySaveSucceeded() { + root.profileIdentitySaveSucceeded() + } + function onProfileIdentitySaveFailed() { + root.profileIdentitySaveFailed() + } function onProfileShowcasePreferencesSaveSucceeded() { root.profileShowcasePreferencesSaveSucceeded() } diff --git a/ui/app/AppLayouts/Profile/views/MyProfileView.qml b/ui/app/AppLayouts/Profile/views/MyProfileView.qml index d9335cfe2d..fb81cd4217 100644 --- a/ui/app/AppLayouts/Profile/views/MyProfileView.qml +++ b/ui/app/AppLayouts/Profile/views/MyProfileView.qml @@ -165,13 +165,13 @@ SettingsContentBase { // Identity info if (isIdentityTabDirty) { - root.profileStore.saveIdentityInfo(descriptionPanel.displayName.text, - descriptionPanel.bio.text.trim(), - profileHeader.icon, - profileHeader.cropRect.x, - profileHeader.cropRect.y, - (profileHeader.cropRect.x + profileHeader.cropRect.width), - (profileHeader.cropRect.y + profileHeader.cropRect.height)) + root.profileStore.saveProfileIdentity(descriptionPanel.displayName.text, + descriptionPanel.bio.text.trim(), + profileHeader.icon, + profileHeader.cropRect.x, + profileHeader.cropRect.y, + (profileHeader.cropRect.x + profileHeader.cropRect.width), + (profileHeader.cropRect.y + profileHeader.cropRect.height)) profileHeader.icon = Qt.binding(() => { return profileStore.profileLargeImage }) } }