Codebeispiele mAirListScript

Und weil ich immer das letzte Wort haben muss ;), hier noch ne Runde eleganter:

procedure OnPlayerStart(PlayerControl: IPlayerControl; item: IPlaylistItem);
var sl: TStringList;
    idx, i: Integer;
    pi: IPlaylistItem;
begin
  idx := CurrentPlaylist.IndexOf(item);
  if idx = -1 then begin
    SystemLog('Das war kein Element aus unserer Playlist ...');
    exit;
  end;

  sl := TStringList.Create;
  sl.Add('<?php');
  i := 0;                                                                                                       
  while (idx < CurrentPlaylist.GetCount) and (i < 5) do begin
    pi := CurrentPlaylist.GetItem(idx);
    sl.Add('$playa' +(IntToStr(i)) + '="' + pi.GetArtist + '";');
    sl.Add('$playb' +(IntToStr(i)) + '="' + pi.GetTitle + '";');
    sl.Add('$playc' +(IntToStr(i)) + '="' + FormatDateTime('hh:mm:ss', (pi.GetDuration/10000000)/(24*60*60)) + '";');
    sl.Add('$playd' +(IntToStr(i)) + '="' + FormatDateTime('hh:mm:ss', pi.GetStartTime)+ '";');
    i := i + 1;
    idx := idx + 1;
  end;
  sl.Add('?>');
  sl.SaveToFile('c:\play.txt');
  sl.Free;
end;

begin
end.

Nebenbei noch eine Verbesserung: Das Script sucht erstmal die Position des gerade gestarteten Titels raus. Wenn also davor noch einer in einem noch auf EOF o.ä. stehenden Player ist, wird der ignoriert.

Das ist ganz wichtig, weil ab v2.1.18 die Playlist-History teilweise wieder gehen wird. Die History-Elemente stehen dann weiterhin in der Haupt-Playliste, sind aber als gespielt markiert (abfragbar über IPlaylistItem.GetHistoryFlag). Das kann man dann auch bei der while-Schleife noch berücksichtigen, indem man die Elemente mit GetHistoryFlag=true einfach ignoriert. Dadurch werden dann solche Elemente, die unter dem gerade gestarteten stehen, aber bereits gespielt wurden, bei der Ausgabe rausgefiltert.

while (idx < CurrentPlaylist.GetCount) and (i < 5) do begin pi := CurrentPlaylist.GetItem(idx); if not pi.GetHistoryFlag then begin sl.Add('$playa' +(IntToStr(i)) + '="' + pi.GetArtist + '";'); sl.Add('$playb' +(IntToStr(i)) + '="' + pi.GetTitle + '";'); sl.Add('$playc' +(IntToStr(i)) + '="' + FormatDateTime('hh:mm:ss', (pi.GetDuration/10000000)/(24*60*60)) + '";'); sl.Add('$playd' +(IntToStr(i)) + '="' + FormatDateTime('hh:mm:ss', pi.GetStartTime)+ '";'); i := i + 1; end; idx := idx + 1; end;

Torben