Wie behebe ich meine Apple eine Auswahl von Titeln in iTunes löschen?
-
12-09-2019 - |
Frage
Ich habe das folgende Applescript erstellt alle ausgewählten Tracks zum Löschen:
property okflag : false
-- check if iTunes is running
tell application "Finder"
if (get name of every process) contains "iTunes" then set okflag to true
end tell
if okflag then
tell application "iTunes"
if selection is not {} then
repeat with this_track in selection
try
try
set cla to class of this_track
set floc to (get location of this_track)
delete this_track
on error error_message number error_number
display alert error_message message ("Error number: ") & error_number & "."
end try
if cla is file track then
my delete_the_file(floc)
end if
end try
end repeat
end if
end tell
end if
to delete_the_file(floc)
try
-- tell application "Finder" to delete floc
do shell script "mv " & quoted form of POSIX path of (floc as string) & " " & quoted form of POSIX path of (path to trash as string)
on error
display dialog "Track deleted, but could not be moved to trash" buttons {"Hmm"} default button 1 with icon 1
end try
end delete_the_file
Es funktioniert gut, wenn ich ein einzelnes Element auswählen, aber wenn ich mehr als eine wählen erhalte ich: „Kann nicht Artikelstandort erhält 2 von selection“ (Fehlernummer -1728). Ich glaube, das liegt daran, dass durch eine Spur zu löschen, wird der Index in die Auswahl des Skripts beschädigt ist.
Ich dachte, ich würde versuchen, meine eigene Liste der Tracks machen zuerst gelöscht werden:
tell application "iTunes"
if selection is not {} then
set to_delete to {}
repeat with this_track in selection
try
set cla to class of this_track
set floc to (get location of this_track)
if cla is file track then
set pair to {this_track, floc}
set to_delete to to_delete & pair
end if
end try
end repeat
repeat with pair in to_delete
set the_track to item 1 of pair
set floc to item 2 of pair
delete the_track
my delete_the_file(floc)
end repeat
end if
end tell
Aber ich dann bekommen ‚Kann nicht Punkt 1 von Artikel 1 der Auswahl der Anwendung‚iTunes‘bekommen.‘ Ich denke, das Problem ist „this_track“ nicht ein Objekt der Klasse Track ist, sondern ein Element einer Auswahl. Wie erhalte ich das aktuelle Track-Objekt aus dem Auswahlpunkt?
Wenn Sie die Lösung nicht sehen, ich werde Tipps zum Debuggen begrüßen oder andere Vorschläge.
Lösung
Die Variable this_track
ist ein Verweis auf ein Objekt Spezifizierer. Sie haben die contents
Eigenschaft verwenden, um die eingeschlossenen Objekt Spezifizierer zu erhalten. Das gleiche gilt für die variable pair
in der zweiten Schleife erreichbar. Siehe den Klassenreferenzabschnitt auf der Klasse reference
im Apple Sprachführer .
Ein weiteres Problem besteht in der Art und Weise der Liste to_delete
gebaut wird. Die Aussage set to_delete to to_delete & pair
wird nicht eine Liste von Paaren, sondern eine flache Liste erzeugen. Siehe den Klassenreferenzabschnitt auf der Klasse list
im Apple Sprachführer .
Hier ist eine Version des zweiten Skript, wo diese Fehler wurden entfernt:
tell application "iTunes"
if selection is not {} then
set to_delete to {}
repeat with this_track in selection
try
set cla to class of this_track
set floc to (get location of this_track)
if cla is file track then
set pair to {contents of this_track, floc}
copy pair to end of to_delete
end if
end try
end repeat
repeat with pair in to_delete
set the_track to item 1 of contents of pair
set floc to item 2 of contents of pair
delete the_track
my delete_the_file(floc)
end repeat
end if
end tell