Greetings and salutations. Long time Reader, first time poster.
I have a television capture setup on my mac that outputs to .mpg. I have been successful in creating a workflow that converts the files to h.264, adds them to iTunes, tags them as TV Shows and syncs with the ipod. However, I would like to create an applescript inside of this workflow that accepts the .mpg movies early on as (Files/Folders), examines them, filters out any that have a modification date that is newer than the last five minutes and then passes the results onto the next workflow action. This will allow the workflow to ignore the movie files that are actively being processed by the capture software and thus avoiding an incomplete/corrupted movie to move through the rest of the workflow.
My own attempts (based on similar scripting by another author) has not been successful so far. My work so far is as follows:
on run {input, parameters}
tell application "Finder"
set tvShows to input
set movieCount to the count of files in tvShows
if movieCount > 0 then
set minutesAgo to ((current date) - (5 * minutes))
set movieFiles to the name of every file of tvShows
set tvShows to tvShows as string
repeat with i from 1 to movieCount
set movieFile to item i of movieFiles
set moviePath to {tvShows & movieFile} as string
set modDate to the modification date of item moviePath
if modDate - minutesAgo then
set input to moviePath
end if
end repeat
end if
end tell
return input
end run
Any help is greatly appreciated. Thank you.
Hi and welcome.
According your code the input is just one folder.
The main problem is, the handler variable input is always a list, so you have to reference an item of this list.
in Leopard this might be sufficient
on run {input, parameters}
tell application "Finder" to return (items of item 1 of input whose modification date < ((current date) - 300)) as alias list
end run
it passes all items of the folder whose modification date is older than 5 minutes ago
in Tiger you get an error message using alias list, if there is only one item,
so a little error handling must be included
on run {input, parameters}
tell application "Finder"
set filteredItems to (items of item 1 of input whose modification date < ((current date) - 300))
try
return filteredItems as alias list
on error
return filteredItems as alias as list
end try
end tell
end run
Thanks for your reply Stefan.
I believe that those scripts are almost what I need. However after an initial test, I saw that no items were getting through the filter. After re-reading your post I found that I misrepresented myself by my misguided scripting attempt. The action that will proceed the date modification filter script is a “Find Finder Items” action that returns the files, but no encapsulating folder.
any suggestion based on this development?
I really can’t believe all that I learned out of just reading those two scripts you posted. I’m actually enjoying the learning process of all this and plan to buy an applescript book this afternoon.
ok, then try this
on run {input, parameters}
set output to {}
repeat with oneFile in input
if modification date of (info for oneFile) < ((current date) - 300) then set end of output to contents of oneFile
end repeat
return output
end run
That did the trick.
It’s also going to help me create similar filters I have in mind for other projects.
Thank You