¿Necesita ayuda con un Applescript / plist

1

Esta ha sido una experiencia de aprendizaje para mí. Todo me sale lógicamente en este script / plist pero algo no está bien. Todo se ejecuta, pero luego el script se ejecuta cada minuto, lo que se está volviendo molesto ya que estoy abriendo algunos programas en el script. Si escribir código se vuelve frustrante ya que cambia la ventana activa.

Tenga en cuenta que este es mi primer ejercicio de AppleScript y Plist, así que siéntase libre de criticar mi código. El objetivo de la secuencia de comandos debe programarse para ejecutarse dos veces al día (2 plists): en el momento en que cambie mi estado de IM a disponible, abra algunos programas y habilite una cuenta de correo electrónico. Por la noche, cambiar el estado, deshabilitar correo electrónico.

Ya que se está ejecutando, me di cuenta de que era simplemente el plist, pero comparándolo con otras plantillas para realizar una tarea que se repite una vez al día, me la reviso.

<plist version="1.0">
<dict>
          <key>Label</key>
          <string>RMWEBENABLE</string>
          <key>ProgramArguments</key>
          <array>
                    <string>/disablemail.app/Contents/MacOS/applet</string>
          </array>
          <key>StartCalendarInterval</key>
          <dict>
                    <key>Hour</key>
                    <integer>8</integer>
                    <key>Minute</key>
                    <integer>2</integer>
          </dict>
</dict>
</plist>

Por lo tanto, asumo que, en mi ignorancia, tengo algo que no está cerrando con éxito una declaración if o algo así solo se hace de manera ineficaz. Aquí está el guión.

set offTime to 17
set onTime to 9
set dayOfWeek to weekday of (current date)
set theHour to get the (hours of (current date))

if theHour ≥ offTime or dayOfWeek = Saturday or dayOfWeek = Sunday then

  #LEAVE ME ALONE!!!!

          tell application "Mail"
                    set enabled of account "mailbox" to false
          end tell
          tell application "Messages"
                    set status to invisible
          end tell
          tell application "Microsoft Lync"
  quit
          end tell

else if theHour ≥ onTime then

  #I'm available for contact
          tell application "Mail"
                    set enabled of account "mailbox" to true
          end tell

          tell application "Messages"
                    set status to available
          end tell

          tell application "Microsoft Lync"
  activate
          end tell

          tell application "Firefox"
  activate
          end tell

          tell application "Coda 2"
  activate
          end tell

          tell application "Google Chrome"
  activate
          end tell
end if

Supongo que podría hacer un valor absoluto decir de lo contrario, si theHour = 8 y theMinute = 2 entonces

pero prefiero la forma en que está ahora, ya que Mi computadora puede estar apagada cuando está programado para ejecutarse, y creo que esto funcionará en Wake, o tal vez fue un efecto secundario útil de la repetición ... puedo siempre cambia el plist para ejecutarse en el inicio también.

    
pregunta Ryan Hollingsworth 09.05.2013 - 16:23

2 respuestas

0

No soy un experto en Applescript , pero podría considerar simplificar los scripts para eliminar los aspectos de tiempo y usar el demonio launchd para la programación . Después de todo, es por eso que Apple lo puso en el sistema operativo.

Aunque obviamente no le teme a la línea de comandos ni a la edición de errores, Lingon es una aplicación que proporciona una interfaz GUI simple para launchd ( para el resto de nosotros ).

    
respondido por el jaberg 09.05.2013 - 18:59
0

Estoy con el aspecto detallado de su pregunta, pero esta secuencia de comandos se ejecutará y permanecerá abierta en segundo plano, verificando la hora cada cuatro minutos (personalizable) para ver si el día o la hora requieren un cambio de estado. ¿Eso funciona en tu situación?

Se agradecería cualquier enlace para explicar su uso de las listas anteriores.

property idleTImer : 10 --seconds
property toggleAvailable : false
on run
    set toggleAvailable to false
    say "launching change status script."

end run

on idle
    say "checking status."
    set offTime to 17
    set onTime to 9
    set dayOfWeek to weekday of (current date)
    set theHour to get the (hours of (current date))

    if theHour ≥ offTime or dayOfWeek = Saturday or dayOfWeek = Sunday then
        if toggleAvailable then
            say "LEAVE ME ALONE!!!!" --or whatever you want to do here
            set toggleAvailable to false
        else
            say "Status is already NOT available. Do nothing."
        end if
    else
        if theHour ≥ onTime then
            if not toggleAvailable then
                say "I'm available for contact" --or whatever you want to do here
                set toggleAvailable to true
            else
                say "Status is already available. Do nothing."
            end if
        end if
    end if
    return idleTImer --idle time is set to whatever positive value the idle handler returns.
end idle
    
respondido por el Paul Skinner 16.05.2013 - 16:52

Lea otras preguntas en las etiquetas