Shirt Pocket Discussions

Shirt Pocket Discussions (https://www.shirt-pocket.com/forums/index.php)
-   General (https://www.shirt-pocket.com/forums/forumdisplay.php?f=6)
-   -   Pause/Restart VisualHub & Transmission for SD! backup (https://www.shirt-pocket.com/forums/showthread.php?t=2536)

minckster 06-25-2007 01:48 PM

Pause/Restart VisualHub & Transmission for SD! backup
 
I'd like to see if anyone has any comments or suggestions for the way that I went about pausing and restarting VisualHub and Transmission during SuperDuper's backups. It works, but seems a bit messy and convoluted. (If left running, VisualHub and Transmission muck up SD's backups because they create large files and run for a long time.)

The general idea is that I created an AppleScript using Script Editor to pause the two apps and another to restart them. Since SuperDuper! won't let me run an AppleScript before and after backups (and since I couldn't figure out how to translate them into shell scripts :o ), I saved the AppleScripts as applications (File -> Save As -> application from dropdown menu). Lo and behold! SD would let me run my newly created applications as scripts before and after my backup.

The AppleScripts follow. The shortcuts to pause the apps are cmd-. for ViusualHub and opt-cmd-. for Transmission.
Code:

-- Pause VisualHub or Transmission, if running
tell application "System Events"
        if ((count (every process whose name is "VisualHub")) > 0) then
                tell application "VisualHub" to activate
                tell application "System Events"
                        tell process "Visualhub"
                                -- Pause Conversion in VisualHub
                                keystroke "." using {command down}
                        end tell
                end tell
        end if
       
        if ((count (every process whose name is "Transmission")) > 0) then
                tell application "Transmission" to activate
                tell application "System Events"
                        tell process "Transmission"
                                -- Pause all downloads in Transmission
                                keystroke "." using {option down, command down}
                        end tell
                end tell
        end if
end tell

Code:

-- Resume VisualHub or Transmission, if running
tell application "System Events"
        if ((count (every process whose name is "VisualHub")) > 0) then
                tell application "VisualHub" to activate
                tell application "System Events"
                        tell process "Visualhub"
                                -- Resume Conversion in VisualHub
                                keystroke "/" using {command down}
                        end tell
                end tell
        end if
       
        if ((count (every process whose name is "Transmission")) > 0) then
                tell application "Transmission" to activate
                tell application "System Events"
                        tell process "Transmission"
                                -- Resume all downloads in Transmission
                                keystroke "/" using {option down, command down}
                        end tell
                end tell
        end if
end tell

I should mention that I tried
Code:

#!/bin/sh
exec osascript <<END
. . . (insert AppleScript here)
END

but that caused the VirtualHub and Transmission to open before the script evaluated "count (every process ...", so the if-clause was always true.

Please be gentle! They're only my second and third AppleScripts, and are the result of much Googling, copying, pasting, trial and error.

minckster 07-05-2007 07:00 AM

I simplified the scripts (below), so now I don't have to schedule my bittorrent downloading or video conversion around my SuperDuper backup schedule.
Code:

-- Pauses VisualHub and Transmission, if running
--    So they won't muck up SuperDuper's scheduled backups

tell application "System Events"
        if (exists process "VisualHub") then
                tell process "VisualHub"
                        set frontmost to true
                        tell me to do shell script "/bin/sleep 5"
                        keystroke "." using command down
                end tell
        end if
       
        if (exists process "Transmission") then
                tell process "Transmission"
                        set frontmost to true
                        keystroke "." using {option down, command down}
                end tell
        end if
end tell

The "sleep" line helps with those instances where I'd awake in the morning to find VisualHub as my frontmost app, but not paused, and SD! most distinctly unhappy with that situation.

dnanian 07-05-2007 09:20 AM

Working well for you?

minckster 07-05-2007 10:05 AM

The last three nights the script above worked fine.

The problem was (is?) that the "keystroke" for pausing VisualHub didn't seem to catch always. vh124ffmeg, which is the process that does the actual video conversion, takes 100% of my CPUs (nice'd), so there can be a delay getting VH to come to the foreground. That delay is what made me insert the sleep before the "keystroke". Could "delay" be a better choice for me than "/bin/sleep" in this instance?

I wish I could find a way of sending a pause command directly to either VisualHub or vh124ffmpeg instead of flailing around with "System Events" and "keystroke", but that seems more like a question for the VH forums than SD's.

Thanks for the great comments in your scripts! I guess you can recognize the sleep snippet above. I think I picked up "if exists process" from you too.

dnanian 07-05-2007 10:11 AM

Yeah, I tried to document the script as completely as is practical, and I'm glad it proved useful to you... :)

gcoghill 08-05-2009 01:50 PM

How does one run these from the Super Duper options? Using the shell script option and choosing the AppleScripts saved as applications?

gcoghill 08-05-2009 02:07 PM

Also, this hint at MacOSXHints.com suggests saving scripts as Application Bundles if you are on an Intel Mac.

minckster 08-05-2009 02:26 PM

1 Attachment(s)
Quote:

Originally Posted by gcoghill (Post 25897)
How does one run these from the Super Duper options? Using the shell script option and choosing the AppleScripts saved as applications?

Yes.

Now a long answer, to avoid problems or gotchas.

From the main SuperDuper! screen, select Options > Advanced > check "Run shell script before copy starts" and enter the path to the script. See attached image.

Note that my newest Pause script makes SD! wait until Turbo.264 is done, because T.264 doesn't have a pause feature. The script then pauses VisualHub, Handbrake, and Transmission. The Resume script restarts VisualHub, Handbrake, and Transmission. Both scripts have worked great for many months without fail.

I saved both AppleScripts as "Applications" in Script Editor (File > Save As). Watch out for the options, in particular "Startup Screen" which should be off.

A silly gotcha: Once you've saved the script as an application, you have to open Script Editor and then go to File > Open to edit the application.

Also, my scripts use "GUI Scripting", so you'll need to enable that in the "AppleScript Utility" if your scripts use 'tell application "System Events"' and something that's -- well, GUI (keystroke,...).

minckster 08-05-2009 02:31 PM

Quote:

Originally Posted by gcoghill (Post 25898)
Also, this hint at MacOSXHints.com suggests saving scripts as Application Bundles if you are on an Intel Mac.

Thanks!! I had no idea. I'll go switch to application bundles.

Edit to add: I just verified that on 10.5.7, my AppleScript-Applications were indeed PowerPC applications.

gcoghill 08-05-2009 03:56 PM

Sounds great, thanks for the info!


All times are GMT -4. The time now is 01:31 AM.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc.