(*Timer Script 0.9
Ajastin, joka laukeaa annetuna hetkenä ja halutuin välein.
2000-10-21 Tuomas Rosberg.
Public Domain.
Tallenna Skriptieditorilla ohjelmana, rastit kohtiin älä näytä aloitusnäyttöä ja pysy avoinna.
Valitse ohjelma Finderissa, sitten Arkisto-valikon Näytä tietoja -> Muisti
ja lisää haluttu koko 250 kt.
*)
property fileRef : "a string"
property haltScript : false
property prefsExist : false
property aDate : ""
property anInterval : 0
on run
set fileRef to (path to preferences folder as text) & "Timer Script Lib" as text
set haltScript to false
-- The preferences file:
try
alias fileRef -- If this doesn't make a working file reference, an error occurs.
on error -- A new preferences script file is needed.
set d to current date
set aString to "script
property targetDate : \"\"
property theInterval : 0
end script"
set anObject to run script aString
set targetDate of anObject to d
store script anObject in file fileRef with replacing
set prefsExist to false
end try
-- Get and set the preferences:
if prefsExist is true then
set d to current date
my loadLib()
if aDate <= d then
if aDate + (anInterval * minutes) <= d then -- The launch time is way too old.
set prefsExist to false
run me -- Back to the square one.
end if
end if
else if prefsExist is false then
set aDate to askDate()
set d to current date
if aDate is "" then
my killProperties()
else if aDate <= d then
activate
display dialog ¬
"Valittu ajankohta " & return & aDate & return & "on jo ohi." buttons "OK" default button 1 with icon note
my killProperties()
else if aDate > d then
set anInterval to askInterval()
if anInterval is "" then
set anInterval to 0
my killProperties()
else
set x to load script alias fileRef
set targetDate of x to aDate
set theInterval of x to anInterval
store script x in file fileRef with replacing
set prefsExist to true -- On the next run the preferences won't be asked.
end if
end if
end if
end run
on idle
if haltScript is false then
set workingApp to getFrontmost() -- Get the application in use.
-- Read the preferences on every round:
my loadLib()
-- Evaluate the date:
if aDate > (current date) then
-- Continue idle for another 4 secs:
return 4
else if aDate <= (current date) then
if aDate < ((current date) + (1 * minutes)) then -- The launch time is not too much over.
my doThings()
-- Now they are done and:
if anInterval > 0 then
activate
display dialog ¬
"Ajastin laukesi. Haluatko laittaa ajastimen pois päältä? " buttons {"Kyllä", "En"} default button "En" with icon note
set theResult to result
-- Back to the app in use:
my setFrontmost(workingApp)
if button returned in theResult is "Kyllä" then
my killProperties()
else
if addInterval() is false then
activate
display dialog ¬
"Virhe asetustiedoston \"" & return & fileRef & return & "\" kanssa. Tarkista tiedosto." buttons "Lopeta" default button 1
my setFrontmost(workingApp)
my killProperties()
end if
end if
else if anInterval = 0 then
-- Back to the app in use:
my setFrontmost(workingApp)
my killProperties()
end if
return 4
else -- The launch time is way too old.
activate
display dialog ¬
"Ajatimen laukeamisaika " & return & aDate & return & "on jo ohi." buttons "OK" default button 1 with icon note
my setFrontmost(workingApp)
my killProperties()
end if
end if
else -- HaltScript is true.
quit me
end if
end idle
on loadLib()
--Read the preferences:
try
set x to load script alias fileRef
set aDate to targetDate of x
set anInterval to theInterval of x
on error
set haltScript to true
end try
end loadLib
on getFrontmost()
tell application "Finder"
set l to processes
repeat with i in l
if frontmost of i is true then
exit repeat
end if
end repeat
end tell
return i
end getFrontmost
on setFrontmost(workingApp)
tell application "Finder"
set frontmost of workingApp to true
end tell
end setFrontmost
on killProperties()
set prefsExist to false
set haltScript to true
end killProperties
on addInterval()
set temp to aDate + (anInterval * minutes)
try
set x to load script alias fileRef
set targetDate of x to temp
store script x in file fileRef with replacing
return true
on error
return false
end try
end addInterval
on askDate()
activate
repeat
display dialog ¬
"Monenko kokonaisen päivän kuluttua ajastimen pitää laueta? " default answer "0" buttons {"Lopeta", "OK"} default button 2
set theResult to result
try
set theDays to text returned in theResult
set theDays to theDays as integer
exit repeat
on error
end try
end repeat
set theButton to button returned in theResult
if theButton is "Lopeta" then
return ""
-- goto 1000 and die :-)
else -- theButton is "OK"
repeat
display dialog ¬
"Mihin kellonaikaan? Anna aika esimerkin mukaisessa muodossa. " default answer "07:00" buttons "OK" default button 1
set theTime to text returned of result
try
set tid to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"
set shortArm to first text item in theTime as integer
set longArm to second text item in theTime as integer
set timerTime to shortArm * 60 + longArm -- as minutes
set AppleScript's text item delimiters to tid
exit repeat
on error
end try
end repeat
set timerDays to theDays * 60 * 24 -- As minutes.
set timerDays to round timerDays -- The minutes as integer.
set timerTotal to timerDays + timerTime
set d to current date
set d to d - (time in d) -- Today at 00:00:00.
set target to d + (timerTotal * minutes)
return target
end if
end askDate
on askInterval()
activate
display dialog ¬
"Ajastimen laukeamisaika on " & return & aDate & return & "Miten ajastimen pitää laueta? " buttons {"Kerran", "Toistuvasti"} default button 2 with icon -16396
set theButton to button returned of result
if theButton is "Kerran" then
set gap to 0
else if theButton is "Toistuvasti" then
display dialog ¬
"Kuinka monen tunnin välein? " default answer "0,01" buttons "OK" default button 1
set gap to text returned of result
try
set gap to gap as real
set gap to round (gap * 60) -- As minutes
on error
set gap to ""
end try
end if
return gap
end askInterval
on doThings()
-- Write here whatever the timer has to do, for example:
activate
beep 1
display dialog ¬
"Huomaa ystävällisesti ajastimen laukeamisaika" & return & return & aDate & return buttons "OK" default button 1
end doThings