[gelöst] Automatische Element-Aktualisierung

Hallo Torben

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.
  • Intervall von x min
  • mAirList Script?

Liebe Grüsse
Michel

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”.

Torben

Erstmals Danke.

Wollte soben Dein Script testen:

Unknown identifier ‘GETONAIR’

Kann es sein, dass anstelle der Class “PlaybackControl” die Class “Engine” verwendet werden muss. (mAirListScript.chm)

Wie kann ich diese Class ansprechen?

Danke Michel

Stimmt, es muss die Engine sein. Leider hab ich bislang vergessen, die über die Scripte zugreifbar zu machen. Hole ich noch nach.

Du merkst, ich hab derzeit viel zu tun und kann nicht alle Anfragen sofort bearbeiten.

Die Funktion (heißt schlicht “Engine”), die einen Zeiger auf die Engine zurückgibt, wird es ab v2.1.27 geben.

Ganz herzlichen Dank für Deine Bemühungen.

Habe mal weiter gescriptet:

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.

Danke Michel

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.

Cool, werde dies nun gründlich austesten. Und sehen ob ich ans Ziel komme.

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?

Die Datei wird testweise in einen (nicht sichtbaren) Player geladen und es wird geschaut, ob die BASS.DLL einen Fehler zurückgibt.

Ich würde das Script einmal nach dem Laden der Playlist ausführen.

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.

Dies würde das ganze Script beschleunigen.

Gibt es ein CurrentPlaylist.GetItem(i).Icon oder muss ich function GetPicture : TPicture nutzen?

Den Fehlerstatus kannst du mit GetDisabled abfragen. Dieses Flag wird von ErrorCheck gesetzt, falls das Element fehlerhaft ist.

Zur anderen Frage: Ja, GetPicture ist richtig.

Hallo Torben

Ganz herzlichen Dank. Nach GetDisabled habe ich gesucht, dies ist genau das Richtige. Werde nun alles intensiv testen.

Liebe Grüsse
Michel