Ich habe hier schon sehr herumgesucht, komme beim Auslesen von Atrributen aber nicht weiter:
var
Item: IPlaylistItem;
Meta: IMetaDataHandler;
Data: string;
begin
Item := CurrentPlaylist.GetItem(0);
Meta := Factory.CreateMetaDataHandler(Item.AsFile);
Data := Meta.GetTagData('Album');
SystemLog(Data);
end.
Laufen tut es, freilich nicht mit dem gewüschten Ergebnis, es wird nur eine leere Zeile ins Log geschrieben. Bin ich auf dem falschen Dampfer? Heißen die Attribute auch so, wie sie in der Datenbank angezeigt werden (also nicht etwa 'Year' statt 'Jahr' usw.)?
Darf ich gleich noch eine Frage anhängen? Ebenfalls nur in der Playlist ein „Custom Tag“ anhängen, beschreiben und auslesen, nur für die Funktion „hab ich schon behandelt, brauche ich nicht mehr“. Ebenfalls so schlank?
Kann ich die mit GetAttributes ausgelesenen Attribute auch komplett in ein anderes/neues Element zurückschreiben? (Ein SetAttributes kann ich nicht finden.)
Die Methode GetAttributes ist erstmal nur der Zugriff auf das Attribute-Objekt (vom Typ IStrings, also eine StringList mit Einträgen der Form key=value). Deswegen gibt es kein SetAttributes, sondern man verwendet die Set...-Methoden des zurückgelieferten IStrings-Objektes.
Für das Umkopieren gibt es die Methode IStrings.Assign:
Leider unterstützt Pascal Script keine Properties für Interfaces, daher muss man immer explizit die Getter und Setter aufrufen. In Delphi kann ich direkt schreiben:
Item1.Attributes.Assign(Item2.Attributes);
Bei einer Property handelt es sich um ein virtuelles Feld/Eigenschaft, das automatisch die passende Get/Set-Methode aufruft je nachdem, ob man es lesend oder schreibend verwendet. So sind in Delphi auch die folgenden Aufrufe identisch: