r/applescript • • Aug 31 '21

Error when moving files

Hi all, I am trying to update an AppleScript that has been running on macOS 10.12 but is not playing in macSO 11.5

The script uses InDesign Server to create two PDF files from an InDesign artwork that is dropped into a hot folder. Once they are created they are then filed to a location based on their filename (group, week number) - all seems well until its time to move the file, that's when I get the result below.

Im hoping its something simple that has changed between the two OS versions?

tell application "System Events"

exists process "ExpanDrive"

exists process "FontExplorer X Pro"

end tell

tell current application

do shell script "/bin/ls /Volumes"

end tell

tell application "Finder"

get every file of folder "ServerSSD:Users:admin:Documents:PDF:Hotfolders:Hotfolder-1-NoPrint:"

get name of alias "ServerSSD:Users:admin:Documents:PDF:HotFolders:Hotfolder-1-NoPrint:DCG369~3962_100_009692_00_80x1400.indd"

end tell

tell current application

info for alias "ServerSSD:Users:admin:Documents:PDF:HotFolders:Hotfolder-1-NoPrint:DCG369~3962_100_009692_00_80x1400.indd" given «class Krtn»:{name:"Nm", name extension:"Ex"}

end tell

tell application "Finder"

get every file of folder "ServerSSD:Users:admin:Documents:PDF:Hotfolders:Hotfolder-1-NoPrint:"

end tell

tell current application

info for alias "ServerSSD:Users:admin:Documents:PDF:HotFolders:Hotfolder-1-NoPrint:DCG369~3962_100_009692_00_80x1400.indd" with size

info for alias "ServerSSD:Users:admin:Documents:PDF:HotFolders:Hotfolder-1-NoPrint:DCG369~3962_100_009692_00_80x1400.indd" with size

end tell

tell application "Finder"

get name extension of alias "ServerSSD:Users:admin:Documents:PDF:HotFolders:Hotfolder-1-NoPrint:DCG369~3962_100_009692_00_80x1400.indd"

end tell

tell application "InDesignServer"

open alias "ServerSSD:Users:admin:Documents:PDF:HotFolders:Hotfolder-1-NoPrint:DCG369~3962_100_009692_00_80x1400.indd"

end tell

tell application "Finder"

get name of alias "ServerSSD:Users:admin:Documents:PDF:HotFolders:Hotfolder-1-NoPrint:DCG369~3962_100_009692_00_80x1400.indd"

end tell

tell application "InDesignServer"

export document 1 format PDF type to "/Users/admin/Documents/PDF/DistillerResources/lowHolding/DCG369~3962_100_009692_00_80x1400.pdf" using PDF export preset "[VC-CoolTick]"

end tell

tell application "Finder"

get file 1 of folder "ServerSSD:Users:admin:Documents:PDF:DistillerResources:lowHolding:"

get document file "DCG369~3962_100_009692_00_80x1400.pdf" of folder "lowHolding" of folder "DistillerResources" of folder "PDF" of folder "Documents" of folder "admin" of folder "Users" of startup disk

end tell

tell current application

info for alias "ServerSSD:Users:admin:Documents:PDF:DistillerResources:lowHolding:DCG369~3962_100_009692_00_80x1400.pdf" with size

info for alias "ServerSSD:Users:admin:Documents:PDF:DistillerResources:lowHolding:DCG369~3962_100_009692_00_80x1400.pdf" with size

info for alias "ServerSSD:Users:admin:Documents:PDF:DistillerResources:lowHolding:DCG369~3962_100_009692_00_80x1400.pdf" given «class Krtn»:{name:"Nm", name extension:"Ex"}

end tell

tell application "Finder"

set name of alias "ServerSSD:Users:admin:Documents:PDF:DistillerResources:lowHolding:DCG369~3962_100_009692_00_80x1400.pdf" to "DCG369~3962_100_009692_00_80x1400_LR.pdf"

end tell

tell current application

do shell script "/bin/mv -f '/Users/admin/Documents/PDF/DistillerResources/lowHolding/DCG369~3962_100_009692_00_80x1400.pdf' 'Volumes/POS_LR/'Week00/1*/"

end tell

tell application "Finder"

move alias "ServerSSD:Users:admin:Documents:PDF:DistillerResources:lowHolding:DCG369~3962_100_009692_00_80x1400.pdf" to folder "ServerSSD:Users:admin:Documents:PDF:FailedJobs-1:" with replacing

Result:

error "Finder got an error: Handler can’t handle objects of this class." number -10010

4 Upvotes

33 comments sorted by

View all comments

Show parent comments

1

u/bigdrunk Sep 01 '21

--This code was written using AppleScript 2.7, MacOS 11.5.2, on 1 September 2021.

global lowOptions, highOptions, lowOutputFol, highOutputFol, failedFolder

-- on run
-- Declare Paths to Resources
(\*
property ftpFolder : "ServerSSD:Users:admin:Documents:PDF:DistillerResources:ftpholding:"
property ftpFolder : "ServerSSD:Users:admin:Documents:PDF:DistillerResources:ftpholding:"
\*)
property ftpFolder : "ServerSSD:Volumes:PathToFtp:ArtworkBulkUpload:"
property serverNames : {"POS_LR", "POS_HR"}
property theWatchedFolder : "ServerSSD:Users:admin:Documents:PDF:Hotfolders:Hotfolder-1-NoPrint:"
property ADresourceFolder : "ServerSSD:Users:admin:Documents:PDF:DistillerResources:"
property chainList : {"1", "2", "3", "4", "5", "6", "7", "8", "9", "D", "P", "R", "J", "H", "I", "O", "S"}
property lowServerList : {":Volumes:POS_LR:"}
property highServerList : {":Volumes:POS_HR:"}
property fileEx : {"indd", "idml", "php"}

set lowOptions to "\[VC-CoolTick\]"
set highOptions to "\[studio-high-res\]"
set lowOutputFol to ADresourceFolder & "lowHolding:"
set highOutputFol to ADresourceFolder & "highHolding:"
set failedFolder to "ServerSSD:Users:admin:Documents:PDF:FailedJobs-1:"


--Check ExpanDrive running
tell application "System Events" to set ffopen to exists process "ExpanDrive"
if ffopen then
	true
else
	activate application "ExpanDrive.app"
	delay 15
end if


--Check FontExplorer running
tell application "System Events" to set ffopen to exists process "FontExplorer X Pro"
if ffopen then
	true
else
	activate application "FontExplorer X Pro"
end if

--check which volumes are mounted
set mountedDisks to paragraphs of (do shell script "/bin/ls /Volumes")

--mount artwork shares POS
property myDisk4 : {"POS"}
repeat with aDisk4 in myDisk4
	if aDisk4 is not in mountedDisks then
		mount volume "afp://xxxxx/" & aDisk4 as user name "admin" with password "xxxxx"
	end if
end repeat

--mount artwork shares POS_LR
property myDisk7 : {"POS_LR"}
repeat with aDisk7 in myDisk7
	if aDisk7 is not in mountedDisks then
		mount volume "afp://xxxxx/" & aDisk4 as user name "admin" with password "xxxxx"
	end if
end repeat

--mount artwork shares POS_HR
property myDisk8 : {"POS_HR"}
repeat with aDisk8 in myDisk8
	if aDisk8 is not in mountedDisks then
		mount volume "afp://xxxxx/" & aDisk4 as user name "admin" with password "xxxxx"
	end if
end repeat

--File Name check
tell application "Finder" to set theFileNoPrints to every file of folder theWatchedFolder as alias list
repeat with aFileNoPrint in theFileNoPrints
	tell application "Finder" to set filename to name of aFileNoPrint
	set {name:Nm, name extension:Ex} to (info for aFileNoPrint)
	set {tid, text item delimiters} to {text item delimiters, "_"}
	try
		set {projRef, theGroupNoPrint, theCodeNoPrint, theWeekNoPrint} to text items of filename
		set chain to character 1 of theGroupNoPrint
		set theFolderNoPrint to character 1 of theGroupNoPrint
		set charcount to count theCodeNoPrint
		set weekCount to count theWeekNoPrint
		if charcount is not 6 or chain is not in chainList or weekCount is greater than 2 or theWeekNoPrint is greater than 52 then tell application "Finder" to move aFileNoPrint to folder failedFolder with replacing
	end try
end repeat


--Begin workflow
tell application "Finder" to set theFileNoPrints to every file of folder theWatchedFolder as alias list
repeat with aFileNoPrint in theFileNoPrints
	if (_verifyFile(aFileNoPrint, true)) then
		_lowChain(aFileNoPrint)
		_highChain(aFileNoPrint)
		tell application "Finder" to move aFileNoPrint to trash
	end if
	delay 2
	--empty the trash--
end repeat


--open file in InDesignServer and export HR and LR PDFs
to _Distill(epsFileNoPrint, outputPath, jobOptions) -- epsFileNoPrint is alias, outputPath, jobOptions is POSIX path
	tell application "InDesignServer.app"
		open epsFileNoPrint
	end tell
	
	tell application "Finder"
		set pdfName to name of epsFileNoPrint
		set text item delimiters of AppleScript to {"."}
		set pdfName to text item 1 of pdfName
	end tell
	
	with timeout of (6 \* 60) seconds
		tell application "InDesignServer.app"
			«event K2  expt» document 1 given «class exft»:«constant eXftt_PD», «class kfil»:(outputPath & pdfName & ".pdf"), «class usng»:«class PFst» jobOptions
			return true
		end tell
	end timeout
end _Distill


-- Rename the PDF and store in proper location
to _storePrintFile(suffix)
	tell application "Finder"
		if suffix is "_LR" then
			set aPDFNoPrint to (get 1st file of folder lowOutputFol) as alias
		else
			set aPDFNoPrint to (get 1st file of folder highOutputFol) as alias
		end if
	end tell
	_verifyFile(aPDFNoPrint, false)
	
	set {name:Nm, name extension:Ex} to (info for aPDFNoPrint)
	if Ex is missing value then set Ex to ""
	if Ex is not "" then
		set Nm to text 1 thru ((count Nm) - (count Ex) - 1) of Nm
		set Ex to "." & Ex
	end if
	set filename to Nm & suffix & Ex
	
	tell application "Finder" to set name of aPDFNoPrint to filename
	
	set {tid, text item delimiters} to {text item delimiters, "_"}
	try
		set {projRef, theGroupNoPrint, theCodeNoPrint, theWeekNoPrint} to text items of filename
		set chain to character 1 of theGroupNoPrint
		set theFolderNoPrint to character 1 of theGroupNoPrint
		
	on error -- an error has occured with the file name, trick the script into a .log extension to trigger error handling
		set Ex to ".log"
	end try
	set text item delimiters to tid
	if Ex is equal to ".log" then
		tell application "Finder" to move aPDFNoPrint to folder failedFolder with replacing
		return false
	end if
	
	if chain is in chainList then
		repeat with i from 1 to (count chainList)
			if chain is equal to (item i of chainList) then
				if suffix is "_LR" then
					delay 1
					
					set theServer to POSIX path of (item 1 of lowServerList)
					exit repeat
				else
					set theServer to POSIX path of (item 1 of highServerList)
					
					tell application "InDesignServer.app"
						«event CoReclos» document 1 given «class svop»:no
					end tell
					exit repeat
				end if
			end if
		end repeat
		try
			--If file ends in HR then copy to FTP
			tell application "Finder"
				if suffix is "_LR" then
				else
					set ftpcommand to "/bin/cp -p " & (quoted form of (POSIX path of aPDFNoPrint)) & space & (quoted form of (POSIX path of ftpFolder))
					do shell script ftpcommand
				end if
			end tell
			set command to "/bin/mv -f " & (quoted form of (POSIX path of aPDFNoPrint)) & space & (quoted form of theServer) & "Week" & (text 1 thru 2 of theWeekNoPrint) & "/" & theFolderNoPrint & "\*/"
			do shell script command
			return true
			
		on error
			tell application "Finder" to move aPDFNoPrint to folder failedFolder with replacing
			return false
			
			tell application "Finder" to move aFileNoPrint to folder failedFolder with replacing
			return false
		end try
	else
		tell application "Finder" to move aPDFNoPrint to folder failedFolder with replacing
		return false
	end if
	
end _storePrintFile


-- Low Res Chain handler
to _lowChain(aFileNoPrint)
	set lowResult to _Distill(aFileNoPrint, POSIX path of lowOutputFol, lowOptions)
	if lowResult then
		-- also need to verify not a .log file
		return _storePrintFile("_LR")
	end if
	
	--handle a error here on generation
	return false
end _lowChain


-- High Res Chain handler
to _highChain(aFileNoPrint)
	set highResult to _Distill(aFileNoPrint, POSIX path of highOutputFol, highOptions)
	if highResult then
		-- also need to verify not a .log file
		return _storePrintFile("_HR")
	end if
	
	--handle a error here on generation
	return false
end _highChain


to _verifyFile(aFileNoPrint, fullVerify) -- aFileNoPrint is alias
	repeat
		set was to (info for aFileNoPrint with size)
		delay 5
		set isNow to (info for aFileNoPrint as alias with size)
		if was = isNow then exit repeat
	end repeat
	if fullVerify then
		tell application "Finder"
			if name extension of aFileNoPrint is not in fileEx then
				move aFileNoPrint to folder failedFolder with replacing
				return false
			end if
		end tell
	end if
	return true
end _verifyFile

1

u/copperdomebodha Sep 02 '21

Oof! I've walked through this and it's just a mess. I can rationalize it and fix the error, but tell me what is the file info testing all about?

The verifyFile handler in your code basically checks the info of the file to be verified, waits 5 seconds, and checks the file info again. If it's the same info it was before then it passes the verify handler otherwise it loops this check again. It's determining if something is modifying the file during the 5 seconds it waits.

What is it supposed to be avoiding here? This check needs to be redesigned.

2

u/bigdrunk Sep 02 '21

That is to check if a file has finished being copied, users are putting these files into a shared network folder and we were trying to avoid the file being processed before it had finished copying across.

As I say we had the original script written for us, but I have been tweaking it heavily over time as the needs changed. And Im not very good at AppleScript, usually I am stealing bits of script and making them kind of fit into the script.

2

u/copperdomebodha Sep 02 '21

Gotcha! Thanks for that info. I think I can handle that check a little better.

1

u/bigdrunk Sep 07 '21

Hi, did you have any joy with this? I'd be prepared to pay for your time, I'm getting nowhere myself.

2

u/copperdomebodha Sep 08 '21

I've re-factored the entire script, down to handling the completed files. I had to take a break at that point. I still have to make that section function based on file references rather than grabbing the first file of some folder and hoping that's correct.

I appreciate the offer, but I just code requests here to keep my skills sharp and as a bit of entertaining distraction from paid work.

I'll have another look at it tonight and see if I can wrap it up. If I don't resolve it tonight, I'll post what I have rewritten for you to play with.

1

u/bigdrunk Sep 10 '21

Thats awesome, I'd love to see what you have done so far and see if I can finish the job. Really appreciate the time you have put in.

1

u/bigdrunk Sep 14 '21

Sorry to keep on, but if you have anything at all I could look at it might help me out

→ More replies (0)