Codebeispiele mAirListScript

aber das geht an und für sich - siehe ein paar zeilen weiter oben

grüße

markus

mit mairlist? nö noch nicht… erst wenn es tw einbaut…

Dazu muss ich aber zumindest vorübergehend eine solche Karte vorliegen haben.

kann ich dir zur verfügung stellen ;))

musst hald nur sagen wohin damit.

das bekomm ich aber eh wieder zurück oder? :wink:

MAYDAY…

Ich komm mit den neuen scripten nicht zurecht…
Wie kann ich den akttuellen titel und die folgenden 5 tietel in eine .php datei schreiben

wie hier… das hat so super funktioniert ;((((
ich weiß echt nicht weiter… kann mir da wer helfen?

[code]var n: INotification;
pi: IPlaylistItem;
sl: TStringList;
pi2: IPlaylistItem;
pi3: IPlaylistItem;
pi4: IPlaylistItem;
pi5: IPlaylistItem;

begin
n := GetNotification;

if (n.GetNotificationType = ntMask) then

SetNotificationTypes([ntPlayerStart])

else
if (n.GetNotificationType = ntPlayerStart) then begin
pi := IPlaylistItem(n.GetInterface(1));
pi2 := CurrentPlaylist.GetItem(2);
pi3 := CurrentPlaylist.GetItem(3);
pi4 := CurrentPlaylist.GetItem(4);
pi5 := CurrentPlaylist.GetItem(5);

sl := TStringList.Create;
sl.Add('<?php');

sl.Add('$playa1="' + pi.GetArtist + '";');
sl.Add('$playb1="' + pi.GetTitle + '";');
sl.Add('$playc1="' + FormatDateTime('hh:mm:ss', (pi.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd1="' +FormatDateTime('hh:mm:ss', pi.GetStartTime)+ '";');

sl.Add('$playa2="' + pi2.GetArtist + '";');
sl.Add('$playb2="' + pi2.GetTitle + '";');
sl.Add('$playc2="' + FormatDateTime('hh:mm:ss', (pi2.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd2="' + FormatDateTime('hh:mm:ss', pi2.GetStartTime)+ '";');

sl.Add('$playa3="' + pi3.GetArtist + '";');
sl.Add('$playb3="' + pi3.GetTitle + '";');
sl.Add('$playc3="' + FormatDateTime('hh:mm:ss', (pi3.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd3="' + FormatDateTime('hh:mm:ss', pi3.GetStartTime)+ '";');

sl.Add('$playa4="' + pi4.GetArtist + '";');
sl.Add('$playb4="' + pi4.GetTitle + '";');
sl.Add('$playc4="' + FormatDateTime('hh:mm:ss', (pi4.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd4="' + FormatDateTime('hh:mm:ss', pi4.GetStartTime)+ '";');

sl.Add('$playa5="' + pi5.GetArtist + '";');
sl.Add('$playb5="' + pi5.GetTitle + '";');
sl.Add('$playc5="' + FormatDateTime('hh:mm:ss', (pi5.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd5="' + FormatDateTime('hh:mm:ss', pi5.GetStartTime)+ '";');

sl.Add('?>');
sl.SaveToFile('k:\play.php');
sl.Free;

end;
end.[/code]

hi,

die n-scripts haben sich ab version 2.1.X verändert…

probier mal:

[code]

procedure OnPlayerStart(PlayerControl: IPlayerControl; pi: IPlaylistItem);
var sl: TStringList;
pi2: IPlaylistItem;
pi3: IPlaylistItem;
pi4: IPlaylistItem;
pi5: IPlaylistItem;
begin
pi2 := CurrentPlaylist.GetItem(2);
pi3 := CurrentPlaylist.GetItem(3);
pi4 := CurrentPlaylist.GetItem(4);
pi5 := CurrentPlaylist.GetItem(5);

sl := TStringList.Create;
sl.Add('<?php');

sl.Add('$playa1="' + pi.GetArtist + '";');
sl.Add('$playb1="' + pi.GetTitle + '";');
sl.Add('$playc1="' + FormatDateTime('hh:mm:ss', (pi.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd1="' +FormatDateTime('hh:mm:ss', pi.GetStartTime)+ '";');

sl.Add('$playa2="' + pi2.GetArtist + '";');
sl.Add('$playb2="' + pi2.GetTitle + '";');
sl.Add('$playc2="' + FormatDateTime('hh:mm:ss', (pi2.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd2="' + FormatDateTime('hh:mm:ss', pi2.GetStartTime)+ '";');

sl.Add('$playa3="' + pi3.GetArtist + '";');
sl.Add('$playb3="' + pi3.GetTitle + '";');
sl.Add('$playc3="' + FormatDateTime('hh:mm:ss', (pi3.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd3="' + FormatDateTime('hh:mm:ss', pi3.GetStartTime)+ '";');

sl.Add('$playa4="' + pi4.GetArtist + '";');
sl.Add('$playb4="' + pi4.GetTitle + '";');
sl.Add('$playc4="' + FormatDateTime('hh:mm:ss', (pi4.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd4="' + FormatDateTime('hh:mm:ss', pi4.GetStartTime)+ '";');

sl.Add('$playa5="' + pi5.GetArtist + '";');
sl.Add('$playb5="' + pi5.GetTitle + '";');
sl.Add('$playc5="' + FormatDateTime('hh:mm:ss', (pi5.GetDuration/10000000)/(24*60*60)) + '";');
sl.Add('$playd5="' + FormatDateTime('hh:mm:ss', pi5.GetStartTime)+ '";');

sl.Add('?>');
sl.SaveToFile('k:\play.php');
sl.Free;

end;

begin
end.[/code]

ungetestet, da gerade kein windows zur hand…

grüße, michi

Hallöle!
Ich brauch n bisschen Nachhilfe. Ich wollte mal das Script NowPlaying von Torben ausprobieren. Ich hab mal reingeguck, danach müsste ja die HTML Datei unter C:\ sein. Ich hab also das Script ins Konfigurations-Programm geladen und später in mairlist unter Aktionen auf NowPlaying geklickt. Nichts passierte: Weder das ich was sah noch das unter C:\ einen Datei war. Ich habe es dann noch mit Event ausprobiert auch nichts!
Was mache ich falsch? Ich habe am Script nichts verändert.
Helau! und Danke für Hilfe :slight_smile:

das script geht nur wenn die player geladen sind…

ps. script funzt! THX!!! aber wie bau ich das getcount in das script ein… wenn weniger als 5 titel in der playlist sind?

RadioModerator,

es handelt sich hier um ein sogenanntes “Notification Script”, das automatisch von mAirList aufgerufen wird. Du musst es nur einmal in der Config registrieren.

Wäre ja auch blöd, wenn man zum Aktualisieren der Playlist erst lange im Menü rumklicken muss, oder? :wink:

Torben

oops hab mich verlesen…

aber wie bau ich das getcount in das script ein... wenn weniger als 5 titel in der playlist sind?

indem du

if (CurrentPlaylist.GetCount>4) then begin
"hier das script"
end;

reinfügst. der bauch der bedingung (da wo das “hier das script” steht), wird dann nur ausgeführt, wenn die bedingung wahr ist. also in deinem fall wenn mehr als 4 elemente in der playlist sind (also mindestens 5).

jetzt kommts halt drauf an, was du anzeigen lassen willst, wenn weniger als die 5 titel drin sind…

willst du die anderen titel, die noch drin sind, anzeigen lassen, würde das script etwa so aussehen:

[code]
procedure OnPlayerStart(PlayerControl: IPlayerControl; pi: IPlaylistItem);
var sl: TStringList;
pi2: IPlaylistItem;
pi3: IPlaylistItem;
pi4: IPlaylistItem;
pi5: IPlaylistItem;
begin
pi2 := CurrentPlaylist.GetItem(2);
pi3 := CurrentPlaylist.GetItem(3);
pi4 := CurrentPlaylist.GetItem(4);
pi5 := CurrentPlaylist.GetItem(5);

sl := TStringList.Create;
sl.Add(‘<?php'); if (CurrentPlaylist.GetCount>0) then begin sl.Add('$playa1="' + pi.GetArtist + '";'); sl.Add('$playb1="' + pi.GetTitle + '";'); sl.Add('$playc1="' + FormatDateTime('hh:mm:ss', (pi.GetDuration/10000000)/(24*60*60)) + '";'); sl.Add('$playd1="' +FormatDateTime('hh:mm:ss', pi.GetStartTime)+ '";'); if (CurrentPlaylist.GetCount>1) then begin sl.Add('$playa2="' + pi2.GetArtist + '";'); sl.Add('$playb2="' + pi2.GetTitle + '";'); sl.Add('$playc2="' + FormatDateTime('hh:mm:ss', (pi2.GetDuration/10000000)/(24*60*60)) + '";'); sl.Add('$playd2="' + FormatDateTime('hh:mm:ss', pi2.GetStartTime)+ '";'); if (CurrentPlaylist.GetCount>2) then begin sl.Add('$playa3="' + pi3.GetArtist + '";'); sl.Add('$playb3="' + pi3.GetTitle + '";'); sl.Add('$playc3="' + FormatDateTime('hh:mm:ss', (pi3.GetDuration/10000000)/(24*60*60)) + '";'); sl.Add('$playd3="' + FormatDateTime('hh:mm:ss', pi3.GetStartTime)+ '";'); if (CurrentPlaylist.GetCount>3) then begin sl.Add('$playa4="' + pi4.GetArtist + '";'); sl.Add('$playb4="' + pi4.GetTitle + '";'); sl.Add('$playc4="' + FormatDateTime('hh:mm:ss', (pi4.GetDuration/10000000)/(24*60*60)) + '";'); sl.Add('$playd4="' + FormatDateTime('hh:mm:ss', pi4.GetStartTime)+ '";'); if (CurrentPlaylist.GetCount>4) then begin sl.Add('$playa5="' + pi5.GetArtist + '";'); sl.Add('$playb5="' + pi5.GetTitle + '";'); sl.Add('$playc5="' + FormatDateTime('hh:mm:ss', (pi5.GetDuration/10000000)/(24*60*60)) + '";'); sl.Add('$playd5="' + FormatDateTime('hh:mm:ss', pi5.GetStartTime)+ '";'); end; end; end; end; end; sl.Add('?>’);
sl.SaveToFile(‘k:\play.php’);
sl.Free;
end;

begin
end.[/code]

schonwieder ungetestet;)

grüße, michi

Alternativ (und eleganter) könnte man das auch in einer Schleife unterbringen …

Hi,
ich hatte es schon unter Aktions-scripts regestriert!
Oder muss es bei benachrichtigungs-scrpits hin?

bei benachrichtigungsscripts…

Danke für die Hilfe!

bitte;)

hier das elegante;) script mit schleife:

procedure OnPlayerStart(PlayerControl: IPlayerControl; item: IPlaylistItem);

var sl: TStringList;
    i: Integer;
    pi: Array[1..5] of IPlaylistItem;
begin
  pi[1] := item;
  pi[2] := CurrentPlaylist.GetItem(2);
  pi[3] := CurrentPlaylist.GetItem(3);
  pi[4] := CurrentPlaylist.GetItem(4);
  pi[5] := CurrentPlaylist.GetItem(5);

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

begin
end.

Hallo Torben,
schön wäre es (hätte es auch unter Featuren Request schreiben können, aber weil es eigentlich zu diesem NowPlaying gehört. Es wäre schön wenn man auf dauer im FileTagger dem Item ein Tym zuordnen kann z.B Lied, Jingle, Beitreg und das Script so umprogrammiern kann das nur Lieder angezeigt werden. Wäre gut!
Vielen Dank!
RadioModerator

was will man mehr
mega THX flashlighter!!!

lg manu

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

sprachlos…