[haiku-commits] Change in haiku[master]: BLooper: implement scripting

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 21 Jun 2020 19:42:38 +0000

From X512 <danger_mail@xxxxxxx>:

X512 has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/2940 ;)


Change subject: BLooper: implement scripting
......................................................................

BLooper: implement scripting

"Handlers" property is still not implemented.

Change-Id: I73dd301ca7109675a4b629464ba7275a8095c77b
---
M src/kits/app/Looper.cpp
1 file changed, 46 insertions(+), 2 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/40/2940/1

diff --git a/src/kits/app/Looper.cpp b/src/kits/app/Looper.cpp
index e10f684..8f893a0 100644
--- a/src/kits/app/Looper.cpp
+++ b/src/kits/app/Looper.cpp
@@ -18,6 +18,7 @@
 #include <new>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>

 #include <Autolock.h>
 #include <Message.h>
@@ -284,8 +285,51 @@
 void
 BLooper::MessageReceived(BMessage* message)
 {
-       // TODO: implement scripting support
-       BHandler::MessageReceived(message);
+       if (!message->HasSpecifiers()) {
+               BHandler::MessageReceived(message);
+               return;
+       }
+
+       BMessage replyMsg(B_REPLY);
+       status_t err = B_BAD_SCRIPT_SYNTAX;
+       int32 index;
+       BMessage specifier;
+       int32 what;
+       const char* property;
+
+       if (message->GetCurrentSpecifier(&index, &specifier, &what, &property)
+                       != B_OK) {
+               return BHandler::MessageReceived(message);
+       }
+
+       BPropertyInfo propertyInfo(sLooperPropInfo);
+       switch (propertyInfo.FindMatch(message, index, &specifier, what,
+                       property)) {
+               case 1:
+                       // TODO: investigate what "Handlers" property means and 
implement
+                       if (message->what == B_GET_PROPERTY)
+                               err = B_NOT_SUPPORTED;
+                       break;
+               case 2:
+                       if (message->what == B_COUNT_PROPERTIES)
+                               err = replyMsg.AddInt32("result", 
CountHandlers());
+                       break;
+
+               default:
+                       return BHandler::MessageReceived(message);
+       }
+
+       if (err != B_OK) {
+               replyMsg.what = B_MESSAGE_NOT_UNDERSTOOD;
+
+               if (err == B_BAD_SCRIPT_SYNTAX)
+                       replyMsg.AddString("message", "Didn't understand the 
specifier(s)");
+               else
+                       replyMsg.AddString("message", strerror(err));
+       }
+
+       replyMsg.AddInt32("error", err);
+       message->SendReply(&replyMsg);
 }



--
To view, visit https://review.haiku-os.org/c/haiku/+/2940
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I73dd301ca7109675a4b629464ba7275a8095c77b
Gerrit-Change-Number: 2940
Gerrit-PatchSet: 1
Gerrit-Owner: X512 <danger_mail@xxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: BLooper: implement scripting - Gerrit