[GastForen Programmierung/Entwicklung AppleScript iTunes: Droplet zur Erstellung von ...

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

5. Nov 2007, 17:26
Beitrag # 1 von 17
Bewertung:
(2396 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

es mag vielleicht etwas dreist sein, sich im Netz ein Script zu suchen und dann, wenn es nicht funktioniert, in einem Forum auch noch nachzufragen, warum nicht.

Da das Script jedoch sehr übersichtlich ist, wage ich es aber mal. :-)

Es geht um das Script "Playlist Creator". Zu finden auf [url=http://dougscripts.com/itunes/scripts/scripts06.php?page=3]http://dougscripts.com/itunes/scripts/scripts06.php?page=3

Dieses Droplett soll mit ziehen eines Ordner eine Wiedergabeliste in iTunes mit dem Inhalt des Ordners anlegen. Der Ordner-Name wird als Name der Wiedergabeliste verwendet, was auch klappt. Jedoch werden keine Dateien eingefügt. Wähle ich im Dialog den Button "Show Tracks" erhalte ich die Fehlermeldung "Die Liste ist leer".

Was kann das sein?

Dank und Gruß
Bernhard
X

iTunes: Droplet zur Erstellung von ...

Hans Haesler
  
Beiträge gesamt: 5826

5. Nov 2007, 19:48
Beitrag # 2 von 17
Beitrag ID: #422091
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernhard,

das Script erwartet Dateien, deren 'file type' die Buchstaben "mp" enthalten:
---
set alltracks to every file in each_item whose file type contains "mp"
---
Trifft dies nicht zu, dann bleibt die Liste leer, auch wenn es sich um ".mp3"-Dateien handelt. Auf einer Partition habe ich alte ".mp3"-Dateien. Doch als Datei-Typ geben diese "????" zurück. Kann nicht klappen. Ausser das Script wird entsprechend abgeändert.

Dann habe ich eine Menge neuerer Musik-Files, doch das sind allesamt MPEG-4-Dinger. (Suffix ".m4a" und Datei-Typ "M4A "). Das Droplet diesen Voraussetzungen angepasst und ein Testordner darauf gezogen. Ergebnis: Die Liste enthält die Titel, die Wiedergabeliste wird wie erwartet erstellt.

Gruss, Hans


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

5. Nov 2007, 20:35
Beitrag # 3 von 17
Beitrag ID: #422092
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen lieben Dank für deine Antwort!

Wenn ich meine mp3-Dateien mit File-Info betrachte hat es auch den Type "????".

Ist bestimmt nicht die eleganteste Lösung: Habe statt "mp" nur "" geschrieben, Nun geht's. :-)

Dank und Gruß
Bernhard


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Hans Haesler
  
Beiträge gesamt: 5826

5. Nov 2007, 20:51
Beitrag # 4 von 17
Beitrag ID: #422093
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernhard,

bitteschön.

Bei solch einer "Lösung" spricht man nicht mehr von deren Eleganz, sondern eher vom Risiko, welches eingehandelt wird. ;-)

Und jetzt – da es geht –, was bleibt noch zu tun? Richtig: $chnell dem lieben $kriptautoren (Paul Withey) eine $pende zukommen lassen ...

Gruss, Hans


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

5. Nov 2007, 20:59
Beitrag # 5 von 17
Beitrag ID: #422094
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
OK, Hans, wird gemacht.

Viel lieber würde ich aber einem anderen AS-Spezi, dessen Scripte ich tagtäglich nutze und weiterempfehle, mal etwas zukommen lassen. Aber der will ja nicht. ;-)

Gruß
Bernhard


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

22. Nov 2007, 19:36
Beitrag # 6 von 17
Beitrag ID: #422095
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

na, dass wird hier ja so langsam zu einem "scheiß-auf-die-benuterfreundlichkeit-hauptsache-es-sieht-gut-aus-und-jeder-braucht-genügend-Zeit-damit-er/sie-den-richtigen-Button-findet-und-in-dieser-Zeit-unser-neues-Layout-bewundern-kann"-Layout. Glückwunsch. :-D

Ich habe jedoch das Problem, dass ich das Musik-Verzeichnis von einer Festplatte auf eine andere kopieren musste und iTunes einfach zu doof ist, dies zu erkennen. Da ist ja sogar QuarkXPress intelligenter, erkennt die weiteren Dateien und fragt, ob diese aktualisiert werden sollen.

Also darf ich alle Ordner wieder neu auf's Droplet ziehen. :-(

Lieber Hans, kannst du das Droplet so umbauen, dass man mehrere Ordner drauf ziehen kann, und iTunes für jeden Ordner seperate Wiedergabelisten daraus generiert? Ich zahle gut. :-)

Dank und Gruß
Bernhard


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Hans Haesler
  
Beiträge gesamt: 5826

22. Nov 2007, 20:50
Beitrag # 7 von 17
Beitrag ID: #422096
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernhard,

bei einem Droplet wird in die Variable, welche nach on open steht, immer eine Liste der gedroppten Objekte gesetzt. Auch wenn nur ein Ordner aufs Icon gezogen wird, ist das Ergebnis eine Liste.

Im Original-Droplet wird explizit nur das erste Element der Liste weiterverwendet. Wenn man mehrere Objekte behandeln möchte, genügt es, eine Wiederholungsschleife einzurichten:
---
on open theFolder
   repeat with curFolder in theFolder
      tell application "Finder"
         set theName to curFolder as string
      end tell

--- usw. usf.

Und am Ende der open-Schleife ein end repeat einfügen:
---
      end if
   end repeat
end open
---

Das ist es schon. Allerdings ungetestet. Deshalb verzichte ich vorsichtshalber auf ein Honorar. :-)

Gruss, Hans


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

23. Nov 2007, 10:46
Beitrag # 8 von 17
Beitrag ID: #422097
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen lieben Dank!

Ziehe ich einen Ordner mit Unterordnern auf das Droplet, erstellt iTunes nur eine Wiedergabeliste mit dem Namen des Ordners, der auf das Droplet gezogen wurde und packt alle Tracks aus den Unterordnern hinein.

Verwendet man jedoch selection statt theFolder und zieht nun mehrere markierte Ordner auf das Droplet, funktioniert's *freu* :-)
Die Variable muss dann noch bei add_track entsprechend geändert werden.

Gruß
Bernhard


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Hans Haesler
  
Beiträge gesamt: 5826

23. Nov 2007, 13:16
Beitrag # 9 von 17
Beitrag ID: #422098
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernhard,

bitteschön.

Um die Unterordner "normal" (also den Hauptordner ungeöffnet aufs Droplet ziehen) behandeln zu lassen, muss man einen rekursiven Handler einbauen. Eine Subroutine, welche sich selber aufruft.

Ich werde heute Abend das Script entsprechend ergänzen.

Gruss, Hans


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

24. Nov 2007, 08:06
Beitrag # 10 von 17
Beitrag ID: #422099
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das ist lieb von dir. Nur - das Script läuft ja und tut das, was es soll. :-)

Gruß
Bernhard


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Hans Haesler
  
Beiträge gesamt: 5826

24. Nov 2007, 09:36
Beitrag # 11 von 17
Beitrag ID: #422100
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernhard,

sicher. Aber wenn ich Deine Rückmeldung aufmerksamer gelesen hätte ...

Im Originalscript ist ja schon ein rekursiver Handler vorhanden. Dieser muss entschärft und die entsprechenden Aktionen nach oben verlegt werden.

Zusätzlich habe ich den Code gestrafft, Überflüssiges entfernt, Kompliziertes vereinfacht. Weil der 'file type' nicht immer vorhanden ist, habe ich den Test ganz entfernt. Zur Aufnahme in die Namensliste wird das Suffix ".mp3" benutzt.
Code
-- PlaylistCreator_01d.app 
-- Basiert auf "Playlist Creator v1.0" von Paul Withey
-- http://www.malcolmadams.com/itunes/

(*
Das Original-Script setzt die Dateien aller Unterordner in eine Wiedergabeliste
Der folgende Code erzeugt von jedem Unterordner eine separate Wiedergabeliste
*)

global curTracks

on open allObjects
repeat with aObject in allObjects
  processObject(aObject)
end repeat
end open

on processObject(aObject)
set alltracks to {}
if (aObject as string) ends with ":" then
  tell application "Finder"
  set playlistName to name of aObject
  set allTracks to every file in aObject
  end tell
  if allTracks is {} then
  set contentsList to list folder aObject without invisibles
  repeat with anItem in contentsList
    set objPath to ((aObject as string) & anItem)
    processObject(objPath as alias)
  end repeat
  else
  set nameList to addTrack(allTracks)
  if nameList is not {} then
    activate me
    set userChoice to button returned of (display dialog ¬
    "Die Wiedergabeliste »" & playlistName & "« wird erzeugt" buttons ¬
    {"Abbrechen", "Titel zeigen", "Erzeugen"} default button 3)
    if userChoice = "Titel zeigen" then
    set curChoice to choose from list nameList with prompt ¬
      "Die Wiedergabeliste wird enthalten" OK button name ¬
      "Erzeugen" with empty selection allowed
    if curChoice as string is not "false" then
      set userChoice to "Erzeugen"
    end if
    end if
    if userChoice = "Erzeugen" then
    tell application "iTunes"
      set newPlaylist to make new user playlist
      set name of newPlaylist to playlistName as string
      add curTracks to newPlaylist
    end tell
    end if
  end if
  end if
end if
end processObject

on addTrack(allTracks)
set curTracks to {}
set nameList to {}
repeat with nextTrack in allTracks
  set trackName to name of nextTrack
  if trackName ends with ".mp3" then
  set trackName to text 1 thru -5 of trackName
  set end of nameList to trackName
  set nextTrack to nextTrack as alias
  set end of curTracks to nextTrack
  end if
end repeat
return nameList
end addTrack

Problem: Wenn eine Wiedergabeliste schon existiert, wird die neue dennoch erzeugt. Da sollte man einen Test einbauen und den Anwender entscheiden lassen ob sie umbenennen oder die Titel in dieselbe einfügen will. Aber dann müssten auch eventuelle Mehrfacheinträge in die Liste verhindert werden.

Werde ich vielleicht später mal ergänzen.

Gruss, Hans


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

24. Nov 2007, 15:11
Beitrag # 12 von 17
Beitrag ID: #422101
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

mal wieder herzlichen Dank dafür! *schmatz*

Dass mit den doppelten Wiedergabelisten in iTunes finde ich nicht schlimm. Das kann beim manuellen Erstellen der Wiedergabelisten genauso passieren. Und letztlich ist es "nur" eine Sammlung von Verweisen.

Ein kleines Problem besteht jetzt: wenn sich in einem Ordner weitere Ordner befinden, was bei Doppelalben vorkommt ("CD 1", "CD 2"), wird das komplette Album ignoriert und auch keine Wiedergabeliste erzeugt.

Ach ja, wäre es sehr aufwändig, noch einen Button/Option "Alle Erzeugen" hinzuzufügen, die dann ohne weitere Nachfrage alle Listen erzeugt? Aber nur, wenn du wirklich Zeit und Lust hast. :-)

Dank und Gruß
Bernhard


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Hans Haesler
  
Beiträge gesamt: 5826

25. Nov 2007, 21:05
Beitrag # 13 von 17
Beitrag ID: #422102
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernhard,

bitteschön. :-)

Ich verstehe das Problem der Doppelalben, sehe aber keine Lösung, welche generell eingesetzt werden kann. Es war schon schwierig, mit der einfachen Hierarchie klarzukommen ...

Es könnte ja sein, dass der Hauptordner "A" den Ordner "B" enthält, in welchem die Ordner "C" und "D" stecken. Aber dann könnte mal auch der Ordner "B" aufs Droplet gezogen werden (wieder mit Inhalt "C" und "D"). Und es sollte auch klappen, wenn ein Ordner ohne Unterordner gedroppt wird.

Ich habe eine Idee, befürchte aber, dass für Doppelalben ein separates Droplet benutzt werden muss.

Hier schon mal die Version 02, in welchem zu Beginn der gewünschte "Alle erzeugen"-Dialog eingefügt ist.
Code
-- PlaylistCreator_02d.app 
-- Basiert auf "Playlist Creator v1.0" von Paul Withey
-- http://www.malcolmadams.com/itunes/

-- Das Original-Script setzt die Dateien aller Unterordner in eine Wiedergabeliste
-- Der folgende Code erzeugt von jedem Unterordner eine separate Wiedergabeliste

global curTracks

on open allObjects
set noDetails to true
set userChoice to button returned of (display dialog ¬
  "Die Wiedergabelisten ohne Nachfrage erzeugen?" buttons ¬
  {" Abbrechen ", "Titel-Listen zeigen", "Alle erzeugen"} default button 3)
if userChoice is "Titel-Listen zeigen" then
  set noDetails to false
else if userChoice is " Abbrechen " then
  error number -128
end if
repeat with aObject in allObjects
  processObject(aObject, noDetails)
end repeat
display dialog "Fertig." buttons ¬
  "OK" default button 1 with icon 1 giving up after 1
end open

on processObject(aObject, noDetails)
set alltracks to {}
if (aObject as string) ends with ":" then
  tell application "Finder"
  set playlistName to name of aObject
  set alltracks to every file in aObject
  end tell
  if alltracks is {} then
  set contentsList to list folder aObject without invisibles
  repeat with anItem in contentsList
    set objPath to ((aObject as string) & anItem)
    processObject(objPath as alias, noDetails)
  end repeat
  else
  set nameList to addTrack(alltracks)
  if nameList is not {} then
    if noDetails then
    set userChoice to "Erzeugen"
    else
    activate me
    set userChoice to button returned of (display dialog ¬
      "Die Wiedergabeliste »" & playlistName & "« wird erzeugt" buttons ¬
      {" Abbrechen ", "Titel zeigen", "Erzeugen"} default button 3)
    if userChoice = "Titel zeigen" then
      set curChoice to choose from list nameList with prompt ¬
      "Die Wiedergabeliste wird enthalten" OK button name ¬
      "Erzeugen" with empty selection allowed
      if curChoice as string is not "false" then
      set userChoice to "Erzeugen"
      end if
    else if userChoice is " Abbrechen " then
      error number -128
    end if
    end if
    if userChoice = "Erzeugen" then
    tell application "iTunes"
      set newPlaylist to make new user playlist
      set name of newPlaylist to playlistName as string
      add curTracks to newPlaylist
    end tell
    end if
  end if
  end if
end if
end processObject

on addTrack(alltracks)
set curTracks to {}
set nameList to {}
repeat with nextTrack in alltracks
  set trackName to name of nextTrack
  if trackName ends with ".mp3" then
  set trackName to text 1 thru -5 of trackName
  set end of nameList to trackName
  set nextTrack to nextTrack as alias
  set end of curTracks to nextTrack
  end if
end repeat
return nameList
end addTrack

Gruss, Hans


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Bernhard Werner
Beiträge gesamt: 5131

25. Nov 2007, 23:12
Beitrag # 14 von 17
Beitrag ID: #422103
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das Problem mit den Unterordnern könnte man doch lösen, in dem man "nur" die eigentlichen/gewünschten Ordner markiert und auf das Droplet zieht. Das wäre IMHO auch "anwendungssinniger", denn es soll ja von den gedroppten Ordnern jeweils eine Wiedergabeliste erzeugt werden.

Was meinst du?

Dank und Gruß
Bernhard


als Antwort auf: [#422090]

iTunes: Droplet zur Erstellung von ...

Hans Haesler
  
Beiträge gesamt: 5826

26. Nov 2007, 07:53
Beitrag # 15 von 17
Beitrag ID: #422104
Bewertung:
(2395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernhard,

am einfachsten wäre es, wenn im voraus die Hierarchie manuell soweit verflacht würde, dass Unterordner keine weiteren Unterordner enthalten.

Das Droplet kann nicht Gedankenlesen. Der Code muss deshalb so aufgebaut sein, dass auch verschiedene Voraussetzungen gemeistert werden.

Im Moment funktioniert es so: Der Hauptordner wird ignoriert. Die Namen der Unterordner werden für die Wiedergabelisten verwendet und die Dateien in die Listen gesetzt. Wenn nun ein Doppel-CD-Ordner als Unterordner vorkommt, dann wird er auch nicht beachtet, weil er ebenfalls "nur" Ordner enthält.

Das Script könnte ergänzt werden, dass es in diesem Fall auf den Namen des Unterorders zurückgreift und die Dateien der CD1-, CD2-Ordner in eine Liste zusammenfasst.

Aber wenn nun mal ein einziger Doppel-CD-Ordner, welcher die zwei Unterordner enthält, auf das Droplet gezogen wird, dann "weiss" das Script dies nicht.

Man könnte abmachen, dass immer ein nicht zu beachtender Hauptordner benutzt wird, welcher dann die Unterordner enthält.

Man könnte aber auch sagen: Vergessen wir den Hauptordner. Von jedem Ordner, welcher gedroppt wird, erzeugt iTunes eine Wiedergabeliste mit den Titeln, welche auch in eventuellen Unterordnern gefunden werden.

Dieser zweite Weg entspricht Deinem Vorschlag. Ich werde heute Abend versuchen, ihn umzusetzen.

Gruss, Hans


als Antwort auf: [#422090]
X