Innehåll

Presentation

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.

Installation

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.

Uppgradering

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.

Avinstallation

  1. Ta bort programfilen iCalTV.

  2. Ta bort ~/Library/Xmltv. Om du använder Xmltv-widgeten bör du spara underkatalogerna widgetexports, schedules och logos och deras innehåll.

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

favorites/channels.xml

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.

favorites/rulesets.xml

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.

Påminnelser

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.

Vanliga påminnelser

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>

AppleScript

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.

Speak

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.

GrowlOrdinary, GrowlImportant

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.

Regeluppsättningar

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>

Regler

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>

Historik

0.7 – 2007-01-31
Buggfix: åtgärdat problem där uppdateringar i slutet av en månad längre än den efterkommande ledde till att program schemalagdes en månad för sent…
0.6 – 2007-01-02
Adress till XMLTV-datan uppdaterad.
Buggfix: sparar inte längre tempfiler i /tmp, vilket kunde krocka i fleranvändarsystem.
0.5 – 2006-09-03
Multipla alarm (även noll larm).
Script som larm.
Kräver ej längre lokal webbserver.
Buggfix: iCal kunde inte uppdatera när det inte var öppet.
0.4 – 2006-08-06
Enklare installationsprocess.
Fin ikon!
All uppdatering av data sker schemalagt.
Buggfix: rättat kontrollen av om "SCRIPT_DIR" är satt redan.
0.3 – 2006-07-27
Löste ett problem som inneburit att scripten behövde köras från sin egen katalog (och därmed inte t.ex. av cron).
Datumregler har nu intervall och färre villkor.
0.2 – 2006-07-26
Första publika versionen.
0.1 – 2006-07-25
Privat utvecklingsversion.