syncfolder2itunes

Kleines Skript, welches einen einstellbaren Ordner in iTunes importiert und im Anschluss die iTunes Mediatheak auch von nicht mehr vorhandenen Tracks bereinigt.

try
  set defaultFolder to my decode_octal(do shell script "defaults read com.hubionmac.syncfolder2itunes defaultFolder")
  display alert "Change default folder?" & return & return & defaultFolder buttons {"Change", "no changes"} default button {"no changes"} giving up after 2
  if (button returned of the result) as text = "Change" then
    error
  end if
on error
  set defaultFolder to POSIX path of (choose folder)
  do shell script "defaults write com.hubionmac.syncfolder2itunes defaultFolder " & quoted form of defaultFolder
end try
set thefolder to (POSIX file defaultFolder) as alias

with timeout of 99999 seconds
  tell application "iTunes"
    --add thefolder to library
    add thefolder to playlist 1 of source 1
  end tell
end timeout
my remove_missing()

display notification "Done"
on remove_missing()
  tell application "iTunes"
    set the stored_setting to fixed indexing
    set fixed indexing to true
    set sourcename to name of source 1
    tell source sourcename
      set libname to name of playlist 1
      tell playlist libname
        repeat with i from the (count of tracks) to 1 by -1
          try
            if the location of track i is missing value then
              delete track i
              set the remove_counter to the remove_counter + 1
            end if
          end try
        end repeat
      end tell
    end tell
    set fixed indexing to the stored_setting
  end tell
end remove_missing

on decode_octal(str)
  set str to quoted form of str
  set cmd to quoted form of "#!/usr/bin/python 
import sys 

x = sys.argv[1] 
x = x.decode('unicode_escape' ) 
x=x.encode('utf-8') 
print x"
  set cmd_full to "python -c " & cmd & " " & str
  set r to do shell script cmd_full
  return r
end decode_octal
									

syncitunes
Posted in iTunes | Tagged , , | 3 Comments

iTunes Software Updates vorab laden

ipswDie aktuelle iOS Version zu einem Gerät lädt iTunes immer erst bei Bedarf, wenn man also z.B. im Service immer wieder verschiedene Geräte anschließt, kann es sein, dass man bei fast jedem Gerät erneut auf den Download der passen Software warten darf.

Apple bietet hierfür die Möglichkeit einen OSX Server als Software-Update Cache zu nutzen, nur braucht man dafür nun mal OSX-Server. Damit man die Software-Updates auch so vorab speichern kann, kann man auch dieses Skript nutzen, um sich z.B. alle iPhone Updates vorab zu laden. Das Skript nutzt eine Download-Liste von Apple wie hier beschrieben, um die jeweils neuest Software-Version für wahlweise alle iPods, iPads, iPhones oder AppleTVs zu laden.

Die Updates werden direkt in den passenden Ordner unter ~/Library/iTunes geladen, sofern es dort nicht bereits schon eine entsprechende Datei gibt.

Seid aber gewarnt, zum aktuellen Zeitpunkt umfasst diese Update-Sammlung gute 65 GB an iOS Updates!

--10.10.2014 hubionmac.com
--Downloads latest ipsw software packages from apple and stores thems in your local itunes folder (~/Library/iTunes)
--So you can pre-load software-updates of ios Devices before you connect them (ios Software update Cache)
-- uses url found @ http://osxdaily.com/2013/11/15/get-list-all-ipsw-files-from-apple/

-- Tested using OSX 10.9.5 (minimum OS since script uses display notification command)
set searchstrings to {"1:ipad", "2:iphone", "3:ipod", "4:appletv"}
set foldernames to {"iPad Software Updates", "iPhone Software Updates", "iPod Software Updates", "Apple TV Software Updates"}

tell application "Finder" to set itunesfolder to folder "iTunes" of folder "Library" of home as alias
set outputfolder to POSIX path of (choose folder default location itunesfolder)
set searchstrings to choose from list searchstrings with prompt "Download Software for:" with multiple selections allowed

set thedownloads to every paragraph of (do shell script "curl http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStore.woa/wa/com.apple.jingle.appserver.client.MZITunesClientCheck/version | grep ipsw | sort -u | sed 's/<string>//g' | sed 's/<\\/string>//g' | grep -v protected | grep -i restore")
set urls to {}
repeat with theline in thedownloads
  set a to offset of "http" in theline
  set urls to urls & {(characters a through -1 of theline) as text}
end repeat

set types to {}
set filenames to {}
set finalurls to {}
repeat with i from 1 to count of urls
  set currenturl to (item i of urls) as string
  set currentname to do shell script "basename " & quoted form of currenturl
  if currentname is not in filenames then
    set filenames to filenames & currentname
    
    set AppleScript's text item delimiters to "_"
    set current_type to text item 1 of currentname
    if types does not contain current_type then
      set types to types & current_type
    end if
    set current_version to text item 2 of currentname
    set AppleScript's text item delimiters to "."
    set current_version to every text item of current_version
    set AppleScript's text item delimiters to ""
    set current_version to (current_version as string) as integer
    set finalurls to finalurls & {{thetype:current_type, theversion:current_version, theurl:currenturl}}
    
  end if
end repeat

set myoutput to {}
repeat with t in types
  set c to 0
  repeat with i from 1 to count of finalurls
    if (thetype of (item i of finalurls)) as string = t as string then
      if (theversion of (item i of finalurls)) > c then
        set c to (theversion of (item i of finalurls))
        set mu to (theurl of (item i of finalurls))
      end if
    end if
  end repeat
  set myoutput to myoutput & mu
end repeat

set togo to count of myoutput
display notification togo & " URLs to go..." as string
repeat with theurl in myoutput
  set filename to do shell script "basename " & quoted form of theurl
  
  set thefolder to ""
  repeat with searchstring in searchstrings
    set folderid to (word 1 of searchstring) as integer
    set searchstring to (word 2 of searchstring) as string
    if filename contains searchstring then
      set thefolder to item folderid of foldernames
    end if
  end repeat
  if thefolder ≠ "" then
    try
      do shell script "mkdir " & quoted form of outputfolder & quoted form of thefolder
    end try
    
    try
      set downloadfile to false
      set testfile to POSIX file (outputfolder & thefolder & "/" & filename as string) as alias
    on error
      set downloadfile to true
    end try
    if downloadfile is true then
      do shell script "cd " & quoted form of (outputfolder & thefolder & "/" as string) & ";curl -O " & quoted form of theurl
      display notification togo & " URLs to go..." as string
    end if
  end if
  set togo to togo - 1
end repeat
display notification "Finished" as string
									

Update vom 16.10.2014

ipws downloaderDiese XML-Datei mit AWK&CO zu parsen ist etwas abendteuerlich. Deshalb habe ich ein kleines php-Skript geschrieben, welches die Sache dann über eine DOM-Abfrage löst. Zudem wird so auch zuverlässiger die neuste Software-Version geladen Zudem bietet einem das Script nun auch an die Links in die Zwischenablage zu kopieren, so dass man die Downloads auch über ein anderes Programm (Safari, jDownloader) abarbeiten lassen kann. Hier direkt eine fertige App, die das im gleichen Ordner befindliche php-Skript zum abrufen der Links nutzt.

DOWNLOAD
IPSW Downloader v.1.0
226.35 kB (70 hits)

Update vom 25.10.2014

ipws downloader

  • version_compare() wird nun in der PHP-Datei genutzt, um nun die korrekte neuste Version eine Software zu ermittlen (bugfix: da die letzte Version auch veraltete Software-Versionen geladen hat)
  • Das AppleScript hat nun eine Version-Prüfung, so dass bei einem erneutem Update eine Meldung angezeigt wird
  • Das Skript kann nun veraltete ipws Dateien im Zielordner markieren oder in den Papierkorb verschieben

DOWNLOAD
IPSW Downloader v.2.0
235.71 kB (60 hits)
Posted in iTunes, Useful Snippets | Tagged , , , , | 2 Comments

Move mails older than

Meine Schwester hat 1 GB Mailspace und muss in regelmäßigen Abständen die Emails aus der Inbox oder dem gesendet-Ordner in einen lokalen Mail-Ordner verschieben, damit das Postfach nicht überläuft. Dieses Skript hier fragt den Quell-Account und das Quell-Postfach ab, im Anschluss das Zielpostfach und dann wie alt die Mails sein müssen, damit sie verschoben werden sollen. Neben dem reinen Nutzen ein schönes Beispiel, wie man eine Mailbox via AppleScript-Dialog auswählen kann. ;-) Viel Spaß damit!

## MoveMail oder than... ©hubionmac.com 23.09.2014
## This script moves all Emails older than x days from a source mailbox to a destination mailbox
## source and destination mailbox may be located on differenc accounts or may be local mailboxes



tell application "Mail"
  set theaccounts to name of every account whose enabled is true
  set sourceAccount to (choose from list theaccounts & {"• Local •"} with prompt "Set Source-Mailbox:" & return & "Select Account") as string
  if sourceAccount is "false" then
    error number -128
  end if
  set sourceMailbox to (choose from list my return_mailboxes(sourceAccount) with prompt "Set Source-Mailbox:" & return & "Select Mailbox") as string
  if sourceMailbox is "false" then
    error number -128
  end if
  if sourceAccount is "• Local •" then
    set sourceMailbox to mailbox sourceMailbox
  else
    set sourceMailbox to mailbox sourceMailbox of account sourceAccount
  end if
  
  
  set destiAccount to (choose from list theaccounts & {"• Local •"} with prompt "Set destination-Mailbox:" & return & "Select Account" default items {sourceAccount}) as string
  if destiAccount is "false" then
    error number -128
  end if
  set destiMailbox to (choose from list my return_mailboxes(destiAccount) with prompt "Set destination-Mailbox:" & return & "Select Mailbox") as string
  if destiMailbox is "false" then
    error number -128
  end if
  if destiAccount is "• Local •" then
    set sourceMailbox to mailbox destiMailbox
  else
    set destiMailbox to mailbox destiMailbox of account destiAccount
  end if
  
  
  repeat until 1 = 0
    try
      set daycount to text returned of (display dialog "Only move mail older than x days" default answer "30") as integer
      if daycount > 0 then
        exit repeat
      end if
    end try
  end repeat
  set deadline to current date
  set deadline to deadline - 60 * 60 * 24 * daycount
  display dialog "Really move " & (count of (every message of sourceMailbox whose date sent < deadline)) & " messages?"
  move (every message of sourceMailbox whose date sent < deadline) to destiMailbox
  
end tell


on return_mailboxes(accountname)
  tell application "Mail"
    set l to {}
    if accountname is "• Local •" then
      repeat with thebox in every mailbox
        set tmp to name of thebox
        repeat until 1 is 0
          if name of container of thebox is not missing value then
            set tmp to name of container of thebox & "/" & tmp
            set thebox to container of thebox
          else
            exit repeat
          end if
        end repeat
        set l to l & {tmp as rich text}
      end repeat
      
    else
      repeat with thebox in every mailbox of account accountname
        set tmp to name of thebox
        repeat until 1 is 0
          if name of container of thebox is not missing value then
            set tmp to name of container of thebox & "/" & tmp
            set thebox to container of thebox
          else
            exit repeat
          end if
        end repeat
        set l to l & {tmp as rich text}
      end repeat
    end if
  end tell
  return l
end return_mailboxes
									

Posted in Apple Mail | Tagged , , , | Leave a comment

Enable iTunes Storeactivation

Enable iTunes icon
In bestimmten Fällen möchten Unternehmen und Bildungseinrichtungen ihre Geräte möglicherweise mithilfe von iTunes aktivieren, ohne dass zusätzliche Inhalte synchronisiert oder gesichert werden. In diesem Artikel wird beschrieben, wie der Modus "Nur aktivieren" eingeschaltet wird.
Nun das schreibt Apple hier. Aber wer möchte schon immer diese Modus in iTunes aktiviert haben? Dieses Skript aktiviert den Modus solange es als Anwendung gespeichert (mit der Option "Nach Run-Handler anzeigen")wurde, wenn man das Skript startet. Und deaktiviert die Einstellung sobald es wieder geschlossen wird. iTunes wird von dem Skript automatisch neu gestartet, so dass die geänderte Einstellung direkt wieder aktiv wird.

### 11.09.2014 © hubionmac.com
### Applescript um iTunes in den StoreActivation Mode zu versetzten
### Damit wird jedes angeschlossene iOS Device direkt über iTunes aktiviert und wieder ausgeworfen
### Damit man iTunes normal weiter nutzen kann, ist dieses Setting nur solange aktiv, wie dieses Skript läuft (Als Anwendung gespeichert)

property setprefs : false

on run
  set theaction to button returned of (display alert "Activate StoreActivation Setting in iTunes? iTunes will restart?" buttons {"Activate", "nope quit"} default button {"Activate"})
  if theaction is "Activate" then
    tell application "System Events"
      repeat with i from 1 to 10
        if name of every process contains "iTunes" then
          tell application "iTunes" to quit
        else
          do shell script "defaults write com.apple.iTunes StoreActivationMode -integer 1"
          set setprefs to true
          exit repeat
        end if
        delay 1
      end repeat
      if setprefs is false then
        display alert "Error on resetting preferences... (could not quit iTunes in time) Restart and quit app to fix this"
      else
        tell application "iTunes" to activate
        do shell script "afplay /System/Library/Sounds/Pop.aiff "
      end if
      
    end tell
  else
    tell me to quit
  end if
end run

##Routine die beim Beendetn des Skript-Programmes durchlaufen wird
on quit
  ##es wird versucht die gesetzte Voreinstellung wieder zur löschen… kommt es zu einem Fehler, wird dieser angezeigt und das Programm beendet sich trotzdem...
  tell application "System Events"
    repeat with i from 1 to 10
      if name of every process contains "iTunes" then
        tell application "iTunes" to quit
      else
        do shell script "defaults write com.apple.iTunes StoreActivationMode -integer 0"
        set setprefs to false
        exit repeat
      end if
      delay 1
    end repeat
  end tell
  if setprefs is true then
    display alert "Error on resetting preferences... (could not quit iTunes in time) Restart and quit app to fix this"
  else
    tell application "iTunes" to activate
    do shell script "afplay /System/Library/Sounds/Pop.aiff "
  end if
  
  continue quit
  
end quit

									

und hier auch mal die Anwendung als AppleScript Applet (10.9)
Posted in defaults write, iTunes, Useful Snippets | Tagged , , | Leave a comment

Finder Attribute von Dateien löschen (Synology Shares)

Wie auch immer es dazu kommt, in meinen Synology Shares sind manche Dateien nicht mehr zu öffnen und erscheinen ausgegraut im Finder. Der Grund dafür sind erweiterte Finder-Attribute, die den Zugriff beschränken. Das Skript hier löscht einfach die Attribute aller im Finder ausgewählten Dateien.

##hubionmac.com
##remove extenden finder attributes from Finder selection.
##e.g. on synology shares some files (greyed out) can only be opened after this procedure
tell application "Finder"
  set a to selection
  repeat with b in a
    set b to quoted form of POSIX path of (b as alias)
    do shell script "xattr -d com.apple.FinderInfo " & b
  end repeat
end tell
									

Posted in Finder, Useful Snippets | Tagged , , , | Leave a comment

Update-Server kurzzeitig umstellen

Update_umleitung

Im Zuge einer Projektarbeit (Aufsetzten eines OSX Update-Servers) musste ein Skirpt her, mit dem man kurzfristig die Adressen des lokalen Updates-Servers eintragen lassen kann. Das ist an sich nicht schwierig und lässt sich auch über einen Terminal-Befehl leicht erreichen. Das ganze soll nur möglichst einfach ablaufen und sich auch Rückgängig machen lassen, damit der lokale Update-Server nur verwendet wird, wenn das Programm auch läuft... also:

Das Skript hier einfach als Anwendung speicher, die nach dem Öffnen auch offen bleibt. Der Wert der Variable myupdate_server_ip sollte natürlich entsprechende IP des Update-Server gesetzte werden.

Update_umleitung-BlogBild

### 09.02.2014 © hubionmac.com
### AppleScript welches den Update-Server eines Macs für die Dauer der Laufzeit verändert und beim Beendet wieder auf den Default-Wert zurücksetzt
### Der Defaults Befehlt stammt von http://support.apple.com/kb/ht4069



##Voreinstellung, das ist die IP oder der Domain-Name des Update-Servers
property myupdate_server_ip : "192.168.1.1"

on run
  ##Wenn der Dialog mit Ja bestätigt wird geht es weiter, ansonsten beendet sich das Programm
  set doit to button returned of (display alert "Soll ich den Update-Server (" & myupdate_server_ip & ") eintragen?" buttons {"Nein", "Ja"} default button {"Ja"}) as text
  if doit is "Ja" then
    try
      ##das ist die eigentliche Code Zeile über die der Update-Server definiert wird
      do shell script "defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://" & myupdate_server_ip & ":8088/index.sucatalog" with administrator privileges
      ##Sofern der vorherige Eintrage erfolgreich war, müsste diese Befehl ohne Fehler durchlaufen
      do shell script "defaults read /Library/Preferences/com.apple.SoftwareUpdate CatalogURL"
      ##Das ist ein reiner Info Dialog ohne weitere Funktion… verschwindet nach 5 Sekunden
      display alert "Update Server eingetragen, beende das Programm, um den Eintrag wieder zu löschen…" buttons {"OK"} default button {"OK"} giving up after 5
    on error msg
      ##Sollte es einen Fehler gegegeben haben (z.B. die Voreinstellung wurde nicht gesetzt, wird dieser angezeigt und das Programm beendet...
      display alert "Es scheint ein Problem setzen der Voreinstellung gegeben zu haben…\n\n" & msg
      quit
    end try
  else
    ##Wenn der Anfangs-Dialog mit nein bestätigt wurde, beendet sich das Programm halt...
    tell me to quit
  end if
  
end run

##Routine die beim Beendetn des Skript-Programmes durchlaufen wird
on quit
  ##es wird versucht die gesetzte Voreinstellung wieder zur löschen… kommt es zu einem Fehler, wird dieser angezeigt und das Programm beendet sich trotzdem...
  try
    do shell script "sudo defaults delete /Library/Preferences/com.apple.SoftwareUpdate CatalogURL" with administrator privileges
    display alert "Update-Server wieder zurück auf default" giving up after 5
  on error msg
    display alert msg
  end try
  continue quit
  
end quit
									

Und sobald das Programm nun läuft, wir nach dem Kennwort gefragt, der Update-Server umgestellt und wenn man es beendet ist alles wieder auf Anfang gesetzt. Ist super praktisch, wenn man nur zeitweise den lokalen Update-Server nutzen möchte, z.B. bei mobilen Geräten, die nicht immer im lokalen Netzwerk verbleiben. Danke an Dennis für die Grund-Idee.

Posted in defaults write, OS X | Tagged , , , | Leave a comment

Webdesgin: helfende-tiere.de im neuen Look

Die Seite wurde komplett neu gestaltet. Neben zahlreichen Pfoten- und Hufspuren verziert die Lieblingsschrift (MyFairCody) des Siteowners den neuen Webauftritt. Als CMS kommt WordPress zum Einsatz.20140122-105116.jpg
Posted in webdev | Tagged , , , | Leave a comment

Webdesign: macxtreme.de im neuen Look

Die neue Seite von Macxtreme ist online. Pures html5, etwas Javascript und WordPress im Hintergrund. Das ganze konnte Dank html5 Boilerplate in Recordzeit umgesetzte werden. THX! logo
Posted in links, webdev | Tagged , | Leave a comment

.icns Icon-Dateien via Terminal erstellen

Für ein Skript, welches mir automatisch Partition mit Image-Dateien bespielt, brauchte ich einen Mechanismus, über den ich dynamisch VolumeIcons auf die fertigen Volumes anwenden konnte. Normalerweise würde ich hierfür
  • Im Programm Vorschau ein entsprechendes Bilds (idealerweise 512x512px) öffnen, auswählen und kopieren
  • Das gewünschte Objekt im Finder auswählen und mir die Information anzeigen lassen
  • tab drücken und mit cmd+V das Bild aus der Zwischenablage als Icon festlegen
Read More »
Posted in Useful Snippets | Tagged , , , | Leave a comment

SVG Editor

LogoNachdem Inkscape den Dienst unter 10.7 eingestellt hat und die Alternative DrawBerry zwar schön funktioniert, die exportieren SVGs aber nichts taugen, bin ich bei svg-edit fündig geworden. Einfach simpel und online dazu.
Posted in Nice2Know | Tagged , | Leave a comment
  • Seite übersetzen:


    Paypal for Pizza:




  • Kategorien


  • Letzte Kommentare

    • Hubi: Hallo Michael, playlist 1 of source 1 is die Library (Mediathek). So einen Dialog könnte ich einbauen, nur...
    • controlc.de: Hi, ich mag das Skript und besonders toll finde ich, dass der Ordner rekursiv nach importierbaren...
    • Hubi: Servus Sameer, versuche es doch mal mit der vorherigen Version, die hatte ich für 10.8 angepasst. Wegen des...
    • Sameer: Hallo Hubi, hallo Franz, danke für Eure Hinweise. Ich habe leider folgendes Problem: This Script was only...
    • Franz Damm: Hallo Sameer, das Aufrufen über shortcut kannst du auch über eine Automator-Script lösen. Dazu einfach...