From d6ee17292b0b4c9d4d6b0531bf8505965b54ac92 Mon Sep 17 00:00:00 2001 From: n loewen Date: Mon, 6 May 2024 15:48:30 -0700 Subject: [PATCH] Tidy up --- mosaic.lua | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/mosaic.lua b/mosaic.lua index ebeb40b..6e28a50 100644 --- a/mosaic.lua +++ b/mosaic.lua @@ -1,3 +1,12 @@ +-- 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") @@ -14,12 +23,15 @@ function linesToTable(s) 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") --- print("| "..cd.." |") - local files = exec('stat -f "%N" *.mp4') --- print("| "..files.." |") +-- 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) @@ -27,33 +39,43 @@ for k, file in ipairs(filetable) do print(filetable[k]) end + +-- 4. PREP FOR PLAYING + -- FIXME: if #filetable <= 9 then cols = 3 rows = 3 end --- FIXME: -screen_width = 1000 -aspect_ratio = 1.5 video_width = screen_width // cols -- "floor division" returns an integer video_height = video_width // aspect_ratio -window_titlebar_height = 39 + + +-- 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() - -- os.execute(string.format("open -a 'QuickTime Player' %s", file)) + -- Open the video + play it on loop os.execute( string.format( [[osascript -e ' @@ -67,9 +89,10 @@ for _, file in ipairs(filetable) do end tell' ]], file)) - local cmd = string.format("osascript -e 'tell application \"%s\" to set the bounds of the front window to %s'", "QuickTime Player", bounds) - print(cmd) - os.execute(cmd) + -- 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