Besoin d'aide avec un applescript / plist

1

Cela a été une expérience d'apprentissage pour moi. Tout se passe logiquement pour moi dans ce script / plist mais quelque chose ne va pas. Tout fonctionne, mais ensuite le script s'exécute toutes les minutes, ce qui devient agaçant puisque j'ouvre quelques programmes dans le script. Si vous tapez du code, cela devient frustrant car cela change la fenêtre active.

Notez que ceci est mon premier exercice de calligraphie et de pliste, n'hésitez donc pas à critiquer mon code. L’objectif du script est d’être programmé pour une exécution deux fois par jour (2 plists) - dans le but de changer le statut de ma messagerie instantanée en disponible, d’ouvrir certains programmes et d’autoriser un compte de messagerie. Dans la soirée, changez le statut, désactivez le courrier électronique.

Puisqu'il est en marche, je me suis dit que c'était simplement le plist, mais en le comparant à d'autres modèles pour accomplir une tâche qui se répète une fois par jour, le résultat est vérifié.

<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>

Donc, je suppose dans mon ignorance que quelque chose ne ferme pas avec succès une déclaration if ou que quelque chose est simplement fait de manière inefficace. Voici le script.

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

Je suppose que je pourrais faire une valeur absolue dire sinon si theHour = 8 et theMinute = 2 alors

mais je préférerais la situation actuelle car mon ordinateur est peut-être éteint quand il est programmé pour fonctionner, et je crois que cela fonctionnera au réveil, ou peut-être que c'était un effet secondaire utile de la répétition ... Je peux toujours changer le plist à exécuter au démarrage aussi bien.

Ryan Hollingsworth
la source

Réponses:

0

Je ne suis pas un Applescript expert, mais vous pouvez envisager de simplifier les scripts pour supprimer les aspects de synchronisation et utiliser le démon lancé pour la planification . Après tout, c’est pourquoi Apple l’a mis dans le système d’exploitation.

Bien que vous n'ayez manifestement pas peur de l'édition en ligne de commande et de plist, Lingon est une application qui fournit une interface graphique simple à lancé ( pour le reste d'entre nous ).

jaberg
la source
Ouais c'est quelque chose à considérer; Cependant, il faut alors deux scripts distincts au lieu d'un. (un par chaque pliste) Ce n'est pas grave, mais je ne pense pas que ce soit aussi élégant qu'une solution. J'utilise actuellement 2 fichiers plist créés avec Lingon 3 qui appellent le même fichier applescript exporté en tant qu'application.
Ryan Hollingsworth
simplifier semble fonctionner .. merci pour la suggestion :)
Ryan Hollingsworth
0

Je suis avec l'aspect plist de votre question, mais ce script fonctionnera et restera ouvert en arrière-plan vérifiant l'heure toutes les quatre minutes (personnalisable) pour voir si le jour ou l'heure nécessite un changement de statut. Est-ce que ça marche dans votre situation?

Tout lien expliquant votre utilisation des listes ci-dessus serait apprécié.

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
Paul Skinner
la source
Ce que j'ai remarqué, c'est que chaque fois que j'ai utilisé une référence de date (par exemple, si le jour est le samedi ou que l'heure est passée à 5), il est ignoré ou confond le script lorsqu'il est exécuté à partir d'un plist, mais fonctionne correctement s'il est exécuté manuellement. Quelqu'un avait suggéré de laisser le plist gérer tous les aspects temporels de l'action que j'essayais de faire, c'est donc essentiellement ce que j'ai fait. Aucun lien à partager autre que le code que j'ai déjà partagé. Mon objectif est de me débrancher du travail à un moment donné, car j’ai la mauvaise habitude de faire face aux "urgences" qui surviennent après les heures de travail.
Ryan Hollingsworth
Je pourrais essayer quelque chose comme vous l'avez suggéré et ne pas utiliser de plist du tout. Définissez un utilisateur et exécutez le script au démarrage.
Ryan Hollingsworth