Not sure what's up with the hang =/

Unfortunately it appears that the JAX script is silently failing when used 
for rules

My apologies that I couldn't be more help

Daniel

On Wednesday, April 12, 2017 at 1:42:42 PM UTC-5, rlhamil wrote:
>
> Thanks.  For some reason, the action I want to take (modify note 
> description and return), or at any rate, something in the commented out 
> block below, causes the script to hang if that circumstance (removing AC 
> while backup running) arises.  But the continued presence of the volume 
> icon on the desktop is enough visual feedback, that I'm ok with what I have 
> now.
>
> The apparent quirkiness and debugging difficulty, on top of the 
> pseudo-natural language style, makes AppleScript rather challenging for me. 
> :-)
>
> using terms from application "Growl"
>    on evaluate notification with notification
>       set backupVolume to "LaCie"
>       set mountedMessage to backupVolume & " Mounted"
>       set unmountedMessage to backupVolume & " Unmounted"
>       if notification's app name equals "HardwareGrowler" then
>          if notification's note title equals "On Battery Power" then
>             set TimeMachineIsRunning to do shell script "tmutil status"
>             if TimeMachineIsRunning contains "Running = 0;" then
>                tell application "Finder"
>                   if disk backupVolume exists then eject disk backupVolume
>                end tell
>
>          -- The bit below seems to make the script hang.  Still-present
>          -- volume icon will have to be enough feedback.
>          (*
>             else
>                set alertMessage to ¬
>                "\rWarning: Time Machine backup in progress, " & ¬
>                "cannot auto-eject backup volume " & backupVolume & "."
>                set notification's note description to ¬
>                notification's note description & alertMessage
>                return {notification return:notification}
>          *)
>             end if
>          else if notification's note title equals mountedMessage then
>             do shell script "sudo tmutil enable;sudo tmutil disablelocal"
>          else if notification's note title equals unmountedMessage then
>             do shell script "sudo tmutil disable;sudo tmutil disablelocal"
>          end if
>       end if
>    end evaluate notification
> end using terms from
>
>
>
>
> On Apr 12, 2017, at 13:54, Daniel Siemer <[email protected] <javascript:>> 
> wrote:
>
> Ill answer the other question first, yes an explicit return is needed to 
> modify a notification via rules.
> After modifying the description on notification do this:
> return { notification return: notification }
>
> (from our scripting dictionary, only title, description, icon, sticky, and 
> priority are modifiable)
>
> Growl invokes the rules script using by getting an NSUserScriptTask for 
> the Rules.scpt file (and only if it comes back as an 
> NSUserApplescriptTask).  It's executed using our event descriptors, but the 
> actual execution is done outside our process and sandbox.  Compiled 
> AppleScript scripts should work with the right extension, but I have never 
> tried working with other OSA languages such as javascript. I will look at 
> seeing if I can get a hello world sample JXA script working, but not 
> holding my breath.
>
> The original intent was to allow true unix scripting for rules with json 
> inputs/returns, but there were problems with the NSUserUnixTask (I think I 
> was having problems getting return values).
>
> NoteType is visible to the user under an application's entry in 
> "Applications" in preferences.  On the notifications tab for the 
> application, on each note at the bottom of its preferences is a label 
> labeled "Rule Type:" Note that some apps use long-ish names here, just drag 
> select to select it all before copying.
>
> On Tuesday, April 11, 2017 at 5:26:54 PM UTC-5, rlhamil wrote:
>>
>> Well, to answer one of my own questions, here are what the properties look
>> like for a HardwareGrowler mount or unmount notification (omitting the
>> note icon, which I didn't think made sense to write out as text!) for
>> a volume in this case named "LaCie":
>>
>> host: localhost
>> app name: HardwareGrowler
>> note type: VolumeMounted
>> note title: LaCie Mounted
>> note description: Click to open
>> sticky: false
>> priority: normal
>>
>> host: localhost
>> app name: HardwareGrowler
>> note type: VolumeUnmounted
>> note title: LaCie Unmounted
>> note description: 
>> sticky: false
>> priority: normal
>>
>>
>> Here's my script again, with the ability to, when AC power is removed, 
>> auto-eject the backup disk if a Time Machine backup is not currently in 
>> progress.  The action to take if a backup IS running has not yet  been 
>> exercised. :-)  (that relates to my other question: whether an explicit 
>> return of the notification is needed to pass back a modified property - 
>> some help with that please?)
>>
>> The volume name is now in a variable; assuming a single external backup 
>> drive on a laptop, this might work in other cases, by just changing the 
>> value of backupVolume appropriately.
>>
>> I _hate_ debugging AppleScript, it doesn't tell you where an error is, 
>> only that there is one.  I got around that with osascript -i and pasting in 
>> a single line at a time; but there's got to be a better way (short of 
>> buying Late Night Software's expensive script debugger).  Still, once it's 
>> working, it's kind of nice to just do one thing and have all the rote 
>> followup happen by itself. :-)
>>
>> using terms from application "Growl"
>>    on evaluate notification with notification
>>       -- change value below as needed
>>       set backupVolume to "LaCie"
>>       set mountedMessage to backupVolume & " Mounted"
>>       set unmountedMessage to backupVolume & " Unmounted"
>>       if notification's app name equals "HardwareGrowler" then
>>          if notification's note title equals "On Battery Power" then
>>             set TimeMachineIsRunning to do shell script "tmutil status"
>>             if TimeMachineIsRunning contains "Running = 0;" then
>>                tell application "Finder"
>>                   if disk backupVolume exists then eject disk backupVolume
>>                end tell
>>             else
>>                set alertMessage to ¬
>>                "\rWarning: Time Machine backup in progress, " & ¬
>>                "cannot auto-eject backup volume " & backupVolume & "."
>>                set notification's note description to ¬
>>                notification's note description & alertMessage
>>             end if
>>          else if notification's note title equals mountedMessage then
>>             do shell script "sudo tmutil enable;sudo tmutil disablelocal"
>>          else if notification's note title equals unmountedMessage then
>>             do shell script "sudo tmutil disable;sudo tmutil disablelocal"
>>          end if
>>       end if
>>       -- absent an explicit return, defaults are used
>>    end evaluate notification
>> end using terms from
>>
>>
>>
>>
>>
>> On Apr 10, 2017, at 15:11, Richard L. Hamilton <[email protected]> wrote:
>>
>> How does Growl invoke the ~/Library/Application 
>> Scripts/com.Growl.GrowlHelperApp/Rules.scpt file?  Notwithstanding the 
>> ".scpt" suffix, it works fine if Rules.scpt has plain text AppleScript in 
>> it; but if it could have a "compiled" script in there instead, anything 
>> listed by osalang could be used; for Yosemite and later, that includes 
>> JavaScript.
>>
>> And that doesn't even count having the script use "do shell script" not 
>> only to take some unusual action, but by passing the interesting properties 
>> of the notification, give the script some ability to choose what to do 
>> about it.   Quoting the properties safely yet keeping them separate while 
>> passing them might be a tricky proposition, and not one I wish to explore 
>> right now. :-)
>>
>> What are examples of what the "note type" property might have in it, 
>> anyway?  I don't see that field shown in the history, and didn't need it in 
>> this case, so I didn't fool with a temporary script just to see what all 
>> the properties looked like.
>>
>> One more question: if I want to modify a property (the note description, 
>> in what I have in mind, by appending some text to it), do I have to 
>> explicitly return the notification, or will the default behavior see the 
>> change?  I saw an example of doing things when switching to battery power, 
>> and I think I can hook in some code that, when AC is removed, checks if a 
>> backup is running, and if not, ejects the backup volume (if it's mounted). 
>>  If a backup _is_ running, I may want to append "\r Note: cannot auto-eject 
>> backup volume" to the notification text for going on battery; otherwise, I 
>> ought to generate an additional visual indication ("display alert", or can 
>> I send an additional notification within the rules script, without messing 
>> up the notification I'm responding to? and wouldn't I have to make up a 
>> bogus application name for that?").
>>
>> On Apr 10, 2017, at 11:59, Chris Forsythe <[email protected]> wrote:
>>
>> I believe if you want something more esoteric you can execute a script in 
>> a different language. I'm not sure on how to accomplish it but I'm sure the 
>> googles do. I'm glad this is headed in the direction you need though, it's 
>> definitely something we added with this sort of usage in mind.
>>
>> On Fri, Apr 7, 2017 at 6:40 PM, Richard L. Hamilton <[email protected]> 
>> wrote:
>>
>>> Well, this seems to do what I want, as near as possible - enable or 
>>> disable Time Machine depending on whether the backup drive is mounted, and 
>>> in either case (since this doesn't seem to be remembered!) turn off local 
>>> snapshots, which seem to me not a great idea with an SSD, at least if one 
>>> doesn't need such a guarantee that backups will be particularly recent.
>>>
>>> using terms from application "Growl"
>>>    on evaluate notification with notification
>>>       if notification's app name equals "HardwareGrowler" then
>>>          if notification's note title equals "LaCie Mounted" then
>>>             do shell script "sudo tmutil enable;sudo tmutil disablelocal"
>>>          else if notification's note title equals "LaCie Unmounted" then
>>>             do shell script "sudo tmutil disable;sudo tmutil 
>>> disablelocal"
>>>          end if
>>>       end if
>>>       -- absent an explicit return, defaults are used
>>>    end evaluate notification
>>> end using terms from
>>>
>>> This does assume that the account using it is able to do a "sudo" 
>>> without password; other than that and the name of the volume mounted or 
>>> unmounted, it's probably fairly generic for such a use.  Having the Script 
>>> Editor show me Growl's dictionary, along with looking at actual recent 
>>> examples in the Growl log, provided the information I needed.
>>>
>>> AppleScript was clearly descended from something intended to appeal to 
>>> non-programmers; as such, it makes my head hurt a bit; but for something 
>>> small that can't as easily be done any other way, I guess I can live with 
>>> that. :-)
>>>
>>> On Mar 27, 2017, at 14:13, Chris Forsythe <[email protected]> wrote:
>>>
>>> It's fine I think you're golden with Growl given it has two events. I'd 
>>> really suggest the applescript rules. Think of applescript as just a 
>>> different language and don't try to make it a 1:1 comparison to say bash or 
>>> python. It's more like plain talking so to speak.
>>>
>>> Anyhow you could write a script to watch for the contents for the 
>>> different things you want to watch for. The very end of our documentation 
>>> talks about how to execute a shell script from there:
>>>
>>> http://growl.info/documentation/applescript-rules
>>>
>>> I think this is going to handle what you need and be fairly simple once 
>>> you've got it worked out in your head and laid out. If you read it and run 
>>> into issues once making the script reply back here.
>>>
>>>
>>> On Sat, Mar 25, 2017 at 2:27 AM, Richard L. Hamilton <[email protected]> 
>>> wrote:
>>>
>>>> (apologies if this is a dupe; it looked like it failed before, when I 
>>>> had a cc to [email protected] when my membership hasn't 
>>>> been approved yet)
>>>>
>>>> I'd like to have a script run
>>>> sudo tmutil enable
>>>> when /Volumes/LaCie is mounted, and
>>>> sudo tmutil disable
>>>> sudo tmutil disablelocal
>>>>
>>>> when it's unmounted (I don't want local snapshots on the internal SSD, 
>>>> but tmutil disablelocal doesn't seem to be remembered across reboots; it's 
>>>> good enough that I have backups running when the Thunderbolt drive is 
>>>> plugged in).
>>>>
>>>> Additionally, for that and any other mount/unmount not in 
>>>> HardwareGrowler's exception list, I'd like the usual visual notification.
>>>>
>>>> Assume that I've tweaked /etc/sudoers or otherwise made arrangements 
>>>> (such as porting Linux pam_ssh_agent_auth.so and configuring it) so that I 
>>>> don't need to enter my password for sudo.  And of course, the system won't 
>>>> let me unmount the drive if it's in use (not counting forced unmounts), so 
>>>> the script doesn't need to worry about that.
>>>>
>>>> I've never really worked with AppleScript, and have no idea how the 
>>>> arguments (like whether it's a mount or unmount, and what the mount point 
>>>> is) are passed, so some help would be great!
>>>>
>>>> I'd actually rather use ControlPlane than HardwareGrowler+Growl, but 
>>>> ControlPlane doesn't (AFAIK) have a mount/unmount "evidence" source, and 
>>>> neither HardwareGrowler nor ControlPlane seem to have a provision for 
>>>> noticing the connection/disconnection of Thunderbolt devices.
>>>>
>>>> thanks...
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Growl Discuss" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at https://groups.google.com/group/growldiscuss.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> -- 
>>> Chris Forsythe
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Growl Discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/growldiscuss.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>>
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Growl Discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/growldiscuss.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> -- 
>> Chris Forsythe
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Growl Discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/growldiscuss.
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>
>>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Growl Discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> To post to this group, send email to [email protected] 
> <javascript:>.
> Visit this group at https://groups.google.com/group/growldiscuss.
> For more options, visit https://groups.google.com/d/optout.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Growl Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/growldiscuss.
For more options, visit https://groups.google.com/d/optout.

Reply via email to