applescript + caffeine og IMklienter

applescript + caffeine og IMklienter

Innleggav svano » fre 01.05.2009 13:47

Hei,

skriver nå mine første applescript og har fått noen problemer. Det jeg ønsket meg var et script som lar meg sette status på alle mine IMklienter samtidig (via quicksilver), samt et script som lar meg skru av/på caffeine samtidig som IMklientene mine settes til henholdsvis available/away. NÅ har jeg fått alt til å virke hver for seg så jeg har to script som setter available/away og et som skifter caffeine mellom på/av avhengig av hva status for caffeine er.

Problemet oppstår når jeg setter alt sammen. Scriptet mitt klarer å aktivere/deaktivere caffeine, men får ikke med seg IMklientene.

Kjører jeg fra script editor får jeg feilmeldingen: Caffeine got an error: can't continue appIsRunning.

Nå er jeg litt fersk med dette, men for meg virker det som om problemet er at den koden som kommer innnenfor tell sendes til Caffeine som ikke forstår noe av if appIsRunning(.... ? Noen som har forslag om hvordan dette kan gjøres?

Kort oppsummert hva koden skal gjøre:
-slå på caffeine og sette alle IMklienter som kjører til away, eller
-slå av caffeine og sette alle IMklienter som kjører til available, og
-velge mellom disse ut fra Caffeines status (av/på)

Takke for alle innspill og eventuelle forbedringer av scriptet ellers også.

Kode: Merk alt
if appIsRunning("Caffeine") then
   tell application "Caffeine"
      if active then
         turn off
         
         if appIsRunning("Skype") then
            tell application "Skype"
               send command "SET USERSTATUS away" script name "Kaffe"
            end tell
         end if
         
         if appIsRunning("Adium") then
            tell application "Adium"
               go away
            end tell
         end if
         
         if appIsRunning("iChat") then
            tell application "iChat"
               set status to away
            end tell
         end if
      else
         turn on
         if appIsRunning("Skype") then
            tell application "Skype"
               send command "SET USERSTATUS online" script name "Kaffe"
            end tell
         end if
         
         if appIsRunning("Adium") then
            tell application "Adium"
               go available
            end tell
         end if
         
         if appIsRunning("iChat") then
            tell application "iChat"
               set status to available
            end tell
         end if
      end if
   end tell
end if

on appIsRunning(appName)
   tell application "System Events" to (name of processes) contains appName
end appIsRunning

Edit:
Har jeg først lagt ut noe her, bør jeg vel også oppdatere det ;)

Endret scriptet mitt og har nå et script som:
-setter caffeine på/av, samtidig som
-adium og skype settes til away(kaffe på)/available(kaffe av) med mindre de har status offline
-scriptet setter adium og skype til available når det slår av caffeine, selv om man var away da caffeine ble aktivert

For øyeblikket bruker scriptet skype sin status til å finne ut om IM-kliente er offline eller ikke så man ha skype på. Jeg ønsker at scriptet skal sjekke adium og skype hver for seg selv og ikke endre status på den/de som er offline. Selv bruker jeg et script som setter satus for adium og skype samtidig for å sette min IM-status, men om man begynner å sette satus for adium og skype manuelt (og til ulike tilstander), vil dette scriptet (kunne) få hikke slik det er nå.

Om noen har forslag om hvordan jeg kan få ut Adium sin status med et applescript så taes det i mot med takk.

Scriptet bruker bare de to statusene available/online og away. Merk: dersom man er away når caffeine slåes på, blir man available når man slår av caffeine med scriptet. Tror ikke man kan lagre variabler mellom hver gang man kjører et script uten å involvere mer avanserte ting (en database?), så scriptet husker ikke den statusen man hadde da man aktiverte caffeine.

Ichatbiten i koden er ikke oppdatert (jeg bruker egentlig ikke ichat uansett) og setter ichat til away, men ikke tilbake til online.

Dette er mitt første script og siden jeg nok er mer hacker enn hardbarket programmerer, kan det sikkert utføres mer elegant. Var da morsomt uansett :)


Scriptet nå:

Kode: Merk alt
if appIsRunning("Caffeine") then
   tell application "Caffeine"
      if active then
         turn off
         set kaffeOn to "false" (*kaffen var på*)
      else
         turn on (*for 1800*)
         set kaffeOn to "true" (*kaffen er på*)
      end if
   end tell
end if

if appIsRunning("Skype") then
   tell application "Skype"
      set status to send command "get userstatus" script name "Kaffe"
      if status is not "USERSTATUS OFFLINE" then
         if status is not "USERSTATUS AWAY" and kaffeOn then
            send command "SET USERSTATUS away" script name "Kaffe"
         else if status is not "USERSTATUS ONLINE" and kaffeOn is not "true" then
            send command "SET USERSTATUS online" script name "Kaffe"
         end if
      end if
   end tell
end if

(*
tell application "Script Editor"
   display dialog kaffeOn
end tell
*)

if appIsRunning("Adium") and status is not "USERSTATUS OFFLINE" then
   tell application "Adium"
      if kaffeOn is "true" then
         go away
      else
         go available
      end if
   end tell
end if

if appIsRunning("iChat") then
   tell application "iChat"
      set status to away
   end tell
end if


on appIsRunning(appName)
   tell application "System Events" to (name of processes) contains appName
end appIsRunning


Og hvorfor dette scriptet? Bruker bare caffeine når jeg ser film (i flashspillere) og kjekt at man settes til away da syns jeg.

Brukerens avatar
medlem i 199 måneder
 

Returner til Andre



Hvem er i Forumene

Registrerte brukere: Google [Bot]



cron