• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Vergleich von 2 Ortsangaben

plaetzchen

Kaiserapfel
Registriert
21.10.05
Beiträge
1.729
Hallo!

Ich versuche den Ort von dateien mit einander zu vergleichen. Ich frage itunes und ich frage den Finder. Es sollte eigentlich immer die selbe liste rauskommen, wenn alles gleich ist.
Wenn ich es so mache:

set itunes to 0
set finder to 0
tell application "iTunes"
copy location of every track of playlist "Einkäufe" to itunes
end tell
tell application "Finder"
copy every item of folder "MUSIK:Einkäufe" to finder
end tell

Dann kriege ich von iTunes so etwas zurück:
{alias "250GB:iTunes:iTunes Music:Sportfreunde Stiller:'54, '74, '90, 2006 - EP:01 '54, '74, '90, 2006.m4p", alias "250GB:iTunes:iTunes Music:3 Doors Down:Unbekanntes Album:Here Without You.m4v", alias "250GB:iTunes:iTunes Music:200 Sachen:Sekt zum Frühstück - Single:01 Sekt zum Frühstück.m4p"}

und von Finder so etwas:

{document file "01 '54, '74, '90, 2006.m4p" of folder "Einkäufe" of disk "MUSIK" of application "Finder", document file "01 A Horse with No Name.m4p" of folder "Einkäufe" of disk "MUSIK" of application "Finder"}

Wie kann ich das machen das beide Programme die Orte gleich angeben? Sonst lohnt siche der Vergleich ja nicht.
 

pete

Gast
Interessantes Problem.

mit "every ..." erhält man meist eine Liste. Aber je nachdem, welches Programm man befragt, können die einzelnen Elemente der Liste unterschiedlichen Typs sein. In Deinem Beispiel sind das die beiden Typen "Alias" und "Dokument File".

Man kann die abgefragten Werte von Listen nicht als Ganzes in einen anderen Typ wandeln. Aber man kann sie in einer repeat-Schleife ändern.

Was willst Du eigentlich tun?

----
edit

Für den Finder/das System ist die feine Unterscheidung zwischen "Alias" und "Document File" sehr wahrscheinlich völlig egal, wenn die Listen mit Finder/System verglichen werden sollen.

Beide verweisen auf Dateien und letztlich werden damit File IDs nachgewiesen/erzeugt. "Alias" kann allerdings nur für tatsächlich existierende Daten angewendet werden, während eine "file reference" auch für nicht existierende Daten etabliert werden kann. Ich hoffe, das hilft Dir weiter.

Der Inhalt der Listen aus Deinen Beispielen ist nur eine "Darstellungsform" der eigentlichen Verweise. Ignoriere das einfach und vergleiche die Listen. Das wird schon klappen.
 
Zuletzt bearbeitet von einem Moderator:

plaetzchen

Kaiserapfel
Registriert
21.10.05
Beiträge
1.729
Nein das klappt ja eben nicht. Wenn ich das durch eine if Schleife laufen lasse, mit der Bedingung das er etwas machen soll, wenn die eine Liste anders als die andere ist, dann wird die Bedingung immer erfüllt.
In OS 9 konnte man doch typen von Variablen umwandeln, geht das nicht auch?
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Hallo Plaetzchen,

ja, klar kann man auch unter OS X Variablen 'verwandeln'. So in etwa könnte das aussehen:

Code:
tell application "iTunes"
	tell playlist "Einkäufe"
		set itunes_list to location of tracks
	end tell
end tell

tell application "Finder"
	set finder_list to (items of folder "MUSIK:Einkäufe")
end tell
repeat with fil in finder_list
	if not ((fil as Unicode text as alias) is in itunes_list) then
		beep
		display dialog "fehlt: " & fil as Unicode text
	end if
end repeat

Ich hoffe, das hilft dir?

Grüße,

D.
 
  • Like
Reaktionen: plaetzchen

plaetzchen

Kaiserapfel
Registriert
21.10.05
Beiträge
1.729
Ja das hilft extrem. Danke! Werde es bei Gelegheit mal austesten, hab leider grade wenig Zeit.
 

plaetzchen

Kaiserapfel
Registriert
21.10.05
Beiträge
1.729
Also jetzt gibt es ein klenes Problem. Ich haabe das so niedergeschrieben:

tell application "iTunes"
tell playlist "Alle Einkäufe"
set itunes_list to location of tracks
end tell
end tell
tell application "Finder"
set finder_list to (items of folder "MUSIK:Einkäufe")
end tell
repeat with fil in finder_list
if not ((fil as Unicode text as alias) is in itunes_list) then
tell application "iTunes"
delete playlist "Alle Einkäufe"
set thePlaylist to (make new playlist)
set name of thePlaylist to "Alle Einkäufe"
add "MUSIK:Einkäufe" to playlist "Alle Einkäufe"
end tell
end if
end repeat

Die Bedingung wird, wenn nicht grade immer wieder was einfügt, immer erfüllt. Ich würde es gerne so machen:

tell application "iTunes"
tell playlist "Alle Einkäufe"
set itunes_list to location of tracks
end tell
end tell
tell application "Finder"
set finder_list to (items of folder "MUSIK:Einkäufe")
end tell
repeat with fil in finder_list
if not ((fil as Unicode text as alias) is in itunes_list) then
tell application "iTunes"
add fil to playlist "Alle Einkäufe"
end tell
end if
end repeat

Aber so geht das nicht, dann gibt es immer ne Fehlermeldung. Geht das denn? Das wäre nämlich irgendwie effizienter bei 550 Files ;)
 

plaetzchen

Kaiserapfel
Registriert
21.10.05
Beiträge
1.729
So jetzt aber, ich hab die Lösung gefunden, der Script braucht zwar ein wenig, aber egal:

Code:
tell application "iTunes"
	tell playlist "Alle Einkäufe"
		set itunes_list to location of tracks
	end tell
end tell
tell application "Finder"
	set finder_list to (items of folder "MUSIK:Einkäufe")
end tell
repeat with fil in finder_list
	if not ((fil as Unicode text as alias) is in itunes_list) then
		tell application "iTunes"
			add (fil as Unicode text as alias) to playlist "Alle Einkäufe"
		end tell
	end if
end repeat

So. Wenn ich das jetzt noch mit nem "Hotfolder" zusammenbringen kann, wäre es natürlich noch besser, aber so reicht das auch erst ein mal. Danke für alle Helfer!