Gerne möchte ich während mAirList “onair” ist, alle 5min, ein mAirList Script aufrufen. Dieses Script stellt sicher, dass mAirlist jeweils alle Audiodateien, lokal auf dem Computer vorfindet.
Das Script soll ein externes Programm “Robocopy.exe” für die Replikation aufrufen, damit mAirList nicht warten muss. Eine Replikation soll jedoch nur erfolgen, wenn noch fehlende Elemente in der Playlist vorhanden sind.
(Return von CurrentPlaylist.ErrorCheck = true;)
Könntest Du bitte bei Gelegenheit folgendes integrieren?
Geltungsbereich von Events um Onair bzw. Offair erweitern.
Wenn du das in ein Script packst, ist das alles bereits möglich. Das Script könnte so aussehen:
begin
if CurrentPlaybackControl.GetOnAir then
ShellExecuteHidden('robocopy.exe blabla');
end.
Das fügst du dann ganz normal in die Eventliste ein, wobei du als Uhrzeit “benutzerdefiniert” wählst, als Stunde “0-23”, als Minute “0,5,10,15,20,25,30,35,40,45,50,55” und als Sekunde “0”.
var i: integer;
begin
if Engine.GetOnAir then
begin
ShellExecute('cmd.exe','');
SystemLog('Onair: ' + FormatDateTime('YYYYMMDD_HHMM', now));
end
else
SystemLog('Offair: ' + FormatDateTime('YYYYMMDD_HHMM', now));
end.
Dies funktioniert schon einmal. Wie kann ich nun prüfen ob noch fehlerhafte Elemente in der Playlist vorhanden sind? Gibt es einen Parameter für
CurrentPlaylist.ErrorCheck;
Oder lässt sich dies irgendwie so prüfen?
begin
for i := 0 to CurrentPlaylist.GetCount - 1 do
SystemLog('Item ' + IntToStr(i) + ': ' + CurrentPlaylist.GetItem(i).GetTitle);
end.
Du musst ErrorCheck für jedes einzelne Element aufrufen. Guck mal bei IPlaylistItem, da gibt es eine entsprechende Funktion. Diese liefert true zurück, wenn das Item ok ist, sonst false.
begin
for i := 0 to CurrentPlaylist.GetCount - 1 do
if not CurrentPlaylist.GetItem(i).ErrorCheck then
SystemLog('Item ' + IntToStr(i) + ' ist defekt');
end.
Die ersten Versuche in der Testumgebung funktionieren schon sehr gut. Danke.
Was wird alles von CurrentPlaylist.GetItem(i).ErrorCheck gemacht?
Würdest Du dieses Script alle 5min starten lassen, um eine Playlist
von 60 Elementen (3h) zu prüfen?
Hm, bei jedem Durchlauf des Script kann ich mAirList für 2-3 Sekunden nicht benutzen. Alle Audiodateien sind lokal vorhanden. Ich schätze einmal bei Zugriffen über das Netzwerk kämen noch einige Sekunden dazu.
Frage: Wir machen standardmässig beim laden der Playlist einen ErrorCheck. So erhalte ich bei allen fehlerhaften Elementen ein Icon mit einem Ausrufezeichen.
Kann ich statt CurrentPlaylist.GetItem(i).ErrorCheck auch dieses Ausrufezeichen abfragen, ich gehe davon aus, dass bereits gültige Elemente nicht mehr ungültig werden. Anschliessend prüfe ich nur noch die Elemente mit den Ausrufezeichen mit CurrentPlaylist.GetItem(i).ErrorCheck.