Version 6.1 geänderte Ausgabe des REST Interfaces

Moin Torben,
in Version 6.1 wurden ja einige Dinge am REST Interface geändert. Unter anderem wird jetzt der Inhalte der “RuntimeData” in Anführungszeichen ausgegeben, ist das so gewollt oder ein Fehler?

Wenn ich Dieses Script laufen lasse: https://github.com/Radio-Zoom/mairlist-html-control/blob/master/mairlist-scripts/StreamMonitor0-On.mls
Dann bekomme ich bei der Abfrage von http://mairlist-server:9300/runtimedata/StreamMonitorOnAir0 jetzt eine “1” anstatt wie sonst eine 1

Muss ich das in 6.1 überhaupt noch über Runtimedata machen oder kann ich das Status GUI Element auch per REST abfragen?

Greetz
Malte

Die Ausgabe erfolgt jetzt grundsätzlich als JSON, also Strings werden in “” eingeschlossen.

RuntimeData ist weiterhin notwendig, da Scripts und Hintergrunddinge wie REST keinen Zugriff auf die GUI haben.

OK, das ist blöd. Dann müssen wir einiges umstellen.
Müssten denn da nicht eigentlich geschweifte Klammern drum herum sein?

OK, nicht direkt auf die GUI, ich meinte viel mehr den Status des Stream Monitors als direkte REST Abfrage oder ähnliches.
Kann man das mit den neuen Scripten irgendwie bauen?

Die Anführungszeichen wegparsen oder json_decode benutzen :wink:

Müssten denn da nicht eigentlich geschweifte Klammern drum herum sein?

Nein. Es ist ja kein Objekt sondern ein String.

OK, nicht direkt auf die GUI, ich meinte viel mehr den Status des Stream Monitors als direkte REST Abfrage oder ähnliches. Kann man das mit den neuen Scripten irgendwie bauen?
procedure OnRESTRequest(Request: TRESTRequest; var Response: IPersistentStorage);
begin
  if Request.Document = '/StreamMonitorStatus' then 
    Response := CreatePersistentBoolean(StreamMonitor.GetStreams.GetItem(0).GetEnabled);
end;

Da kriegst du dann “true” oder “false” zurück (ist ja in dem Fall kein String sondern ein Boolean).

[quote=“Torben, post:4, topic:11498”] procedure OnRESTRequest(Request: TRESTRequest; var Response: IPersistentStorage); begin if Request.Document = '/StreamMonitorStatus' then Response := CreatePersistentBoolean(StreamMonitor.GetStreams.GetItem(0).GetEnabled); end;

Da kriegst du dann “true” oder “false” zurück (ist ja in dem Fall kein String sondern ein Boolean).[/quote]
Danke, ich denke das hilft mir weiter. Wie erweitere ich das korrekt für weitere Monitore?
So?

procedure OnRESTRequest(Request: TRESTRequest; var Response: IPersistentStorage);
begin
  if Request.Document = '/StreamMonitorStatus0' then 
    Response := CreatePersistentBoolean(StreamMonitor.GetStreams.GetItem(0).GetEnabled);
  if Request.Document = '/StreamMonitorStatus1' then 
    Response := CreatePersistentBoolean(StreamMonitor.GetStreams.GetItem(1).GetEnabled);
end;

Genau. Oder wenn du es ganz elegant haben willst, mit regular expression, die sich den Index aus der URL zieht. Aber das geht jetzt zu weit :wink: