All pastes #748660 Raw Edit

Stuff

public text v1 · immutable
#748660 ·published 2007-10-25 00:15 UTC
rendered paste body
property type_list : {"MooV", "MPG3", "Midi", "MPEG", "PLAY", ".SMI", "Mp3 ", "JPEG", "PICT", "TIFF", "GIFf"}
property extension_list : {"mov", "smi", "sml", "mpg", "mp3", "mid", "pict", "pct", "jpeg", "jpg", "tiff", "tif", "gif"}

global target_folder, temp_folder

on run
	set AppleScript's text item delimiters to ", "
	set the formats_list to type_list as string
	set AppleScript's text item delimiters to ""
	display dialog "Convert to QuickTime Format

This script will convert dragged-on media files in the following formats to self-contained QuickTime movies." & ¬
		return & return & formats_list buttons {"OK"} default button 1
end run

-- This droplet processes both files or folders of files dropped onto the applet
on open these_items
	-- this routine uses the gestaltVersion_info() sub-routine
	copy my gestaltVersion_info("qtim", 8) to {QT_version, QT_string}
	if the QT_version is less than "0502" then
		display dialog "This script requires QuickTime 5.0.2 or higher." & ¬
			return & return & "The currently installed version is: " & ¬
			QT_string buttons {"Cancel"} default button 1
	end if
	-- create a unique temp folder
	repeat
		set this_name to (random number from 100000 to 999999) as string
		tell application "Finder"
			if not (exists folder this_name of the desktop) then
				set the temp_folder to (make new folder at desktop with properties {name:this_name}) as alias
				exit repeat
			end if
		end tell
	end repeat
	--set the target_folder to choose folder with prompt "Destination folder for the converted files:"
	repeat with i from 1 to the count of these_items
		set this_item to (item i of these_items)
		set the item_info to info for this_item
		if folder of the item_info is true then
			process_folder(this_item)
		else if (alias of the item_info is false) and ¬
			((the file type of the item_info is in the type_list) or ¬
				the name extension of the item_info is in the extension_list) then
			process_item(this_item)
		end if
	end repeat
	-- delete the temp folder
	tell application "Finder"
		delete temp_folder
		empty trash
	end tell
end open

-- this sub-routine processes folders
on process_folder(this_folder)
	set these_items to list folder this_folder without invisibles
	repeat with i from 1 to the count of these_items
		set this_item to alias ((this_folder as text) & (item i of these_items))
		set the item_info to info for this_item
		if folder of the item_info is true then
			process_folder(this_item)
		else if (alias of the item_info is false) and ¬
			((the file type of the item_info is in the type_list) or ¬
				the name extension of the item_info is in the extension_list) then
			process_item(this_item)
		end if
	end repeat
end process_folder

-- this sub-routine processes files
on process_item(this_item)
	-- NOTE that the variable this_item is a file reference in alias format
	-- FILE PROCESSING STATEMENTS GOES HERE
	with timeout of 3600 seconds -- one hour per movie time limit
		tell application "QuickTime Player"
			launch -- bypasses promo movie
			activate
			my toggle_suppress(true)
			
			stop every document
			close every document saving no
			
			try
				open this_item
				
				if saveable of document 1 is false then
					error "This movie has previously been set so that it cannot be copied, edited, or saved."
				end if
				
				set the original_file to the original file of document 1
				tell application "Finder"
					-- set the file_name to the name of the original_file
					set the file_name to my add_mov_ext(this_item)
					set the target_folder to the container of the original_file
					if exists file file_name of the temp_folder then ¬
						delete file file_name of the temp_folder
					set the new_file to ((temp_folder as text) & file_name)
				end tell
				save document 1 given «class dfil»:file new_file, «class savk»:self contained
				tell application "Finder"
					delete the original_file
					move file new_file to the target_folder with replacing
					empty trash
				end tell
			on error error_msg
				try
					beep
					display dialog error_msg buttons {"Cancel", "Continue"} default button 2 with icon 1
				on error
					my toggle_suppress(false)
					error number -128
				end try
			end try
			my toggle_suppress(false)
			close document 1 saving no
		end tell
	end timeout
end process_item

on add_mov_ext(this_item)
	set the item_info to info for this_item
	set the item_name to (the name of the item_info) as string
	set the name_extension to (the name extension of the item_info) as string
	if the name_extension is not "" then
		set the base_name to (characters 1 thru -((length of name_extension) + 2) of the item_name) as string
		set the new_name to the base_name & ".mov"
	else
		set the new_name to the item_name & ".mov"
	end if
	return the new_name
end add_mov_ext

on toggle_suppress(status_flag)
	tell application "QuickTime Player"
		set ignore auto play to the status_flag
		set ignore auto present to the status_flag
	end tell
end toggle_suppress

on gestaltVersion_info(gestalt_code, string_length)
	try
		tell application "Finder" to ¬
			copy my NumToHex((system attribute gestalt_code), ¬
				string_length) to {a, b, c, d}
		set the numeric_version to {a, b, c, d} as string
		if a is "0" then set a to ""
		set the version_string to (a & b & "." & c & "." & d) as string
		return {numeric_version, version_string}
	on error
		return {"", "unknown"}
	end try
end gestaltVersion_info

on NumToHex(hexData, stringLength)
	set hexString to {}
	repeat with i from stringLength to 1 by -1
		set hexString to ((hexData mod 16) as string) & hexString
		set hexData to hexData div 16
	end repeat
	return (hexString as string)
end NumToHex