Wait for a Volume to Mount or Unmount/Eject in AppleScript

In working with Alfred, I've created a workflow that loads files from a Volume (DMG) file. In order for this to work correctly, I need the script to wait until the volume is actually loaded and visible in Finder before continuing.

This can be done a few different ways, but here is the AppleScript code I'm using which works with Alfred or Keyboard Maestro. It's based on several examples I found.

The first script gets the name of the mounted volumes and keeps looping until the expected volume shows up in the list.

The second script is the opposite. It keeps looping and trying to eject the disk until the name isn't in the list of mounted volumes.

Wait for Volume to be Mounted

set mountedDisk1 to list disks
set thevolume1 to "Insert Volume Name Here"
set wasmounted to false
set counter to 0
set max_number_of_iteration to 30

--activate
--use activate to bring dialog to front
if mountedDisk1 contains thevolume1 then
    set wasmounted to true
end if

if wasmounted is false then
    delay 1
    tell application "Finder"
        if (not (exists (disk thevolume1))) then
            repeat until (mountedDisk1 contains thevolume1 or counter is greater than max_number_of_iteration)
            set mountedDisk1 to list disks
            if mountedDisk1 contains thevolume1 then
                --successful
            end if
            delay 1
            set counter to counter + 1
            end repeat
        end if
    end tell
end if

Wait for Volume to be Unmounted/Ejected

set mountedDisk1 to list disks
set thevolume1 to "Insert Volume Name Here"
set wasmounted to false
set counter to 0
set max_number_of_iteration to 30

--activate
--use activate to bring dialog to front
if mountedDisk1 contains thevolume1 then
    set wasmounted to true
end if

if wasmounted is true then
    delay 1
    tell application "Finder"
    eject disk thevolume1
        if ((exists (disk thevolume1))) then
            repeat until (mountedDisk1 does not contain thevolume1 or counter is greater than max_number_of_iteration)
            set mountedDisk1 to list disks
            if mountedDisk1 contains thevolume1 then
                eject disk thevolume1
            end if
            delay 1
            set counter to counter + 1
            end repeat
        end if
    end tell
end if

Adapted from:
https://macscripter.net/viewtopic.php?id=29886
https://stackoverflow.com/questions/14266855/applescript-to-mount-drive-and-once-finished-report-if-successful

That's my story and I'm sticking to it.

Author Signature for Posts

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.