-- 1. CONFIGURATION screen_width = 1000 -- FIXME aspect_ratio = 1.5 -- a good default for dragonframe's typical 1620x1080 exports window_titlebar_height = 39 -- 2. UTILITY FUNCTIONS function exec(cmd) local handle = io.popen(cmd) local result = handle:read("*a") handle:close() result = result:sub(1, #result - 1) -- remove trailing newline return result end function linesToTable(s) local t = {} for x in string.gmatch(s, "([^%s]+)") do table.insert(t, x) end return t end -- 3. GET FILE LIST -- TODO: get these some other way that's easier to use... -- maybe args passed in from an Automater script? local cd = exec("pwd") local files = exec('stat -f "%N" *.mp4') -- Create a table containing the complete path to every video: local filetable = linesToTable(files) for k, file in ipairs(filetable) do print("k "..k.." v "..file) filetable[k] = cd.."/"..file print(filetable[k]) end -- 4. PREP FOR PLAYING -- FIXME: if #filetable <= 9 then cols = 3 rows = 3 end video_width = screen_width // cols -- "floor division" returns an integer video_height = video_width // aspect_ratio -- 5. PLAY + POSITION VIDEOS -- We're going to loop through the list of videos. -- For each video we will: -- 1. use AppleScript to open it, playing on loop -- 2. move it to the appropriate position current_col = 1 current_row = 1 for _, file in ipairs(filetable) do print("opening "..file) print(string.format(" col: %s, row: %s", current_col, current_row)) -- Calculate position / dimensions local x1 = (current_col * video_width) - video_width local y1 = (current_row * video_height) - video_height + (current_row * window_titlebar_height) - window_titlebar_height local x2 = x1 + video_width local y2 = y1 + video_height local bounds = string.format("{%d, %d, %d, %d}", x1, y1, x2, y2) print(" "..bounds) print() -- Open the video + play it on loop os.execute( string.format( [[osascript -e ' set f to POSIX file "%s" tell application "QuickTime Player" set theMovie to open file f tell theMovie set the looping of theMovie to true play end tell end tell' ]], file)) -- Move it to the correct spot on the screen os.execute(string.format("osascript -e 'tell application \"%s\" to set the bounds of the front window to %s'", "QuickTime Player", bounds)) -- Update grid positioning for the next iteration current_col = current_col + 1 if current_col > cols then current_col = 1 current_row = current_row + 1 end end