From 03b6209f6b8807d12913dee4aa8ce07eab96151f Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 11 May 2020 13:31:07 -0400 Subject: [PATCH 1/3] move status specific logic of the application view --- src/applicationLogic.nim | 25 +++---------------------- src/nim_status_client.nim | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/applicationLogic.nim b/src/applicationLogic.nim index a59e010b36..52c1b4ece4 100644 --- a/src/applicationLogic.nim +++ b/src/applicationLogic.nim @@ -1,18 +1,8 @@ import NimQml -import status -import libstatus +# import status +# import libstatus import json -var signalHandler: SignalCallback = proc(p0: cstring): void = - setupForeignThreadGc() - - var jsonSignal = ($p0).parseJson - if $jsonSignal["type"].getStr == "messages.new": - echo $p0 - - tearDownForeignThreadGc() - - # Probably all QT classes will look like this: QtObject: type ApplicationLogic* = ref object of QObject @@ -28,15 +18,6 @@ QtObject: result.callResult = "Use this tool to call JSONRPC methods" result.setup() - status.setSignalHandler(signalHandler) - - status.setupNewAccount() - discard status.addPeer("enode://2c8de3cbb27a3d30cbb5b3e003bc722b126f5aef82e2052aaef032ca94e0c7ad219e533ba88c70585ebd802de206693255335b100307645ab5170e88620d2a81@47.244.221.14:443") - echo status.callPrivateRPC("{\"jsonrpc\":\"2.0\", \"method\":\"wakuext_requestMessages\", \"params\":[{\"topics\": [\"0x7998f3c8\"]}], \"id\": 1}") - - result.accountResult = status.queryAccounts() - status.subscribeToTest() - # ¯\_(ツ)_/¯ dunno what is this proc setup(self: ApplicationLogic) = # discard status.onMessage(self.onMessage) @@ -73,7 +54,7 @@ QtObject: notify = callResultChanged proc onSend*(self: ApplicationLogic, inputJSON: string) {.slot.} = - self.setCallResult(status.callPrivateRPC(inputJSON)) + # self.setCallResult(status.callPrivateRPC(inputJSON)) echo "Done!: ", self.callResult # proc onMessage*(self: ApplicationLogic, message: string) {.slot.} = diff --git a/src/nim_status_client.nim b/src/nim_status_client.nim index 22e067ac35..58d6c251da 100644 --- a/src/nim_status_client.nim +++ b/src/nim_status_client.nim @@ -2,6 +2,18 @@ import NimQml import applicationLogic import chats import state +import status +import libstatus +import json + +var signalHandler: SignalCallback = proc(p0: cstring): void = + setupForeignThreadGc() + + var jsonSignal = ($p0).parseJson + if $jsonSignal["type"].getStr == "messages.new": + echo $p0 + + tearDownForeignThreadGc() proc mainProc() = @@ -20,6 +32,17 @@ proc mainProc() = defer: engine.delete() + status.setSignalHandler(signalHandler) + + status.setupNewAccount() + discard status.addPeer("enode://2c8de3cbb27a3d30cbb5b3e003bc722b126f5aef82e2052aaef032ca94e0c7ad219e533ba88c70585ebd802de206693255335b100307645ab5170e88620d2a81@47.244.221.14:443") + echo status.callPrivateRPC("{\"jsonrpc\":\"2.0\", \"method\":\"wakuext_requestMessages\", \"params\":[{\"topics\": [\"0x7998f3c8\"]}], \"id\": 1}") + + # result.accountResult = status.queryAccounts() + status.subscribeToTest() + + + let logic = newApplicationLogic(app) defer: logic.delete From b8563b25a32f0a11434adaa9c6407fbe2fadfadf Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 11 May 2020 14:01:03 -0400 Subject: [PATCH 2/3] abstract message sending from the view --- src/applicationLogic.nim | 10 ++++------ src/nim_status_client.nim | 4 +--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/applicationLogic.nim b/src/applicationLogic.nim index 52c1b4ece4..f9d2adb0dd 100644 --- a/src/applicationLogic.nim +++ b/src/applicationLogic.nim @@ -1,7 +1,4 @@ import NimQml -# import status -# import libstatus -import json # Probably all QT classes will look like this: QtObject: @@ -9,12 +6,14 @@ QtObject: app: QApplication callResult: string accountResult: string + sendMessage: proc (msg: string): string # chats: seq[ChatView] # Constructor - proc newApplicationLogic*(app: QApplication): ApplicationLogic = + proc newApplicationLogic*(app: QApplication, sendMessage: proc): ApplicationLogic = new(result) result.app = app + result.sendMessage = sendMessage result.callResult = "Use this tool to call JSONRPC methods" result.setup() @@ -33,7 +32,6 @@ QtObject: proc onExitTriggered(self: ApplicationLogic) {.slot.} = self.app.quit - # Accesors proc callResult*(self: ApplicationLogic): string {.slot.} = result = self.callResult @@ -54,7 +52,7 @@ QtObject: notify = callResultChanged proc onSend*(self: ApplicationLogic, inputJSON: string) {.slot.} = - # self.setCallResult(status.callPrivateRPC(inputJSON)) + self.setCallResult(self.sendMessage(inputJSON)) echo "Done!: ", self.callResult # proc onMessage*(self: ApplicationLogic, message: string) {.slot.} = diff --git a/src/nim_status_client.nim b/src/nim_status_client.nim index 58d6c251da..7d641646e9 100644 --- a/src/nim_status_client.nim +++ b/src/nim_status_client.nim @@ -41,9 +41,7 @@ proc mainProc() = # result.accountResult = status.queryAccounts() status.subscribeToTest() - - - let logic = newApplicationLogic(app) + let logic = newApplicationLogic(app, status.callPrivateRPC) defer: logic.delete let logicVariant = newQVariant(logic) From 87c7abe687091706fc18ff31356bc234a4aedf07 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 11 May 2020 14:22:01 -0400 Subject: [PATCH 3/3] rename applicationLogic to applicationView to better reflect purpose --- ...plicationLogic.nim => applicationView.nim} | 34 +++++++++---------- src/nim_status_client.nim | 6 ++-- 2 files changed, 18 insertions(+), 22 deletions(-) rename src/{applicationLogic.nim => applicationView.nim} (57%) diff --git a/src/applicationLogic.nim b/src/applicationView.nim similarity index 57% rename from src/applicationLogic.nim rename to src/applicationView.nim index f9d2adb0dd..2dc29bfd8c 100644 --- a/src/applicationLogic.nim +++ b/src/applicationView.nim @@ -2,15 +2,14 @@ import NimQml # Probably all QT classes will look like this: QtObject: - type ApplicationLogic* = ref object of QObject + type ApplicationView* = ref object of QObject app: QApplication callResult: string accountResult: string sendMessage: proc (msg: string): string - # chats: seq[ChatView] # Constructor - proc newApplicationLogic*(app: QApplication, sendMessage: proc): ApplicationLogic = + proc newApplicationView*(app: QApplication, sendMessage: proc): ApplicationView = new(result) result.app = app result.sendMessage = sendMessage @@ -18,32 +17,31 @@ QtObject: result.setup() # ¯\_(ツ)_/¯ dunno what is this - proc setup(self: ApplicationLogic) = - # discard status.onMessage(self.onMessage) + proc setup(self: ApplicationView) = self.QObject.setup # ¯\_(ツ)_/¯ seems to be a method for garbage collection - proc delete*(self: ApplicationLogic) = + proc delete*(self: ApplicationView) = self.QObject.delete # Read more about slots and signals here: https://doc.qt.io/qt-5/signalsandslots.html # This is an EventHandler - proc onExitTriggered(self: ApplicationLogic) {.slot.} = + proc onExitTriggered(self: ApplicationView) {.slot.} = self.app.quit # Accesors - proc callResult*(self: ApplicationLogic): string {.slot.} = + proc callResult*(self: ApplicationView): string {.slot.} = result = self.callResult - proc callResultChanged*(self: ApplicationLogic, callResult: string) {.signal.} + proc callResultChanged*(self: ApplicationView, callResult: string) {.signal.} - proc setCallResult(self: ApplicationLogic, callResult: string) {.slot.} = + proc setCallResult(self: ApplicationView, callResult: string) {.slot.} = if self.callResult == callResult: return self.callResult = callResult self.callResultChanged(callResult) - proc `callResult=`*(self: ApplicationLogic, callResult: string) = self.setCallResult(callResult) + proc `callResult=`*(self: ApplicationView, callResult: string) = self.setCallResult(callResult) # Binding between a QML variable and accesors is done here QtProperty[string] callResult: @@ -51,20 +49,20 @@ QtObject: write = setCallResult notify = callResultChanged - proc onSend*(self: ApplicationLogic, inputJSON: string) {.slot.} = + proc onSend*(self: ApplicationView, inputJSON: string) {.slot.} = self.setCallResult(self.sendMessage(inputJSON)) echo "Done!: ", self.callResult - # proc onMessage*(self: ApplicationLogic, message: string) {.slot.} = - # self.setCallResult(message) - # echo "Received message: ", message + proc onMessage*(self: ApplicationView, message: string) {.slot.} = + self.setCallResult(message) + echo "Received message: ", message - proc accountResultChanged*(self: ApplicationLogic, callResult: string) {.signal.} + proc accountResultChanged*(self: ApplicationView, callResult: string) {.signal.} - proc accountResult*(self: ApplicationLogic): string {.slot.} = + proc accountResult*(self: ApplicationView): string {.slot.} = result = self.accountResult - proc setAccountResult(self: ApplicationLogic, accountResult: string) {.slot.} = + proc setAccountResult(self: ApplicationView, accountResult: string) {.slot.} = if self.accountResult == accountResult: return self.accountResult = accountResult self.accountResultChanged(accountResult) diff --git a/src/nim_status_client.nim b/src/nim_status_client.nim index 7d641646e9..04cba5c96d 100644 --- a/src/nim_status_client.nim +++ b/src/nim_status_client.nim @@ -1,5 +1,5 @@ import NimQml -import applicationLogic +import applicationView import chats import state import status @@ -16,7 +16,6 @@ var signalHandler: SignalCallback = proc(p0: cstring): void = tearDownForeignThreadGc() proc mainProc() = - # From QT docs: # For any GUI application using Qt, there is precisely one QApplication object, # no matter whether the application has 0, 1, 2 or more windows at any given time. @@ -31,7 +30,6 @@ proc mainProc() = var engine = newQQmlApplicationEngine() defer: engine.delete() - status.setSignalHandler(signalHandler) status.setupNewAccount() @@ -41,7 +39,7 @@ proc mainProc() = # result.accountResult = status.queryAccounts() status.subscribeToTest() - let logic = newApplicationLogic(app, status.callPrivateRPC) + let logic = newApplicationView(app, status.callPrivateRPC) defer: logic.delete let logicVariant = newQVariant(logic)