fix(profile): fix profile pic change and move it to new architecture
Fixes #3997
This commit is contained in:
parent
816f737d55
commit
cd428678f7
|
@ -4,6 +4,7 @@ import ../../../../../app_service/service/accounts/service as accounts_service
|
|||
import ../../../../../app_service/service/settings/service as settings_service
|
||||
|
||||
import ./item as item
|
||||
import status/types/identity_image
|
||||
|
||||
export controller_interface
|
||||
|
||||
|
@ -59,3 +60,9 @@ method getProfile*[T](self: Controller[T]): item.Item =
|
|||
)
|
||||
|
||||
return item
|
||||
|
||||
method storeIdentityImage*[T](self: Controller[T], address: string, image: string, aX: int, aY: int, bX: int, bY: int): identity_image.IdentityImage =
|
||||
self.profileService.storeIdentityImage(address, image, aX, aY, bX, bY)
|
||||
|
||||
method deleteIdentityImage*[T](self: Controller[T], address: string): string =
|
||||
self.profileService.deleteIdentityImage(address)
|
|
@ -1,5 +1,6 @@
|
|||
import ../../../../../app_service/service/profile/service as profile_service
|
||||
import ./item
|
||||
import status/types/identity_image
|
||||
|
||||
type
|
||||
AccessInterface* {.pure inheritable.} = ref object of RootObj
|
||||
|
@ -14,6 +15,12 @@ method init*(self: AccessInterface) {.base.} =
|
|||
method getProfile*(self: AccessInterface): Item {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
method storeIdentityImage*(self: AccessInterface, address: string, image: string, aX: int, aY: int, bX: int, bY: int): identity_image.IdentityImage {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
method deleteIdentityImage*(self: AccessInterface, address: string): string {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
type
|
||||
## Abstract class (concept) which must be implemented by object/s used in this
|
||||
## module.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import status/types/identity_image
|
||||
|
||||
type
|
||||
AccessInterface* {.pure inheritable.} = ref object of RootObj
|
||||
## Abstract class for any input/interaction with this module.
|
||||
|
@ -11,6 +13,12 @@ method load*(self: AccessInterface) {.base.} =
|
|||
method isLoaded*(self: AccessInterface): bool {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
method storeIdentityImage*(self: AccessInterface, address: string, image: string, aX: int, aY: int, bX: int, bY: int): identity_image.IdentityImage {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
method deleteIdentityImage*(self: AccessInterface, address: string): string {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
type
|
||||
## Abstract class (concept) which must be implemented by object/s used in this
|
||||
## module.
|
||||
|
|
|
@ -136,7 +136,6 @@ QtObject:
|
|||
|
||||
proc hasIdentityImage*(self: Model): bool {.slot.} =
|
||||
result = (?.self.identityImage.thumbnail != "")
|
||||
result = false
|
||||
|
||||
QtProperty[bool] hasIdentityImage:
|
||||
read = hasIdentityImage
|
||||
|
|
|
@ -7,6 +7,8 @@ import ../../../../../app_service/service/profile/service as profile_service
|
|||
import ../../../../../app_service/service/accounts/service as accounts_service
|
||||
import ../../../../../app_service/service/settings/service as settings_service
|
||||
|
||||
import status/types/identity_image
|
||||
|
||||
export io_interface
|
||||
|
||||
type
|
||||
|
@ -21,7 +23,7 @@ proc newModule*[T](delegate: T, accountsService: accounts_service.ServiceInterfa
|
|||
result = Module[T]()
|
||||
result.delegate = delegate
|
||||
result.view = newView(result)
|
||||
result.viewVariant = result.view.getModel
|
||||
result.viewVariant = newQVariant(result.view)
|
||||
result.controller = controller.newController[Module[T]](result, accountsService, settingsService, profileService)
|
||||
result.moduleLoaded = false
|
||||
|
||||
|
@ -37,3 +39,9 @@ method load*[T](self: Module[T]) =
|
|||
|
||||
method isLoaded*[T](self: Module[T]): bool =
|
||||
return self.moduleLoaded
|
||||
|
||||
method storeIdentityImage*[T](self: Module[T], address: string, image: string, aX: int, aY: int, bX: int, bY: int): identity_image.IdentityImage =
|
||||
self.controller.storeIdentityImage(address, image, aX, aY, bX, bY)
|
||||
|
||||
method deleteIdentityImage*[T](self: Module[T], address: string): string =
|
||||
self.controller.deleteIdentityImage(address)
|
||||
|
|
|
@ -3,6 +3,9 @@ import NimQml
|
|||
import ./item
|
||||
import ./model
|
||||
import ./io_interface
|
||||
import status/profile as status_profile
|
||||
import status/status
|
||||
import ../../../../utils/image_utils
|
||||
|
||||
import status/types/[identity_image, profile]
|
||||
|
||||
|
@ -37,3 +40,29 @@ QtObject:
|
|||
proc setProfile*(self: View, profile: Item) =
|
||||
self.model.setProfile(profile)
|
||||
self.modelChanged()
|
||||
|
||||
proc upload*(self: View, imageUrl: string, aX: int, aY: int, bX: int, bY: int): string {.slot.} =
|
||||
var image = image_utils.formatImagePath(imageUrl)
|
||||
# FIXME the function to get the file size is messed up
|
||||
# var size = image_getFileSize(image)
|
||||
# TODO find a way to i18n this (maybe send just a code and then QML sets the right string)
|
||||
# return "Max file size is 20MB"
|
||||
|
||||
try:
|
||||
# TODO add crop tool for the image
|
||||
let identityImage = self.delegate.storeIdentityImage(self.model.address, image, aX, aY, bX, bY)
|
||||
# TODO use only one type
|
||||
let identityImageConverted = item.IdentityImage(
|
||||
thumbnail: identityImage.thumbnail,
|
||||
large: identityImage.thumbnail
|
||||
)
|
||||
self.model.setIdentityImage(identityImageConverted)
|
||||
result = ""
|
||||
except Exception as e:
|
||||
echo "Error storing identity image", e.msg
|
||||
result = "Error storing identity image: " & e.msg
|
||||
|
||||
proc remove*(self: View): string {.slot.} =
|
||||
result = self.delegate.deleteIdentityImage(self.model.address)
|
||||
if (result == ""):
|
||||
self.model.removeIdentityImage()
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import json, sequtils, chronicles
|
||||
import status/statusgo_backend/accounts
|
||||
|
||||
import ./service_interface, ./dto
|
||||
|
||||
|
@ -35,4 +36,9 @@ method getProfile*(self: Service): Dto =
|
|||
hasIdentityImage: false,
|
||||
messagesFromContactsOnly: false
|
||||
)
|
||||
|
||||
|
||||
method storeIdentityImage*(self: Service, address: string, image: string, aX: int, aY: int, bX: int, bY: int): IdentityImage =
|
||||
storeIdentityImage(address, image, aX, aY, bX, bY)
|
||||
|
||||
method deleteIdentityImage*(self: Service, address: string): string =
|
||||
deleteIdentityImage(address)
|
|
@ -2,6 +2,10 @@ import dto
|
|||
|
||||
export dto
|
||||
|
||||
import status/types/identity_image
|
||||
|
||||
export IdentityImage
|
||||
|
||||
type
|
||||
ServiceInterface* {.pure inheritable.} = ref object of RootObj
|
||||
## Abstract class for this service access.
|
||||
|
@ -15,5 +19,11 @@ method init*(self: ServiceInterface) {.base.} =
|
|||
method getProfile*(self: ServiceInterface): Dto {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
method storeIdentityImage*(self: ServiceInterface, address: string, image: string, aX: int, aY: int, bX: int, bY: int): IdentityImage {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
method deleteIdentityImage*(self: ServiceInterface, address: string): string {.base.} =
|
||||
raise newException(ValueError, "No implementation available")
|
||||
|
||||
# method getTokens*(self: ServiceInterface, chainId: int): seq[Dto] {.base.} =
|
||||
# raise newException(ValueError, "No implementation available")
|
|
@ -19,7 +19,7 @@ ModalPopup {
|
|||
property url largeImage: ""
|
||||
property bool hasIdentityImage: false
|
||||
|
||||
signal cropFinished(var aX, var aY, var bX, var bY)
|
||||
signal cropFinished(string selectedImage, var aX, var aY, var bX, var bY)
|
||||
signal removeImageButtonClicked()
|
||||
|
||||
//% "Profile picture"
|
||||
|
|
|
@ -6,7 +6,7 @@ QtObject {
|
|||
|
||||
property var profileModelInst: profileModel
|
||||
property var profileModuleInst: profileSectionModule
|
||||
property var profile: profileModule
|
||||
property var profile: profileModule.model
|
||||
property var contactsModuleInst: contactsModule
|
||||
property var aboutModuleInst: aboutModule
|
||||
property var languageModuleInst: languageModule
|
||||
|
@ -178,11 +178,11 @@ QtObject {
|
|||
}
|
||||
|
||||
function uploadImage(source, aX, aY, bX, bY) {
|
||||
return profileModelInst.picture.upload(source, aX, aY, bX, bY)
|
||||
return profileModule.upload(source, aX, aY, bX, bY)
|
||||
}
|
||||
|
||||
function removeImage() {
|
||||
return profileModelInst.picture.remove()
|
||||
return profileModule.remove()
|
||||
}
|
||||
|
||||
function lookupContact(value) {
|
||||
|
|
Loading…
Reference in New Issue