Wait for files to be transfered.

hi!

I got a problem with my script. it doesnt wait for the files to be fully transferred before opening the files with the app. I want to copy files into folder which are then processed by compressor to avi, real, etc. It works fine with small files, but we use big files and the script doesnt wait for the file not being busy. here the script. any suggestions?

– THESE PROPERTIES ARE FOR THE NOTIFICATION ROUTINE

property speak_alert : false – if true, the script will speak the alert. If false, the script will display an alert dialog

property dialog_timeout : 30 – set the amount of time before dialogs auto-answer.

– THIS PROPERTY IS USED TO INDICATE WHETHER THE SCRIPT CHECKS THE INCOMING FILES FOR COMPLETED TRANSFER

– SET THIS PROPERTY TO TRUE FOR FOLDERS SHARED VIA FILE SHARING

– NOTE THAT ITEMS DROPPED IN SHARED FOLDERS WILL HAVE THEIR LABEL SET TO 7

property copy_checks_indicator : true

– THESE PROPERTIES ARE FOR THE STATUS CHECKING ROUTINES

property item_check_delay_time : 2

property folder_check_delay_time : 3

property special_label_index : 7

on adding folder items to this_folder after receiving added_items

try
	
	if copy_checks_indicator is true then
		
		-- CHECK THE FILES TO MAKE SURE THEY"RE COMPLETELY AVAILABLE
		
		set the added_items to my check_added_items(the added_items)
		
		if the added_items is {} then return "no vaild items"
		
	end if
	
	
	
	tell application "Finder"
		
		--get the name of the folder
		
		set this_folder_name to the name of this_folder
		
	end tell
	
	
	
	-- find out how many new items have been placed in the folder
	
	set new_item_count to the number of items in the added_items
	
	
	
	-- CHECKS THE FILENAMES TO SEE IF THEY HAVE THE PROPER SUFFIXES FOR
	
	-- WORD 98, EXCEL 98, POWERPOINT 98, AND FILEMAKER PRO. IF THEY
	
	-- DON'T, CHECKS THE LENGTH OF THE FILENAME AND, IF NECESSARY, TRUNCATES
	
	-- IT ENOUGH TO MAKE SPACE FOR THE PROPER SUFFIX.
	
	tell application "AAC 128Kbps"
		repeat with x in added_items
			open x
		end repeat
		
	end tell
	
	
	
	
	
	
	
	
on error
	
end try

end adding folder items to

on remove_labels(the added_items)

tell application "Finder"
	
	repeat with this_item in the added_items
		
		set the label index of this_item to 0
		
	end repeat
	
end tell

end remove_labels

on check_added_items(the added_items)

-- check the transfer status of every added file to determine

-- if each file has completed being moved into the attached folder

set the notbusy_items to {}

repeat with i from 1 to the number of items in the added_items
	
	set this_item to (item i of the added_items)
	
	if my check_busy_status(this_item) is false then
		
		set the end of the notbusy_items to this_item
		
	end if
	
end repeat

return the notbusy_items

end check_added_items

on check_busy_status(this_item)

-- a folder can contain items partially transfered

-- this routine will wait for all the folder contents to transfer

if the last character of (this_item as text) is ":" then
	
	set the check_flag to false
	
	repeat
		
		-- look for any files within the folder that are still transferring
		
		tell application "Finder"
			
			try
				
				set the busy_items to the name of every file of the entire contents of this_item whose file type begins with "bzy"
				
			on error
				
				set the busy_items to {}
				
			end try
			
		end tell
		
		if the check_flag is true and the busy_items is {} then return false
		
		-- pause for the indicated time
		
		delay the folder_check_delay_time
		
		-- set the flag and check again
		
		set the check_flag to true
		
	end repeat
	
else -- the passed item is a single file, suitcase, clipping, etc.
	
	-- check the label of the item. If it is the marked label, then it's already been processed so ignore.
	
	tell application "Finder"
		
		if (the label index of this_item) as integer is the special_label_index then
			
			return "ignore"
			
		end if
		
	end tell
	
	set the check_flag to false
	
	repeat
		
		tell application "Finder"
			
			set the item_file_type to the file type of this_item
			
		end tell
		
		if the check_flag is true and the item_file_type does not start with "bzy" then
			
			tell application "Finder"
				
				set the label index of this_item to the special_label_index
				
			end tell
			
			-- allow the Finder time to change the label
			
			delay the item_check_delay_time
			
			return false
			
		else if the item_file_type does not start with "bzy" then
			
			-- set the flag and check again
			
			set the check_flag to true
			
		end if
		
		-- pause for the indicated time
		
		delay the item_check_delay_time
		
	end repeat
	
end if

end check_busy_status

thanks,

martin

Browser: Firefox 1.5
Operating System: Mac OS X (10.4)

The best solution I’ve found is to check the creator and file type of the file. The Finder creates copying files with creator ‘MACS’ and file type ‘brok’ and then changes these to the correct values after copying is complete. There’s other methods I’ve seen posted that check the file size, delay for a while and check again to see if the file’s stopped growing but these methods have a performance penalty.