Script: Wenn Player startet->alle als gespielt markierten elemente in der pl DEL

HAllo!

Ich bräuchte bitte die Hilfe für ein Script;)

Und zwar möchte ich, dass wenn ich einen Player der Playlist 1 starte, alle als gespielt markierten elemente in der playlist gelöscht werden. ist das möglich ( zwinker flashlighter :wink: )

Lg mike

ich würde dir für das nächste mal einen besseren Titel für das Themka empfehlen!

danke für den tipp :wink: ich bin nämlich am verzweifeln, weil ich es nicht zusammenbringe. ich habe da parameter gefunden wie " MaxHistoryCount" und habe versucht es mit der zu lösen, nur leider hat es nicht geklappt … :frowning:

hi,

[code]procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
var i: integer;
begin
for i := 0 to CurrentPlaylist.GetCount-1 do begin
if (currentPlaylist.getItem(i).GetHistoryFlag) then begin
CurrentPlaylist.Delete(i);
end;
end;
end;

begin
end.[/code]

ungetestet…

grüße, michi

Die Idee war richtig. Funktioniert so aber nicht, weil sich nach dem Delete die Anzahl und die Indizierung der Elemente ändert. Es wird also zunächst jedes zweite übersprungen, und am Ende kriegst du einen “List index out of bounds”. Stattdessen muss man eine while-Schleife nehmen und darf den Counter nur dann erhöhen, wenn man kein Delete macht.

procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
var i: integer;
begin
  i :=;
  while (i < CurrentPlaylist.GetCount) do begin
    if (currentPlaylist.getItem(i).GetHistoryFlag) then begin
      CurrentPlaylist.Delete(i)
    else
      inc(i);
  end;
end;

begin
end.

Weiterhin ist zu beachten, dass es sein kann, dass sich eine Element nicht löschen lässt (Delete() gibt false zurück). Das passiert aber nur dann, wenn das Element in einen Player geladen ist, was bei History-Elementen nicht passieren dürfte.

Hier mal zum Vergleich ein Stück Original-Sourcecode, und zwar die Stelle, wo die History aufgeräumt wird:

function CleanUpHistory: boolean;
var
  i: integer;
  canDelete: boolean;
begin
  Result := false;
  i := 0;
  while (i < fPlaylist.Count) and ((fMaxHistoryCount = 0) or (fMaxHistoryCount < fPlaylist.HistoryCount)) do begin
    if fPlaylist[i].HistoryFlag then begin
      canDelete := true;
      PlaylistBeforeDelete(i, false, canDelete);
      if canDelete then begin
        fPlaylist[i].HistoryFlag := false;
        fPlaylist.Delete(i);
        Result := true;
        continue;
      end;
    end
    else if (plcoCleanupHistoryTop in fOptions) then break;
    inc(i);
  end;
end;

Torben

Danke für eure Hilfe. Ich habe mich jetzt eingelesen und es selbst so geschafft:

[code]procedure OnPlayerStart ( PlayerControl : IPlayerControl ; Item : IPlaylistItem );

begin
PlaybackControl(0).SetMaxHistoryCount(1);
end;

begin
end.[/code]

[code]procedure OnPlayerStop ( PlayerControl : IPlayerControl ; Item : IPlaylistItem ; Duration : int64 ) ;

begin
PlaybackControl(0).SetMaxHistoryCount(50);
end;

begin
end.[/code]

es funktioniert so auch;)
Dabei bleibt ein History element beim Playerstart stehen und bei Player stop bleiben alle historys stehen :wink:

Lg Mike

Achja. Habe ich es übersehen oder gibt es keinen Befehl im Skript wo ich die Playlisthintergrundfarbe ändern kann? z.B wenn die Playlist leer ist ?

PS bin grad uure happy, weil ich ein Script geschrieben habe, dass immer nur 1 Player - PFL spielen kann ;D

[code]procedure OnPFLOn ( PlayerControl : IPlayerControl ; Item : IPlaylistItem ; PFLCount : integer ) ;

begin
if (PlayerControl.GetCaption = ‘MAL1’) then begin
PlaybackControl(0).PFLOff(1);
PlaybackControl(1).PFLOff(0);
end;
if (PlayerControl.GetCaption = ‘MAL2’) then begin
PlaybackControl(0).PFLOff(0);
PlaybackControl(1).PFLOff(0);
end;
if (PlayerControl.GetCaption = ‘EVENT’) then begin
PlaybackControl(0).PFLOff(0);
PlaybackControl(0).PFLOff(1);
end;
end;

begin
end.[/code]

Mairlist Script ist sooooooooooo super!!! WOW gg ( aber nur wenn mans endlich verstanden hat ) :wink:

LG Mike

nachtrag:

ich habe das Script ändern müssen, weil bei einem Fade von A zu B ja der Player gestoppt wird. Hier der Code der jetzt einwandfrei funktioniert: ( bei einer Playlist mit 2 Playern )

[code]procedure OnPlayerStop ( PlayerControl : IPlayerControl ; Item : IPlaylistItem ; Duration : int64 );
begin
if (PlaybackControl(0).GetPlayer(0).GetState<>PS_PLAYING) and
(PlaybackControl(0).GetPlayer(1).GetState<>PS_PLAYING) then begin
PlaybackControl(0).SetMaxHistoryCount(50);
end;
end;

begin
end.[/code]

Code für Playerstart:

[code]procedure OnPlayerStart ( PlayerControl : IPlayerControl ; Item : IPlaylistItem );

begin
PlaybackControl(0).SetMaxHistoryCount(1);
end;

begin
end.[/code]

@Torben:

  1. Wieso funktioniert das Beispiel Script von dir “PlaylistEmpty.mls” nur , wenn der Automationsmodus aktiviert ist?!?!?!?!?!? ich habe einen befehl gesucht, wo ich dazu schreiben kann, dass das auch im Assist modus sein soll, habe aber diesen nicht gefunden, es gibt nur einen für automation.

  2. Achja. Habe ich es übersehen oder gibt es keinen Befehl im Skript wo ich die Playlisthintergrundfarbe ändern kann? z.B wenn die Playlist leer ist ?

das würde ich auch interesannt finden !!!

Danke!!!

LG Mike

  1. Das wird wirklich nur in der Automation aufgerufen, als Teil der Automations-Update-Schleife, die dann läuft. Im Assist-Modus sollte es dem Moderator auch auffallen, wenn die Playlist leer ist, oder? Das Script ist eh nur für den Notfall/Havarie gedacht.

  2. Script haben derzeit keinen Zugriff auf die GUI-Objekte.

@Torben:

Hey!

Zu 1) Danke für die Antwort! Ich würde es auch gern für den Assist-Modus verwenden. Wie muss ich das umschreiben? Oder ist das nicht möglich?

LG Mike

Nein, geht leider nicht ohne weiteres.

ok.

lg mike