;Electronic Program guide ;by toralf ;requires AHK 1.0.44.09 ;www.autohotkey.com/forum/topic7839.html Gui1Title = EPG v1.3 /* 1st beta: initial release 2nd beta: - removed button to show program - improved/unified time presentation - improved sorting for start/end time 3rd beta - fixed: inability to change programs when selecting date - fixed: improved/unified time presentation for US - improved/unified date presentation 4th beta - add: filter for time periods - add: details in edit field (only Germany/France) 5th beta - fixed: US TV-Stations without Info - fixed: "&" in Station name - add: details for US stations (details don't work for Italy and UK) 6th beta - add: export program list to file 7th beat - add: replace special html characters in details into regular characters 8th beta - improved: replace more special html characters in details 9th beta - fixed memory problem - add: remove java script from details v1 - fixed HTML Special Char replacement for "&" - add: replace HTML Special Chars in program name v1.1 (thanks Titan and Micha) - Gui can be resized - A single click on program shows details - Only a single program can be selected in list - Gui remembers position - Gui remembers location - dates are shown in locale format v1.2 - Change of text labels (thx Titan) - add: statusbar, icon and tray menu - add: tip in statusbar - improved: details for Italy and UK v1.3 - Added detection of summer time period for europe (fixes bug reported by MisterX) Still Needed: - support for command line parameters */ #SingleInstance force ;create traybar menu IconFile = %A_WinDir%\system32\wmploc.dll IfExist, %IconFile% Menu, Tray, Icon, %IconFile%, 8 ;icon for taskbar and for proces in task manager Menu, Tray, NoStandard Menu, Tray, Tip, %Gui1Title% Menu, Tray, Add, Open, ActivateGui Menu, Tray, Default, Open Menu, Tray, Add, Exit, GuiClose Menu, Tray, Click, 1 RootURL = (LTrim Join| http://de.tv.yahoo.com http://fr.tv.yahoo.com http://it.tv.yahoo.com http://uk.tv.yahoo.com http://tv.yahoo.com http://tv.yahoo.com http://tv.yahoo.com http://tv.yahoo.com http://tv.yahoo.com http://tv.yahoo.com ) URLTVOverView = (LTrim Join| /grid?lineup=de&.intl=de&startdate=$DateInSeconds$&starthour=72000 /grid?lineup=fr&.intl=fr&startdate=$DateInSeconds$&starthour=72000 /grid?lineup=it&.intl=it&startdate=$DateInSeconds$&starthour=72000 /grid?lineup=uk&.intl=uk&startdate=$DateInSeconds$&starthour=72000 /grid/?prt=&lineup=us_Eastern&dur=3&.intl=us&startdate=$DateInSeconds$&starthour=15 /grid/?prt=&lineup=us_Central&dur=3&.intl=us&startdate=$DateInSeconds$&starthour=14 /grid/?prt=&lineup=us_Mountain&dur=3&.intl=us&startdate=$DateInSeconds$&starthour=13 /grid/?prt=&lineup=us_Pacific&dur=3&.intl=us&startdate=$DateInSeconds$&starthour=12 /grid/?prt=&lineup=us_Alaskan&dur=3&.intl=us&startdate=$DateInSeconds$&starthour=11 /grid/?prt=&lineup=us_Hawaiian&dur=3&.intl=us&startdate=$DateInSeconds$&starthour=10 ) StringSplit, RootURL, RootURL, | StringSplit, URLTVOverView, URLTVOverView, | LocationsWoGermany = France,Italy,UK/Ireland,US-Eastern,US-Central,US-Mountain,US-Pacific,US-Alaska,US-Hawaiian Gui,+Resize Gui, Add, Text, , Region: Gui, Add, Radio, xm Section vTVLocation gTVLocation, Germany Loop, Parse, LocationsWoGermany, `, Gui, Add, Radio, ys gTVLocation, %A_LoopField% Gui, Add, Text, xm, Channels: Gui, Add, ListView, xm r6 w800 -Hdr AltSubmit vLvStations gLvStations Checked, Station|Link Gui, Add, Text, xm Section, Available dates: Gui, Add, ListBox, xm w100 r7 vLstProgramDays gCollectStationsToShow AltSubmit, Gui, Add, Text, xm , Time filter: Gui, Add, ListBox, xm w100 r6 vLstTimePeriods gCollectStationsToShow ,None||Till 08:00|08:00 - 16:00|16:00 - 20:00|20:00 - 00:00|After 00:00 Gui, Add, Button, xm w100 vBtnExportToFile gBtnExportToFile Disabled, Export to file Gui, Add, Text, ys Section, TV programs: Gui, Add, ListView, xs r15 w300 -Multi AltSubmit vLvTVProgram gLvTVProgram, Station|Start|End|Name|Link|SortStartTime|SortEndTime|StationLink Gui, Add, Text, ys , Program information: Gui, Add, Edit, w380 r17 vEdtTVProgramDetails, IniRead, GuiPos1, %A_ScriptName%.ini, Settings, GuiPos1, %A_Space% Gui, Show, %GuiPos1%, %Gui1Title% ;add statusbar to gui BarHWND1 := SB_Segments("30,-1") SB_Text(BarHWND1, 1, "Tip:") ;Enable dynamic statusbar text (e.g. for tips on controls) OnMessage(0x200, "UpdateStatusBarText") ;WM_MOUSEMOVE OnMessage(0x2a2, "UpdateStatusBarText") ;WM_NCMOUSELEAVE SetTimer, CheckIfMouseIsOutsideGui,250 IniRead, TVLocation, %A_ScriptName%.ini, Settings, TVLocation, %A_Space% If (TVLocation = 1){ GuiControl, , TVLocation, 1 GoSub, TVLocation }Else If (TVLocation > 1){ Loop, Parse, LocationsWoGermany, `n { If (TVLocation = A_Index + 1){ GuiControl, , %A_LoopField%, 1 GoSub, TVLocation Break } } } Return ;check if mouse has left the gui, to update the dynamic statusbar text CheckIfMouseIsOutsideGui: MouseGetPos,,,MouseOverWindow, Gui, 1:+Lastfound If (MouseOverWindow <> WinExist()) UpdateStatusBarText("","","0x2a2","") return ;set text in statusbar depending on where the mouse is in the gui UpdateStatusBarText(wParam, lParam, msg, hwnd){ global BarHWND1, LocationsWoGermany If (msg = 0x200){ ;mouse moved in gui If A_GuiControl in TVLocation,%LocationsWoGermany% SB_Text(BarHWND1, 2, "Select region you would like to view TV listings for") Else If A_GuiControl = LvStations SB_Text(BarHWND1, 2, "Check the channels for a list of available programs") Else If A_GuiControl = LvTVProgram SB_Text(BarHWND1, 2, "Select TV program for information") Else If A_GuiControl = BtnExportToFile SB_Text(BarHWND1, 2, "Export list of TV programs to file") Else If A_GuiControl = EdtTVProgramDetails SB_Text(BarHWND1, 2, "Select a program in the list of TV programs to get information") Else SB_Text(BarHWND1, 2, "") }Else If (msg = 0x2a2){ ;mouse leaves gui SB_Text(BarHWND1, 2, "") } } ActivateGui: Gui, +Lastfound WinActivate Return GuiClose: GuiEscape: Gui, Submit, NoHide IniWrite, %TVLocation%, %A_ScriptName%.ini, Settings, TVLocation WinGetPos, PosX, PosY, SizeW, SizeH, %WinNameGui1% IniWrite, x%PosX% y%PosY%, %A_ScriptName%.ini, Settings, GuiPos1 ExitApp Return GuiSize: new_w := A_GuiWidth - 20 GuiControl, 1:Move, LvStations, w%new_w% new_h := A_GuiHeight - 225 GuiControl, 1:Move, LvTVProgram, h%new_h% new_w -= 420 GuiControl, 1:Move, EdtTVProgramDetails, w%new_w% h%new_h% ;adjust statusbar size SendMessage 5,0,0,,ahk_id %BarHWND1% ; 5 = WM_SIZE Return BtnExportToFile: FileSelectFile, SelectedFile, 18, , Select export file, Text file (*.txt) If SelectedFile { FileDelete, %SelectedFile% ExportString = Gui, ListView, LvTVProgram Loop, % LV_GetCount() { LV_GetText(Station, A_Index,1) LV_GetText(StartTime, A_Index,2) LV_GetText(EndTime, A_Index,3) LV_GetText(Name, A_Index,4) ExportString = %ExportString%%Station%|%StartTime%|%EndTime%|%Name%`n } StringTrimRight, ExportString, ExportString, 1 FileAppend, %ExportString%, %SelectedFile% } Return LvTVProgram: If (A_GuiEvent = "ColClick") { If (A_EventInfo = 2){ If SortCol2 LV_ModifyCol(6, "Sort") Else LV_ModifyCol(6, "SortDesc") SortCol2 := not SortCol2 }Else If (A_EventInfo = 3){ If SortCol3 LV_ModifyCol(7, "Sort") Else LV_ModifyCol(7, "SortDesc") SortCol3 := not SortCol3 } }Else If (A_GuiEvent = "Normal"){ LV_GetText(Link, A_EventInfo,5) LV_GetText(StationLink, A_EventInfo,8) GuiControl, ,EdtTVProgramDetails, If Link is not Space { URL := RootURL%TVLocation% . Link URLDownloadToFile, %URL%, TVProgramDetails.txt FileRead, TVProgramDetails, TVProgramDetails.txt FileDelete, TVProgramDetails.txt StringReplace, TVProgramDetails, TVProgramDetails, | ,, All If (TVLocation > 4) { ;it is US StringReplace, TVProgramDetails, TVProgramDetails,