iCalTV möjliggör påminnelser om dina favoritprogram på tv genom iCal. Påminnelser kan ske med vanliga iCal-påminnelserutor eller genom AppleScript. Det senare medger att påminnelser kan ske t.ex. genom Growl och OS X:s talsyntes.
Programmet är avsett för svensk kanaldata från http://tv.swedb.se/ (nedan ibland kallat "servern") och Mac OS X. Det är fritt att anpassa koden, men respektera villkoren på http://tv.swedb.se/content/view/44/60/ och http://tv.swedb.se/content/view/55/48/, och ange mig som ursprunglig upphovsman vid spridning.
Default-påminnelseljudet kommer ursprungligen från ljudpaketet Wurt Simplicity till Miranda IM och är gjort av FloppyCopy.
Jag vet tyvärr inte den ursprungliga källan till TV-bilden som jag utgått från i iCalTV-ikonen.
Den här informationsfilen ska ligga jämte programmet iCalTV
. Lägg programmet i /Applications
och kör det.
Programmet kommer leda dig genom installationen. När du behöver göra något kommer programmet säga till genom att visa en informationsruta.
Programmet innehåller ett antal script som efter installationen kommer köras automatiskt var femtonde minut, och då vid behov uppdatera tablåer och en kalender med påminnelser.
Om du någon gång efter installationen vill flytta iCalTV
måste du köra installationsprocessen igen på den nya platsen, annars kommer de automatiska uppdateringarna sluta fungera. Installationsprocessen skriver aldrig över filer (dina kanaler och regeluppsättningar), utan skapar bara nya filer om de saknas.
Programfilen iCalTV
måste finnas kvar för att de automatiska uppdateringarna ska fungera, men du bör alltså bara köra programmet manuellt när du vill installera det för första gången, eller när du flyttat det.
Eftersom iCalTV är i början av sin utveckling, kommer katalogstrukturer och filformat sannolikt ändras något från en version till en annan.
Installationsförfarandet ser till att inte skriva över filer om de redan finns – dock konverteras inte existerande filer till nya format. Anpassa existerande filer enligt det format som beskrivs i den här filen, eller titta på mall-filerna i Contents/Resources/templates
inuti programpaketet för exempel.
Om du redan har en kalender som heter "iCalTV" och som prenumererar på en kalenderfil, måste du ta bort denna innan du kan använda iCalTV.
Ta bort programfilen iCalTV
.
Ta bort ~/Library/Xmltv
. Om du använder Xmltv-widgeten bör du spara underkatalogerna widgetexports
, schedules
och logos
och deras innehåll.
Ta bort de schemalagda uppgifterna. Detta kan åstadkommas genom att skriva följande i terminalen: crontab -l | ruby -e 'puts STDIN.readlines.reject {|line| line.include?("iCalTV")}.join("\n")' | crontab -
Filen ~/Library/Xmltv/favorites/channels.xml
innehåller de kanaler du är intresserad av.
Då tablåerna som laddas ner är teckenkodade i Latin-1 (ISO-8859-1) bör samma gälla den här filen. I annat fall kan det bli problem i visning eller regelmatchning om ett kanalnamn innehåller å, ä eller ö.
Från början innehåller filen samtliga kanaler som erbjuds på servern. Det är lämpligt att ta bort de kanaler man inte är intresserad av. Detta minskar belastningen på servern och på den egna datorn, och minskar risken att reglerna plockar in något favoritprogram du ändå inte kan se.
De kanal-ID som står i filen bör inte ändras, men kanalnamnen (som visas i påminnelser) kan ändras efter egen smak. Se då till att använda samma kanalnamn i dina regler.
Filen ~/Library/Xmltv/favorites/rulesets.xml
innehåller regeluppsättningar för dina favoritprogram.
Då tablåerna som laddas ner är teckenkodade i Latin-1 (ISO-8859-1) bör samma gälla den här filen. I annat fall kan det bli problem i regelmatchningen om någon regel innehåller å, ä eller ö.
Rot-taggen är <favorites>
. Den innehåller ett antal regeluppsättningar, taggen <ruleset>
.
Den kan också innehålla standardvärden för påminnelser, i taggen <alerts>
. Om <alerts>
anges inuti en <ruleset>
gäller de värdena i stället för standardvärdena, för regeluppsättningen i fråga.
Taggen <alerts>
innehåller noll eller flera påminnelser.
Om taggen inte innehåller några påminnelser, kommer programmet fortfarande finnas i iCal, men inga påminnelser kommer ske.
Påminnelser kan antingen vara vanliga iCal-påminnelserutor med ljud, eller AppleScript som körs.
En vanlig iCal-påminnelseruta erhålles med taggen <alarm>
. Attributet before
anger hur många minuter före programstart som påminnelsen ska ske. Taggens innehåll anger det ljud som då ska spelas.
Ljudet kan anges med enbart filnamn (t.ex. det medföljande alarm.wav
) om de ligger i ~/Library/Xmltv/ical/sounds
; med en absolut sökväg som ~/Sounds/pling.wav
om de ligger någon annanstans; eller som ett av OS X:s systemljud, t.ex. Basso
(de ligger i /System/Library/Sounds
och är: Basso
, Blow
, Bottle
, Frog
, Funk
, Glass
, Hero
, Morse
, Ping
, Pop
, Purr
, Sosumi
, Submarine
, Tink
).
Exempel:
<alerts>
<alarm before="30">alarm.wav</alarm>
<alarm before="15">~/Sounds/pling.wav</alarm>
<alarm before="5">Frog</alarm>
</alerts>
Taggen <script>
kan användas för att köra AppleScript en tid innan ett program börjar.
Med dessa kan man göra i stort sett vad som helst. Det följer med tre exempelscript som snart beskrivs.
Taggarna är snarlika <alarm>
-taggarna, men har i stället för ljud namn på script-mallar som värden. Mallarna ska ligga i ~/Library/Xmltv/ical/scripts_templates
.
Exempel:
<alerts>
<script before="5">Speak</script>
<script before="5">GrowlImportant</script>
<script before="1">Speak</script>
<script before="1">GrowlOrdinary</script>
</alerts>
Script-mallarna är vanliga AppleScript med den enda skillnaden att de kan innehålla platshållare. Dessa byts ut mot det aktuella programmets och påminnelsens egenskaper.
Dessa platshållare finns i dagsläget:
Platshållare | Innebörd | Exempel |
---|---|---|
(*NAME*) | Programmets namn | Aktuellt |
(*CHANNEL*) | Kanalens namn | Kanal 5 |
(*CHANNEL_LOGO*) | POSIX-sökväg till logo-bildfilen för kanalen | /Users/foo/Library/Xmltv/logos/tv4.se.png |
(*DESC*) | Programmets beskrivning | Dokumentär från 2006. |
(*START_TIME*) | Klockslaget då programmet börjar | 12:00 |
(*END_TIME*) | Klockslaget då programmet slutar | 23:45 |
(*END_TIMESTAMP*) | UNIX-tiden då programmet slutar | 1157300629 |
(*BEFORE*) | Antal minuter före programstart som påminnelsen sker | 5 |
(*RULE_SUMMARY*) | Hakparentesat namn på den regel som givit upphov till påminnelsen, om regeln inte rör programnamnet (se vidare nedan) | [Angelina Jolie] |
För exempel, se de medföljande mallarna i angiven katalog. Vad scripten gör beskrivs härnäst.
Mallen Speak
använder talsyntesen i OS X för att säga programnamnet, kanalnamnet samt hur lång tid det är kvar till programstart.
Då talsyntesen är på engelska kan det förstås låta knäppt ibland med svenska programnamn.
Om programmet Play Sound är installerat spelas det medföljande standardljudet ~/Library/Xmltv/ical/sounds/alarm.wav
före talet. Annars spelas två system-pip.
Samtliga medföljande script är kodade så att de inte körs om TV-programmet redan tagit slut, för att undvika inaktuella påminnelser om datorn varit av eller i sovläge.
Dessa script fungerar bara med programmet Growl installerat. Programmet syftar till att visa väldigt tjusiga rutor.
Scripten visar en Growl-ruta med programnamn, starttid, hur lång tid det är kvar, programmets beskrivning samt visar kanalens ikon.
De två scripten GrowlOrdinary
och GrowlImportant
gör nästan exakt samma sak. De registrerar sig dock hos Growl som varsin notifieringstyp. Detta innebär att man kan ge dem olika inställningar. På min egen dator har jag ställt in GrowlImportant
på att vara "sticky" (inte döljas automatiskt efter några sekunder) och GrowlOrdinary
på att inte vara det.
Varje regeluppsättning består av ett antal regler. När alla regler – eller någon enda regel, beroende på regelgruppens inställningar – i en uppsättning stämmer överens med ett program, anses programmet vara en favorit.
Varje regeluppsättning kan ha ett namn, som värde till attributet name
. Om inget namn anges så används värdet i den första regeln som namn för regeluppsättningen. Den aktuella regeluppsättningens namn står med i en påminnelse om ingen av reglerna har någon koppling till programnamnet, t.ex. om man vill påminnas om alla filmer med en viss skådespelare. På så vis behöver man inte undra varför man får en viss påminnelse.
Attributet match
kan ha värdet "all" eller "any". Om inget annat anges används "all". Detta innebär att alla regler måste besannas för att ett program ska vara en favorit. "any" innebär att det räcker att någon regel besannas.
Varje regeluppsättning kan innehålla en <alerts>
-tagg. Denna gäller då i stället för standardvärdena för påminnelser med avseende på den aktuella regeluppsättningen.
Exempel:
<ruleset name="Väder eller sport" match="any">
<alerts>
…
</alerts>
…
Varje regel har ett s.k. attribut, ett villkor och ett värde. Regeln är sann om villkoret stämmer mellan attributet och värdet.
Exempel:
<rule attribute="name" condition="is">Dr Phil</rule>
Det finns textattribut, tidsattribut och listattribut.
Textattribut är:
Attribut | Innebörd |
---|---|
name | Programmets namn |
channel | Kanalens namn |
channel_id | Kanalens ID |
desc | Programmets beskrivning |
Listattribut är:
Attribut | Innebörd |
---|---|
actor | Skådespelares namn |
category | Programkategori |
Villkor för dessa är:
Villkor | Innebörd |
---|---|
is | Exakt likadana |
contains | Attributet måste innehålla värdet |
begins-with | Attributet måste börja med värdet |
ends-with | Attributet måste sluta med värdet |
Skillnad görs på stor och liten bokstav. Du kan inte skriva ENDS-witH
, och en regel om att programnamnet ska vara allsång på skansen
kommer heller inte stämma för programmet Allsång på Skansen
.
Samma villkor används för textattribut som för listattribut. Skillnaden är att eftersom ett program kan ha flera skådespelare och tillhöra flera kategorier, så besannas ett villkor för ett listattribut så länge det är sant för något i listan. Ett villkor som
<rule attribute="actor" condition="is">Angelina Jolie</rule>är alltså sant så länge det medverkar minst en skådespelare som motsvarar regeln. Alla skådespelare behöver alltså inte heta Angelina Jolie för att besanna denna regel.
Tidsattribut är:
Attribut | Innebörd |
---|---|
starts | När programmet börjar |
stops | När programmet slutar |
plays | När programmet pågår |
Villkor för dessa är:
Villkor | Innebörd |
---|---|
at | Exakt en viss tid |
within | Inom ett visst tidsintervall, inklusive intervallets ändpunkter |
Tidsreglers värde för villkoret at
ska vara en tidsangivelse mellan 00:00
och 23:59
. Villkoret at
kan bara användas med attributen starts
och stops
, inte med plays
. Exempel:
<rule attribute="starts" condition="at">15:00</rule>
<rule attribute="stops" condition="at">00:34</rule>
Villkoret within
bör användas ihop med ett intervallvärde som 00:00-23:59
. Villkoret besannas om attributet ligger inom detta intervall, inklusive intervallets ändpunkter.
Attributet plays
omfattar både start- och sluttid. Ett program som går mellan 23:45 och 00:30 besannar samtliga dessa regler:
<rule attribute="starts" condition="within">23:40-23:50</rule>
<rule attribute="stops" condition="within">00:20-00:30</rule>
<rule attribute="plays" condition="within">23:40-00:35</rule>
Men denna regel blir inte sann eftersom sluttiden inte ligger i intervallet:
<rule attribute="plays" condition="within">23:40-23:50</rule>
Alla typer av villkor kan föregås av not-
för att göras till sin motsats. Exempel:
<rule attribute="name" condition="not-begins-with">Jan Guillou presenterar</rule>
/tmp
, vilket kunde krocka i fleranvändarsystem.