Variablen für "InterneID" und "Dateipfad" ermitteln

Ich möchte gerne Variablen in einem Script verwenden und zwar

  • die interne ID des im Player gespielten Ttitels
  • den Dateipfad des gespielten Titels inkl. Dateinamen also z.B: c:\pfad\titel.mp3

Diese Variablen möchte ich dann gerne in eine Procedure übermitteln.

Hierzu habe ich zwei Fragen:

  1. Kann mir jemand hierfür eine Lösung aufzeigen?
  2. Gibt es eine Liste der verfügbaren Variablen in mairlistscript?

Ich bedanke mich schon einmal für sachdienliche Antworten.

Gruß, Roland

Lieber @RolandRadio,

Du schreibst im anderen Faden sehr richtig, hier sei ein Support-Forum. Jedoch besteht das Wesen eines solchen darin, daß sich die Mitglieder der sog. Community freiwillig und überwiegend ehrenamtlich hier engagieren. Es beruht auf Geben und Nehmen. Leute, die eine Frage haben, weil sie irgendwo nicht weiterkommen, haben – das liegt in der Natur der Sache – zunächst jedoch nichts zu geben, außer: Höflichkeit.

Und genau solche Umgangsformen wie Du sie an den Tag gelegt hast, vermiesen mir wiederum die Teilnahme an diesem Forum. Denn mit Großbuchstaben und vielen Ausrufezeichen gerät das Verhältnis von Geben und Nehmen in Schieflage. Und mir vergeht die Lust, denn ich kann meine Freizeit auch angenehmer verplempern als mich anmotzen zu lassen. (Vielleicht warst Du Dir dessen nicht bewußt, aber ich habe es so empfunden.) Und wie Du vielleicht festgestellt hast, ist mir die Lust erst vergangen, als Du die Kommunikation auf „respektlos“ umgestellt hast.

Nenne Du es „Kindergarten“, ich nenne es „Kinderstube“. (Falls Du weißt was das ist.)


Wie auch immer: So sieht eine höfliche Anfrage aus, mit der ich parat gehe! Und vielen Dank dafür, denn dann habe ich mir die Mühe (ja, es bereitete mir solche!) nicht vergeblich gemacht:

var
  Pfad, ID: string;
  Item: IPlaylistItem

// Pfad eines Elements herausfinden:
  Pfad := IFilePlaylistItem(Item).GetFilename;

// ID eines Elements in der mAirListDB herausfinden:
  ID := Item.GetDatabaseID;

Das funktioniert, ich habe es bei mir ausprobiert.

 

Zu 2. habe ich Dir nebenan bereits geantwortet.


Österliche Grüße

TSD

1 Like

Ich versuche es erneut mit einem gut gemeinten und höflichen Appell:
Bitte unterlasst persönliche Angriffe im Rahmen der Hilfestellung.

Ich möchte nicht zu moderativen Maßnahmen greifen müssen.

Im übrigen ist crossposting auch nicht gerade sinnhaft.

Vielen Dank.

Kein Angriff, sondern Erklärung.

 

Bin dann auch mal weg.

Schöne Ostern.

Gut. Versuchen wir es noch einmal :slight_smile:
Danke erstmal für die zwei Angaben.

Ich habe keinen Plan von der Programmiersprache die hier zum Einsatz kommt, weswegen ich mit der Syntax nicht vertraut bin. Daher brauche ich etwas unterstützung. Meiner Logik nach müsste das Script so funktionieren:

const
COMMAND = 'C:\rolandradio\scripts\test.bat';

var
  PATH, ID: string;
  Item: IPlaylistItem

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; 
  Item: IPlaylistItem);
begin
PATH := IFilePlaylistItem(Item).GetFilename;
ID := Item.GetDatabaseID;
ShellExecute('cmd.exe', '/c' + Chr(32) + COMMAND + Chr(32) + PATH + Chr(32) + ID);
end;

begin
end.

tut es aber nicht. Ich vermute, ich muss ich die Variablen der Prozedur übergeben und mit in die Klammer packen, verstehe aber schon nicht, warum Path, ID: string als Variable mit einem ; beendet wird und Item: IPlaylistItem hinigegen nicht.

Das Script wirft keinen Fehler, funktioniert aber so auch nicht.

Könntest Du dir das bitte angucken und mir sagen, was ich falsch mache?

Gruß
Roland

Also ich habe das Script jetzt soweit geprüft indem ich jede einzelne Zeile auskommentiert habe und denn einzeln wieder einkommentiert habe um einen Fehler zu bekommen. Leider erhalte ich keine Fehlermeldung aber das Script funktioniert nicht, sobald ich zu der Zeile

PATH := IFilePlaylistItem(Item).GetFilename;

komme. Dann bricht das ab - wie gesagt leider ohne Fehlermeldung.
Sobald ich den oben genannten Bereich auskommentiere funktioniert es nicht mehr,
So sieht das “funktionierende” Script bisher aus.

const
COMMAND = 'C:\rolandradio\scripts\test.bat';
CON1= 'PAUL';
CON2 = 'RAINER';

var
PATH, ID: string;
Item: IPlaylistItem;

// PATH := IFilePlaylistItem(Item).GetFilename;
// ID := Item.GetDatabaseID;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; 
  Item: IPlaylistItem);
begin

// ShellExecute('cmd.exe', '/c' + Chr(32) + COMMAND + Chr(32) + PATH + Chr(32) + ID);
ShellExecute('cmd.exe', '/c' + Chr(32) + COMMAND + Chr(32) + CON1 + Chr(32) + CON2);
end;

begin
end.

Da das Item erst von der Prozedur OnPlayerStart übergeben wird, kannst Du erst dort (= darin) etwas damit anfangen. Dafür kannst Du Dir die Deklaration unter var sparen. (Du hattest Item deklariert, aber ihm/ihr noch keinen Wert zugewiesen.) Es müßte also etwa lauten:

const
  COMMAND = 'C:\rolandradio\scripts\test.bat';
  CON1= 'PAUL';
  CON2 = 'RAINER';

var
  PATH, ID: string;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; 
  Item: IPlaylistItem);
begin
  PATH := IFilePlaylistItem(Item).GetFilename;
  ID := Item.GetDatabaseID;
  ShellExecute('cmd.exe', '/c' + Chr(32) + COMMAND + Chr(32) + PATH + Chr(32) + ID);
end;

begin
end.


Die verwendete Sprache lehnt sich sehr an Delphi/TurboPascal an, deckt aber nicht den vollen Umfang ab. Was genau dann nicht geht, merkt man erst beim Programmieren. Die grundlegenden Funktionalitäten sind aber alle enthalten. Eine sehr gute Zusammenfassung derer findet sich [hier](http://www.delphibasics.co.uk/).

Zurechtgerückte Grüße

TSD


Edit: Warum jetzt dieser Link nicht funktioniert, weiß der Bäcker.

Danke soweit. Es werden jetzt werte übergeben, diese sind aber “merkwürdig” und entsprechen nicht den Werten die ich erwarten würde.

Das Script liefert als Ergebnis:

copy C:\rolandradio\music\Jonathan c:\test\Dunn.mp3

Übergeben wurden also
C:\rolandradio\music\Jonathan
und
Dunn

Dunn müsste aber eigentlich die ID 11948 sein.
Der Pfad hingegen müsste eigentlich
C:\rolandradio\music\Jonathan Dunn - Darkman - Theme 4.flac

Ich vermute jetzt durch die Trennung an dem Leerzeichen das Problem eher in meiner Batch-Datei die eben den Wert schon bekommt aber falsch den Splits zuweist. Sprich es scheint erstmal zu funktionieren, jetzt muss ich noch heraus-googeln wie ich eine Variable in “” übergeben kann an meine Batch.

Danke erstmal

So. Durch das Hinzufügen von " in der Ausgabe funktioniert es nun wie gewünscht:

ShellExecute('cmd.exe', '/c' + Chr(32) + COMMAND + Chr(32) + '"' + PATH + '"' + Chr(32) + ID);

Das Ergebnis ist jetzt

copy "C:\rolandradio\music\Jonathan Dunn - Addams Family.flac" c:\test\11943.mp3

Und damit fange ich endlich etwas an.

Dankeschön! Und noch schöne Restostern

Roland

1 Like