parent
164b84feb8
commit
374f2e2149
|
@ -279,7 +279,7 @@ proc removePrivateKey*(self: Controller, communityId: string) =
|
||||||
self.communityService.removePrivateKey(communityId)
|
self.communityService.removePrivateKey(communityId)
|
||||||
|
|
||||||
proc importCommunity*(self: Controller, communityKey: string) =
|
proc importCommunity*(self: Controller, communityKey: string) =
|
||||||
self.communityService.importCommunity(communityKey)
|
self.communityService.asyncImportCommunity(communityKey)
|
||||||
|
|
||||||
proc setCommunityMuted*(self: Controller, communityId: string, mutedType: int) =
|
proc setCommunityMuted*(self: Controller, communityId: string, mutedType: int) =
|
||||||
self.communityService.setCommunityMuted(communityId, mutedType)
|
self.communityService.setCommunityMuted(communityId, mutedType)
|
||||||
|
|
|
@ -168,3 +168,20 @@ const asyncCheckPermissionsToJoinTask: Task = proc(argEncoded: string) {.gcsafe,
|
||||||
"communityId": arg.communityId,
|
"communityId": arg.communityId,
|
||||||
"error": e.msg,
|
"error": e.msg,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
type
|
||||||
|
AsyncImportCommunityTaskArg = ref object of QObjectTaskArg
|
||||||
|
communityKey: string
|
||||||
|
|
||||||
|
const asyncImportCommunityTask: Task = proc(argEncoded: string) {.gcsafe, nimcall.} =
|
||||||
|
let arg = decode[AsyncImportCommunityTaskArg](argEncoded)
|
||||||
|
try:
|
||||||
|
let response = status_go.importCommunity(arg.communityKey)
|
||||||
|
arg.finish(%* {
|
||||||
|
"response": response,
|
||||||
|
"error": "",
|
||||||
|
})
|
||||||
|
except Exception as e:
|
||||||
|
arg.finish(%* {
|
||||||
|
"error": e.msg,
|
||||||
|
})
|
||||||
|
|
|
@ -1636,33 +1636,44 @@ QtObject:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error "Error removing community private key: ", msg = e.msg
|
error "Error removing community private key: ", msg = e.msg
|
||||||
|
|
||||||
proc importCommunity*(self: Service, communityKey: string) =
|
proc asyncImportCommunity*(self: Service, communityKey: string) =
|
||||||
|
let arg = AsyncImportCommunityTaskArg(
|
||||||
|
tptr: cast[ByteAddress](asyncImportCommunityTask),
|
||||||
|
vptr: cast[ByteAddress](self.vptr),
|
||||||
|
slot: "onAsyncImportCommunityCompleted",
|
||||||
|
communityKey: communityKey,
|
||||||
|
)
|
||||||
|
self.threadpool.start(arg)
|
||||||
|
|
||||||
|
proc onAsyncImportCommunityCompleted*(self: Service, response: string) {.slot.} =
|
||||||
try:
|
try:
|
||||||
let response = status_go.importCommunity(communityKey)
|
let rpcResponseObj = response.parseJson
|
||||||
|
if rpcResponseObj{"error"}.kind != JNull and rpcResponseObj{"error"}.getStr != "":
|
||||||
|
raise newException(RpcException, rpcResponseObj["error"].getStr)
|
||||||
## after `importCommunity` call everything should be handled in a slot cnnected to `SignalType.CommunityFound.event`
|
## after `importCommunity` call everything should be handled in a slot cnnected to `SignalType.CommunityFound.event`
|
||||||
## but because of insufficient data (chats details are missing) sent as a payload of that signal we're unable to do
|
## but because of insufficient data (chats details are missing) sent as a payload of that signal we're unable to do
|
||||||
## that until `status-go` part gets improved in ragards of that.
|
## that until `status-go` part gets improved in ragards of that.
|
||||||
|
|
||||||
if (response.error != nil):
|
if rpcResponseObj["response"]{"error"}.kind != JNull:
|
||||||
let error = Json.decode($response.error, RpcError)
|
let error = Json.decode(rpcResponseObj["response"]["error"].getStr, RpcError)
|
||||||
raise newException(RpcException, fmt"community id `{communityKey}` err: {error.message}")
|
raise newException(RpcException, error.message)
|
||||||
|
|
||||||
if response.result == nil or response.result.kind != JObject:
|
if rpcResponseObj["response"]{"result"} == nil or rpcResponseObj["response"]{"result"}.kind != JObject:
|
||||||
raise newException(RpcException, fmt"response is empty or not an json object, community id `{communityKey}`")
|
raise newException(RpcException, "response is empty or not an json object")
|
||||||
|
|
||||||
var communityJArr: JsonNode
|
var communityJArr: JsonNode
|
||||||
if(not response.result.getProp("communities", communityJArr)):
|
if not rpcResponseObj["response"]{"result"}.getProp("communities", communityJArr):
|
||||||
raise newException(RpcException, fmt"there is no `communities` key in the response for community id: {communityKey}")
|
raise newException(RpcException, "there is no `communities` key in the response")
|
||||||
|
|
||||||
if(communityJArr.len == 0):
|
if communityJArr.len == 0:
|
||||||
raise newException(RpcException, fmt"`communities` array is empty in the response for community id: {communityKey}")
|
raise newException(RpcException, "`communities` array is empty in the response")
|
||||||
|
|
||||||
var communitiesSettingsJArr: JsonNode
|
var communitiesSettingsJArr: JsonNode
|
||||||
if(not response.result.getProp("communitiesSettings", communitiesSettingsJArr)):
|
if not rpcResponseObj["response"]{"result"}.getProp("communitiesSettings", communitiesSettingsJArr):
|
||||||
raise newException(RpcException, fmt"there is no `communitiesSettings` key in the response for community id: {communityKey}")
|
raise newException(RpcException, "there is no `communitiesSettings` key in the response")
|
||||||
|
|
||||||
if(communitiesSettingsJArr.len == 0):
|
if communitiesSettingsJArr.len == 0:
|
||||||
raise newException(RpcException, fmt"`communitiesSettings` array is empty in the response for community id: {communityKey}")
|
raise newException(RpcException, "`communitiesSettings` array is empty in the response")
|
||||||
|
|
||||||
var communityDto = communityJArr[0].toCommunityDto()
|
var communityDto = communityJArr[0].toCommunityDto()
|
||||||
let communitySettingsDto = communitiesSettingsJArr[0].toCommunitySettingsDto()
|
let communitySettingsDto = communitiesSettingsJArr[0].toCommunitySettingsDto()
|
||||||
|
@ -1671,7 +1682,7 @@ QtObject:
|
||||||
self.communities[communityDto.id] = communityDto
|
self.communities[communityDto.id] = communityDto
|
||||||
|
|
||||||
var chatsJArr: JsonNode
|
var chatsJArr: JsonNode
|
||||||
if(response.result.getProp("chats", chatsJArr)):
|
if rpcResponseObj["response"]{"result"}.getProp("chats", chatsJArr):
|
||||||
for chatObj in chatsJArr:
|
for chatObj in chatsJArr:
|
||||||
let chatDto = chatObj.toChatDto(communityDto.id)
|
let chatDto = chatObj.toChatDto(communityDto.id)
|
||||||
self.chatService.updateOrAddChat(chatDto) # we have to update chats stored in the chat service.
|
self.chatService.updateOrAddChat(chatDto) # we have to update chats stored in the chat service.
|
||||||
|
|
Loading…
Reference in New Issue