• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Apple events overridden.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Apple events overridden.


  • Subject: Apple events overridden.
  • From: ILJA SHEBALIN <email@hidden>
  • Date: Sat, 12 Aug 2017 17:54:20 +0300

Hi,
I faced an issue of iTunes (or QuickTime Player) being unable to respond to
events sent by my script long ago, even posted here, but now I seem to figure
out the true reason behind such an odd behavior. The script is designed to wake
me up at the time I tell it by interacting through dialogs by playing an iTunes
tune or a one opened and played by QTP and is saved as a plugin activated upon
invoking from the scripts menu icon. The strangest part is that  if I launch
iTunes or QTP after I'm done with firing up the script (which, of course,
always happens before the wake-up time) then the script wouldn't work but would
otherwise. This is confirmed by thorough experimenting. Do this:
Save the script to your user scripts folder and make sure the scripts menu icon
is checked to display on the menu bar.
Run the script from there, set the time, date and song. For the purposes of
testing set the closest time to the one of the actual testing.
After you're done launch iTunes and quit it.
When the time you set in steps ##1 & 2 arrives nothing happens. If you won't do
step #3 it will.


 My question would be: is there a way to work around this obvious
misbehavior/bug?


The script is (please consider going through the information put in my
comments):

property start_date : ""
property end_date : ""
property AlarmDate : ""
on MakeUnixDate(AlarmDate) --assembles the date suitable for shell commands.
NB. The presence of this particular handler  was determined by my localization.
US users probably won't need it and, thus, can safely disregard. For those only
do shell script part is essential and has to remain for which placing it inside
the handler is not necessary.  All credits for pointing me out to a better
implementation of OS X-to-Unix dates conversion found inside this handler go to
Yvan Koenig.
        set locale_Date to date AlarmDate
set timeString to time string of locale_Date
set Unix_day to text -2 thru -1 of ((100 + (day of locale_Date)) as string)
set Unix_month to text -2 thru -1 of ((100 + (month of locale_Date)) as string)
set Unix_year to text -2 thru -1 of (year of locale_Date as string)
set ShortUnix_date to Unix_day & Unix_month & Unix_year
set FullUnixDate to Unix_date & timeString

        do shell script "sudo pmset schedule wake " & quote & FullUnixDate &
quote password "" with administrator privileges  --IMPORTANT! Type in your user
password instead of the empty quotes before running the script

end MakeUnixDate

repeat

        display dialog "Enter event start date" default answer start_date
buttons {"Cancel", "OK"} default button "OK"
        set EnteredStartTime to text returned of result

        try
                set start_time to date EnteredStartTime

                exit repeat
        on error
                display dialog "Invalid date. Try again."
                try
                on error number -128
                        return
                end try
        end try
end repeat


repeat
        set EndTimePrompt to display dialog "Enter event end date" default
answer end_date buttons {"Cancel", "OK"} default button "OK"
        set EnteredEndTime to text returned of EndTimePrompt

        try
                set end_time to date EnteredEndTime
                if end_time ≥ start_time then
                        exit repeat
                else

                        display dialog "Invalid data: end date can't go before
start date." & return & return & "Error: end date " & quote & date string of
end_time & ", " & time string of end_time & quote & space & "entered is before
start date " & quote & date string of start_time & ", " & time string of
start_time & quote
                end if
        on error
                display dialog "Invalid date. Try again."
                try
                on error number -128
                        return
                end try
        end try
end repeat

display dialog "Start date: " & start_time & return & "End date: " & end_time

set EventSummaryPrompt to display dialog "Enter brief description" default
answer ""
set EventSummaryResponse to text returned of EventSummaryPrompt

set EventLocationPrompt to display dialog "Enter location" default answer ""
set EventLocationResponse to text returned of EventLocationPrompt

set EventNotesPrompt to display dialog "Enter miscellaneous information"
default answer ""
set EventNotesResponse to text returned of EventNotesPrompt

set EventAlarmPrompt to display dialog "Enter reminder time, min before the
start date " & (time string of start_time) default answer ""
set EventAlarmResponse to (text returned of EventAlarmPrompt) as real
set AlarmTriggerTime to start_time - EventAlarmResponse * minutes


tell application "iCal"
        run
        set AllCalendars to get name of every calendar
        set AppleScript's text item delimiters to return
        set CalendarColumn to AllCalendars as text
        delay 3
        set CalendarListPrompt to display dialog "Your calendars:" & return &
return & CalendarColumn default answer ""
        set CalendarListResponse to text returned of CalendarListPrompt
        set NewCalendarEvent to make new event with properties {start
date:start_time, end date:end_time, summary:EventSummaryResponse,
location:EventLocationResponse, description:EventNotesResponse,
status:confirmed} at end of calendar CalendarListResponse

        set AlarmNotificationPrompt to display dialog "Set a reminder?" buttons
{"No reminder", "Set"} default button "Set"
        if button returned of AlarmNotificationPrompt is "Set" then
                display dialog "Enter name of the reminder" default answer ""
                set ToDoSummary to text returned of result
                set NewTodo to make new todo with properties {priority:high
priority, summary:ToDoSummary} at the end of calendar named CalendarListResponse
                set SoundAlarmPrompt to display dialog "Set a sound alarm for
the reminder?" buttons {"No sound alarm", "Set"} default button "Set"

                if button returned of SoundAlarmPrompt is "Set" then
                        display dialog "Enter a date for the reminder" default
answer ""
                        set AlarmDate to text returned of result
                        display dialog "Choose sound for the sound alarm" &
return & return & "Basso, Frog, Hero, Pop, Submarine, Blow, Funk, Morse, Purr,
Tink, Bottle, Glass, Ping, Sosumi" default answer ""
                        set SoundAlarmName to text returned of result
                        set SoundAlarm to make new sound alarm with properties
{trigger date:date AlarmDate, sound name:SoundAlarmName} at the end of NewTodo
                        my MakeUnixDate(AlarmDate)
                else

                        display dialog "Enter date for the silent reminder" &
return & return default answer ""
                        set AlarmDate to text returned of result
                        set DisplayAlarm to make new display alarm with
properties {trigger date:date AlarmDate} at the end of NewTodo

                        my MakeUnixDate(AlarmDate)
                end if

        end if
        display dialog "Done. iCal quits" buttons {"OK"} default button "OK"
giving up after 2
        quit

end tell

MakeUnixDate(AlarmTriggerTime as text)

===============================SKIP UNTIL HERE IF YOU'RE ON MOUNTAIN LION OR
HIGHER=============================================


repeat

        display dialog "Enter wake-up date" default answer start_date buttons
{"Cancel", "OK"} default button "OK"
        set EnteredStartTime to text returned of result

        try
                set AlarmTriggerTime to date EnteredStartTime

                exit repeat
        on error
                display dialog "Invalid date. Try again."
                try
                on error number -128
                        return
                end try
        end try
end repeat

set locale_Date to AlarmTriggerTime
set timeString to time string of locale_Date
set Unix_day to text -2 thru -1 of ((100 + (day of locale_Date)) as string)
set Unix_month to text -2 thru -1 of ((100 + (month of locale_Date)) as string)
set Unix_year to text -2 thru -1 of (year of locale_Date as string)
set ShortUnix_date to Unix_day & Unix_month & Unix_year
set FullUnixDate to Unix_date & timeString

do shell script "sudo pmset schedule wake " & quote & FullUnixDate & quote
password "" with administrator privileges  --IMPORTANT! Type in your user
password in place of the empty quotes before running the script


tell application "iTunes"
        launch
        ignoring case, white space, diacriticals and punctuation
                set playlistList to name of every playlist of source "Library"
--IMPORTANT! The name of this source may be different in your localization

                set the_body to items 2 thru -1 of playlistList --formatting
the list excluding the source's name
                set AppleScript's text item delimiters to return
                set formatted_body to the_body as text
                set theHeader to item 1 of playlistList & return & return
--formatting the list including the source's name which will now be its header

                display dialog theHeader & formatted_body buttons {"Cancel",
"Continue"} default button "Continue" default answer "" --all playlists of the
uppermost level are displayed

                set playlistName to text returned of result --enter the
playlist of your choice

                set targetPlaylistName to name of playlist named playlistName
--the entered value is the name of the playlist you chose and it becomes a
value of the variable.

                set targetTrackList to name of every track of playlist named
targetPlaylistName --all tracks of the chosed playlist
                set the_body to items of targetTrackList --formatting the list
containing the tracks
                set AppleScript's text item delimiters to return
                set formatted_body to the_body as text
        end ignoring
        set theHeader to "Playlist " & targetPlaylistName & return & return
        display dialog theHeader & formatted_body buttons {"Cancel",
"Continue"} default button "Continue" default answer "" --list of all tracks pf
the chosen playlist, formatted

        set TrackName to text returned of result --enter the track of your
choice
        set targetTrackName to name of track named TrackName --the entered
value is the name of the track you chose and it becomes a value of the variable.
        set TrackToPlay to track named targetTrackName --этот трек будет
воспроизведён и становится переменной, передаваемой программе "iTunes"



        set VolumePrompt to display dialog "Set volume for the iTunes track" &
return & return & "Any integer between 0 (min) and 100 (max)" default answer ""
        set EnteredVolume to text returned of VolumePrompt --set volume for the
track

        display dialog "Done. iTunes quits" buttons {"OK"} default button "OK"
giving up after 2
        quit
end tell





repeat until (current date) = AlarmTriggerTime
        delay 1
end repeat


tell application "iTunes"
        launch
        set visible of browser window 1 to false
        set sound volume to EnteredVolume
        if TrackToPlay exists then
                set track_time to duration of TrackToPlay
                play TrackToPlay
                delay (track_time)
        end if
        set sound volume to 100
        quit it
end tell

P.S. Already having composed this message I realized that for many of you the
iCal part might be irrelevant since it's been replaced by Contacts and
Reminders in Mountain Lion and onwards. However, since the most significant
part of the script may not necessarily involve creating a Calendar event and
the countdown to iTunes launch is of greater importance, those of you, who're
on newer than Lion version of OS are suggested to skip the part up to the
indicated part (separated from the iCal part with the hatch) and copy paste the
rest of the script.


Sincerely Yours,
Ilya Shebalin
E-mail: email@hidden,
           email@hidden



 _______________________________________________
Do not post admin requests to the list. They will be ignored.
AppleScript-Users mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
Archives: http://lists.apple.com/archives/applescript-users

This email sent to email@hidden

  • Prev by Date: Re: Absolutely perplexed!!
  • Next by Date: What is Best Method To Determine Duplicate Items in a Large List?
  • Previous by thread: Re: Absolutely perplexed!!
  • Next by thread: What is Best Method To Determine Duplicate Items in a Large List?
  • Index(es):
    • Date
    • Thread