From 1007bfaa62a4871649c754e809b545b2c2342db3 Mon Sep 17 00:00:00 2001 From: Brian G Date: Sat, 15 Jan 2022 14:38:39 -0800 Subject: [PATCH 1/2] Updated Scripter to work with Latest XML returned by introspectcall [DbusExplorer] * BUG Fixed bug in how the XML introspect file was handled, look for key 'name' now * NEW Display the property name with type returned or set, and read/write access type * NEW Display Signal information in a more clear format --- app/examples/Misc/DBusExplorer/.icon.png | Bin 3487 -> 16966 bytes app/examples/Misc/DBusExplorer/.project | 8 +- .../DBusExplorer/.src/FVersiongbXML.class | 103 ++++++++++++------ 3 files changed, 76 insertions(+), 35 deletions(-) diff --git a/app/examples/Misc/DBusExplorer/.icon.png b/app/examples/Misc/DBusExplorer/.icon.png index b39f42a15875f43797677672e52f42894ee11d1f..d4911481bf7d256c3ee4edc01c22e21a75715211 100644 GIT binary patch literal 16966 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 diff --git a/app/examples/Misc/DBusExplorer/.project b/app/examples/Misc/DBusExplorer/.project index 5bcff4083..3550b2d0c 100644 --- a/app/examples/Misc/DBusExplorer/.project +++ b/app/examples/Misc/DBusExplorer/.project @@ -1,19 +1,19 @@ # Gambas Project File 3.0 -# Compiled with Gambas 3.10.90 Title=Gambas DBus Explorer Startup=FVersiongbXML Icon=dbus64.png -Version=1.0.0 +Version=1.0.1 Component=gb.image Component=gb.gui Component=gb.dbus Component=gb.settings Component=gb.libxml -Description="DBus explorer.\n\nThis example allows to explore all applications connected to both DBus system and application buses. You can see all exported interfaces, methods, properties and events, with their signature. But you cannot use them." +Description="DBus explorer.\n\nThis example allows to explore all applications connected to both DBus system and application buses. You can see all exported interfaces, methods, properties and events, with their signature. But you cannot use them.\n\nUpdated to Correctly report property Names, Looks for Name attribute now \n Was expecting to be first in List, but now randomly located\nUpdated to display Property direction read or read/write\nUpdated to correctly report full details of signal handling" Authors="Fabien Bodard\nBenoît Minisini" TabSize=2 +Translate=1 +Language=en_US Vendor=Example Packager=1 Tags=Example,Utility CreateMenu=1 -Translate=1 diff --git a/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class b/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class index 04e6dd802..dc57ae1f8 100644 --- a/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class +++ b/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class @@ -61,28 +61,42 @@ Public Sub ShowPathContent(sPath As String, sBus As String, sApplication As Stri hNode2 = hNode.Children[j] If hNode2.Name = "method" Or hNode2.Name = "property" Or hNode2.Name = "signal" Then For Each hattr In hNode2.Attributes - Break + If hattr.name = "name" Then Break Next + Try tvDbus.Add(sFullDbusPath & "|" & hattr.Value, hattr.Value, Picture[hNode2.Name & ".png"], sFullDbusPath) If Error Then Continue - For k = 0 To hNode2.Children.Count - 1 - If hNode2.Children[k].Name = "arg" Then + $cArgs[sFullDbusPath & "|" & hattr.Value] &= "ref=" & hNode2.Name - For Each hattr2 In hNode2.Children[k].Attributes + If hNode2.name = "property" Then - aArgs.Add(hattr2.Name & "=" & hattr2.Value) + For Each hattr2 In hNode2.Attributes + If hattr2.name = "name" Then Continue + aArgs.Add(hattr2.Name & "=" & hattr2.Value) + Next - Next + $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" & aArgs.Join() + aArgs.Clear - $cArgs[sFullDbusPath & "|" & hattr.Value] &= aArgs.Join() + Else - If k < hNode2.Children.Count - 2 Then $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" - aArgs.Clear - Endif - Next + For k = 0 To hNode2.Children.Count - 1 + If hNode2.Children[k].Name = "arg" Then + For Each hattr2 In hNode2.Children[k].Attributes + + aArgs.Add(hattr2.Name & "=" & hattr2.Value) + + Next + + $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" & aArgs.Join() + + 'If k < hNode2.Children.Count - 2 Then $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" + aArgs.Clear + Endif + Next + Endif Endif - Next Next Endif @@ -180,8 +194,12 @@ Public Function MakeSignature(sKey As String) As String Dim s, t As String Dim aArg As String[] Dim sName, sType As String - Dim iArg As Integer + Dim sDirection As String + Dim sRef As String + Dim iArg As Integer = 1 Dim aOut As New String[] + Dim sAccess As String = "" + Dim bHasAccess As Boolean = False ars = Split(skey, "|") If Not $cArgs.Exist(skey) Then @@ -192,40 +210,63 @@ Public Function MakeSignature(sKey As String) As String Endif Endif - For Each s In Split($cArgs[sKey], "|") + Dim sParameters As String[] = Split($cArgs[sKey], "|") + For Each s In sParameters - Inc iArg - - sName = "Arg" & CStr(iArg) + sName = "Arg" ' + sDirection = "" + sType = "" For Each t In Split(s) aArg = Scan(t, "*=*") + Select Case aArg[0] + Case "ref" + sRef = aArg[1] + Case "direction" + sDirection = aArg[1] Case "type" sType = GetType(aArg[1]) Case "name" sName = aArg[1] + Case "access" + sAccess = aArg[1] + bHasAccess = True End Select Next - If InStr(s, "=out") Then - - aOut.Add(sName & " As " & sType) - - Else - + If sDirection == "in" Then + If sName = "Arg" Then + sName &= CStr(iArg) + Inc iArg + Endif aIn.Add(sName & " As " & sType) - + Else + If sName = "Arg" Then + If stype <> "" Then aOut.Add(sType) + Else + aOut.Add(sName & " As " & sType) + Endif Endif Next - s = ars[ars.Max] & "(" & aIn.Join(", ") & ")" - If aOut.Count Then - s &= " As " - If aOut.Count = 1 Then - s &= Scan(aOut[0], "* As *")[1] + If sRef = "property" Then + s = ars[ars.max] & " AS " & aOut.last & " For " & sAccess + Else + If sRef = "method" Then + s = ars[ars.Max] & "(" & aIn.Join(", ") & ")" + Else If sRef = "signal" Then + s = ars[ars.Max] + Endif + If aOut.Count Then + s &= IIf(sRef = "signal", " Sends ", " As ") + If aOut.Count = 1 Then + s &= aOut.last + Else + s &= "[" & aOut.Join(", ") & "] as variant[]" + Endif Else - s &= "[" & aOut.Join(", ") & "]" + If sRef = "signal" Then s &= " Sends Nothing" Endif Endif @@ -248,7 +289,7 @@ Public Sub tvDbus_MouseMove() If Not tvDbus.FindAt(Mouse.x, Mouse.y) Then s = MakeSignature(tvDbus.item.key) - + hcont = tvDbus.Parent ix = tvDbus.Item.X + tvDbus.Item.w / 2 iy = tvDbus.Item.Y From 63ea861f9e357781c479e86b5fc6b3c8c348b192 Mon Sep 17 00:00:00 2001 From: Brian G Date: Sat, 15 Jan 2022 14:38:39 -0800 Subject: [PATCH 2/2] Updated DBusExplorer to work with Latest XML returned by introspectcall [DbusExplorer] * BUG Fixed bug in how the XML introspect file was handled, look for key 'name' now * NEW Display the property name with type returned or set, and read/write access type * NEW Display Signal information in a more clear format --- app/examples/Misc/DBusExplorer/.icon.png | Bin 3487 -> 16966 bytes app/examples/Misc/DBusExplorer/.project | 8 +- .../DBusExplorer/.src/FVersiongbXML.class | 103 ++++++++++++------ 3 files changed, 76 insertions(+), 35 deletions(-) diff --git a/app/examples/Misc/DBusExplorer/.icon.png b/app/examples/Misc/DBusExplorer/.icon.png index b39f42a15875f43797677672e52f42894ee11d1f..d4911481bf7d256c3ee4edc01c22e21a75715211 100644 GIT binary patch literal 16966 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 diff --git a/app/examples/Misc/DBusExplorer/.project b/app/examples/Misc/DBusExplorer/.project index 5bcff4083..3550b2d0c 100644 --- a/app/examples/Misc/DBusExplorer/.project +++ b/app/examples/Misc/DBusExplorer/.project @@ -1,19 +1,19 @@ # Gambas Project File 3.0 -# Compiled with Gambas 3.10.90 Title=Gambas DBus Explorer Startup=FVersiongbXML Icon=dbus64.png -Version=1.0.0 +Version=1.0.1 Component=gb.image Component=gb.gui Component=gb.dbus Component=gb.settings Component=gb.libxml -Description="DBus explorer.\n\nThis example allows to explore all applications connected to both DBus system and application buses. You can see all exported interfaces, methods, properties and events, with their signature. But you cannot use them." +Description="DBus explorer.\n\nThis example allows to explore all applications connected to both DBus system and application buses. You can see all exported interfaces, methods, properties and events, with their signature. But you cannot use them.\n\nUpdated to Correctly report property Names, Looks for Name attribute now \n Was expecting to be first in List, but now randomly located\nUpdated to display Property direction read or read/write\nUpdated to correctly report full details of signal handling" Authors="Fabien Bodard\nBenoît Minisini" TabSize=2 +Translate=1 +Language=en_US Vendor=Example Packager=1 Tags=Example,Utility CreateMenu=1 -Translate=1 diff --git a/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class b/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class index 04e6dd802..dc57ae1f8 100644 --- a/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class +++ b/app/examples/Misc/DBusExplorer/.src/FVersiongbXML.class @@ -61,28 +61,42 @@ Public Sub ShowPathContent(sPath As String, sBus As String, sApplication As Stri hNode2 = hNode.Children[j] If hNode2.Name = "method" Or hNode2.Name = "property" Or hNode2.Name = "signal" Then For Each hattr In hNode2.Attributes - Break + If hattr.name = "name" Then Break Next + Try tvDbus.Add(sFullDbusPath & "|" & hattr.Value, hattr.Value, Picture[hNode2.Name & ".png"], sFullDbusPath) If Error Then Continue - For k = 0 To hNode2.Children.Count - 1 - If hNode2.Children[k].Name = "arg" Then + $cArgs[sFullDbusPath & "|" & hattr.Value] &= "ref=" & hNode2.Name - For Each hattr2 In hNode2.Children[k].Attributes + If hNode2.name = "property" Then - aArgs.Add(hattr2.Name & "=" & hattr2.Value) + For Each hattr2 In hNode2.Attributes + If hattr2.name = "name" Then Continue + aArgs.Add(hattr2.Name & "=" & hattr2.Value) + Next - Next + $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" & aArgs.Join() + aArgs.Clear - $cArgs[sFullDbusPath & "|" & hattr.Value] &= aArgs.Join() + Else - If k < hNode2.Children.Count - 2 Then $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" - aArgs.Clear - Endif - Next + For k = 0 To hNode2.Children.Count - 1 + If hNode2.Children[k].Name = "arg" Then + For Each hattr2 In hNode2.Children[k].Attributes + + aArgs.Add(hattr2.Name & "=" & hattr2.Value) + + Next + + $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" & aArgs.Join() + + 'If k < hNode2.Children.Count - 2 Then $cArgs[sFullDbusPath & "|" & hattr.Value] &= "|" + aArgs.Clear + Endif + Next + Endif Endif - Next Next Endif @@ -180,8 +194,12 @@ Public Function MakeSignature(sKey As String) As String Dim s, t As String Dim aArg As String[] Dim sName, sType As String - Dim iArg As Integer + Dim sDirection As String + Dim sRef As String + Dim iArg As Integer = 1 Dim aOut As New String[] + Dim sAccess As String = "" + Dim bHasAccess As Boolean = False ars = Split(skey, "|") If Not $cArgs.Exist(skey) Then @@ -192,40 +210,63 @@ Public Function MakeSignature(sKey As String) As String Endif Endif - For Each s In Split($cArgs[sKey], "|") + Dim sParameters As String[] = Split($cArgs[sKey], "|") + For Each s In sParameters - Inc iArg - - sName = "Arg" & CStr(iArg) + sName = "Arg" ' + sDirection = "" + sType = "" For Each t In Split(s) aArg = Scan(t, "*=*") + Select Case aArg[0] + Case "ref" + sRef = aArg[1] + Case "direction" + sDirection = aArg[1] Case "type" sType = GetType(aArg[1]) Case "name" sName = aArg[1] + Case "access" + sAccess = aArg[1] + bHasAccess = True End Select Next - If InStr(s, "=out") Then - - aOut.Add(sName & " As " & sType) - - Else - + If sDirection == "in" Then + If sName = "Arg" Then + sName &= CStr(iArg) + Inc iArg + Endif aIn.Add(sName & " As " & sType) - + Else + If sName = "Arg" Then + If stype <> "" Then aOut.Add(sType) + Else + aOut.Add(sName & " As " & sType) + Endif Endif Next - s = ars[ars.Max] & "(" & aIn.Join(", ") & ")" - If aOut.Count Then - s &= " As " - If aOut.Count = 1 Then - s &= Scan(aOut[0], "* As *")[1] + If sRef = "property" Then + s = ars[ars.max] & " AS " & aOut.last & " For " & sAccess + Else + If sRef = "method" Then + s = ars[ars.Max] & "(" & aIn.Join(", ") & ")" + Else If sRef = "signal" Then + s = ars[ars.Max] + Endif + If aOut.Count Then + s &= IIf(sRef = "signal", " Sends ", " As ") + If aOut.Count = 1 Then + s &= aOut.last + Else + s &= "[" & aOut.Join(", ") & "] as variant[]" + Endif Else - s &= "[" & aOut.Join(", ") & "]" + If sRef = "signal" Then s &= " Sends Nothing" Endif Endif @@ -248,7 +289,7 @@ Public Sub tvDbus_MouseMove() If Not tvDbus.FindAt(Mouse.x, Mouse.y) Then s = MakeSignature(tvDbus.item.key) - + hcont = tvDbus.Parent ix = tvDbus.Item.X + tvDbus.Item.w / 2 iy = tvDbus.Item.Y