AppleScript: Export Selected Tracks….applescript: Difference between revisions

From Wurst-Wasser.net
Jump to navigation Jump to search
(Created page with "This is the Script belonging to Catalina deleted all my Audiobooks!: Category:macOS")
 
No edit summary
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
This is the Script belonging to [[Catalina deleted all my Audiobooks!]]:
This is the Script belonging to [[Catalina deleted all my Audiobooks!]]:


global errorMessage
global counter
(* Init *)
set errorMessage to ""
set counter to 0
(* Get folder to save the files in *)
tell application "Finder"
activate
try
set exportFolder to choose folder with prompt "Please choose a folder to save the selected tracks into:"
#log ordner
on error (e)
log "Error: " & e
return
end try
# Debug
# set posixpath to (path to desktop folder as text) & "Export:"
# set macospath to folder posixpath
# set exportFolder to macospath
end tell
(* Script to export selected tracks with nice folders *)
tell application "iTunes"
activate
if selection is not {} then -- there ARE tracks selected...
set sel to a reference to selection
set trackCount to count sel
if trackCount is greater than 23 then
set msg to "Are you sure, you want to export " & trackCount & " tracks?"
set res to display dialog msg buttons {"Sure!", "Actually, no."}
if button returned of res is not "Sure!" then
return
end if
end if
(* Export track by track *)
repeat with aTrack in sel (* is of type "file track" *)
tell aTrack
#get class of aTrack
(* Get the relevant information of this track, could be used directly, though *)
set artistName to artist
if artistName is "" then set artistName to "Unknown Artist"
tell me to set artistName to changeString of artistName from ":" to "_" (* Toast the colons *)
set albumName to album
if albumName is "" then set albumName to "Unknown Album"
tell me to set albumName to changeString of albumName from ":" to "_" (* Toast the colons *)
set isPartOfCompilation to compilation
if (isPartOfCompilation is true) then set artistName to "Compilations"
set fileReference to location
set filePath to (fileReference as text)
log fileReference
# get size of file fileReference
log filePath
# end tell
(* Check whether the file exists *)
tell application "Finder" (* If the file for this track does not exist, do some mecker *)
if (not (exists file filePath)) then
set errorMessage to errorMessage & "File is missing: " & artistName & " - " & albumName & " (Path: " & filePath & ")" & return
else (* Create the necessary folders *)
(* First, the artist folder *)
set artistFolder to (exportFolder as string) & artistName & ":"
log "artistFolder: " & artistFolder
if (not (exists folder artistFolder)) then
make new folder at exportFolder with properties {name:artistName}
end if
(* Second, the album folder *)
set albumFolder to (artistFolder as string) & albumName & ":"
log "albumFolder: " & albumFolder
if (not (exists folder albumFolder)) then
make new folder at (folder artistFolder) with properties {name:albumName}
end if
(* Copy the actual track file *)
with timeout of 240 seconds (* some Audiobooks are quite large! *)
log "Copying from " & filePath & " -> " & albumFolder
tell application "Finder" to duplicate file filePath to albumFolder without replacing
set counter to counter + 1
end timeout
end if
end tell
end tell
end repeat
end if
with timeout of 0 seconds
if length of errorMessage is greater than 0 then
set errorMessage to "The following errors occurred:" & return & return & errorMessage
display dialog "Copied " & counter & " of " & trackCount & " files." & return & return & "But:" & return & errorMessage buttons {"Oh my!"}
else
display dialog "Copied " & counter & " of " & trackCount & " files." buttons {"Really?"}
end if
end timeout
end tell
to changeString of t from s to r
set d to text item delimiters
set text item delimiters to s
set t to t's text items
set text item delimiters to r
tell t to set t to beginning & ({""} & rest)
set text item delimiters to d
t
end changeString




ToDos:
* Add <code>on error</code> on every critical action.
* Report details about copied files.


[[Category:macOS]]
 
 
[[Category:Mac OS X]]
[[Category:AppleScript]]

Latest revision as of 12:47, 12 February 2020

This is the Script belonging to Catalina deleted all my Audiobooks!:

global errorMessage
global counter

(* Init *)
set errorMessage to ""
set counter to 0

(* Get folder to save the files in *)
tell application "Finder"
	activate
	try
		set exportFolder to choose folder with prompt "Please choose a folder to save the selected tracks into:"
		
		#log ordner
		
	on error (e)
		log "Error: " & e
		return
	end try
	# Debug
	#	set posixpath to (path to desktop folder as text) & "Export:"
	#	set macospath to folder posixpath
	#	set exportFolder to macospath
end tell

(* Script to export selected tracks with nice folders *)
tell application "iTunes"
	activate
	if selection is not {} then -- there ARE tracks selected...
		
		set sel to a reference to selection
		set trackCount to count sel
		if trackCount is greater than 23 then
			set msg to "Are you sure, you want to export " & trackCount & " tracks?"
			set res to display dialog msg buttons {"Sure!", "Actually, no."}
			if button returned of res is not "Sure!" then
				return
			end if
		end if
		
		(* Export track by track *)
		repeat with aTrack in sel (* is of type "file track" *)
			tell aTrack
				#get class of aTrack
				
				(* Get the relevant information of this track, could be used directly, though *)
				set artistName to artist
				if artistName is "" then set artistName to "Unknown Artist"
				tell me to set artistName to changeString of artistName from ":" to "_" (* Toast the colons *)
				set albumName to album
				if albumName is "" then set albumName to "Unknown Album"
				tell me to set albumName to changeString of albumName from ":" to "_" (* Toast the colons *)
				set isPartOfCompilation to compilation
				if (isPartOfCompilation is true) then set artistName to "Compilations"
				set fileReference to location
				set filePath to (fileReference as text)
				log fileReference
				#					get size of file fileReference
				log filePath
				#				end tell
				
				(* Check whether the file exists *)
				tell application "Finder" (* If the file for this track does not exist, do some mecker *)
					if (not (exists file filePath)) then
						set errorMessage to errorMessage & "File is missing: " & artistName & " - " & albumName & " (Path: " & filePath & ")" & return
					else (* Create the necessary folders *)
						(* First, the artist folder *)
						set artistFolder to (exportFolder as string) & artistName & ":"
						log "artistFolder: " & artistFolder
						if (not (exists folder artistFolder)) then
							make new folder at exportFolder with properties {name:artistName}
						end if
						
						(* Second, the album folder *)
						set albumFolder to (artistFolder as string) & albumName & ":"
						log "albumFolder: " & albumFolder
						if (not (exists folder albumFolder)) then
							make new folder at (folder artistFolder) with properties {name:albumName}
						end if
						
						(* Copy the actual track file *)
						with timeout of 240 seconds (* some Audiobooks are quite large! *)
							log "Copying from " & filePath & " -> " & albumFolder
							tell application "Finder" to duplicate file filePath to albumFolder without replacing
							set counter to counter + 1
						end timeout
					end if
				end tell
				
			end tell
		end repeat
	end if
	
	with timeout of 0 seconds
	 	if length of errorMessage is greater than 0 then
		 	set errorMessage to "The following errors occurred:" & return & return & errorMessage
		 	display dialog "Copied " & counter & " of " & trackCount & " files." & return & return & "But:" & return & errorMessage buttons {"Oh my!"}
	 	else
		 	display dialog "Copied " & counter & " of " & trackCount & " files." buttons {"Really?"}
	 	end if
	end timeout
end tell



to changeString of t from s to r
	set d to text item delimiters
	set text item delimiters to s
	set t to t's text items
	set text item delimiters to r
	tell t to set t to beginning & ({""} & rest)
	set text item delimiters to d
	t
end changeString





ToDos:

  • Add on error on every critical action.
  • Report details about copied files.