Voici le programme compilé ( avec les logos ) : PBVLC.zip

Et voici le code source :
Code : Tout sélectionner
;/ PureBasic 4.10 / Patrice 29/04/08
#Debug=#False
;/ Tue tous les VLC ouvert si n'a pas été fermé
RunProgram("taskkill","/im vlc.exe","",#PB_Program_Hide|#PB_Program_Wait )
;{/ Constantes / Variables / Structures
#ZAPPING_DELAY=6000
#PORT=8888
#LargeurImage=70
#HauteurImage=54
Largeur=#LargeurImage+60
UseJPEGImageDecoder()
ExamineDesktops()
hauteur=DesktopHeight(0)-70
Enumeration 3000
#SCROLLAREA
#STATUS
#MENU
#NEXT
#PREV
#PLAYLISTFREE
#ZAP
EndEnumeration
Structure Chaine
Nom.s
Logo.s
Lien.s
EndStructure
Global Cid, NewList Chaines.Chaine(), DerniereChaineLue, Tid
;}
;{/ Procédures
Procedure Reception()
*Buffer=AllocateMemory(1000)
ReceiveNetworkData(Cid,*Buffer,1000)
Debug "-- "+PeekS(*Buffer)
FreeMemory(*Buffer)
EndProcedure
Procedure Envoie(Text.s)
SendNetworkString(Cid,Text+#crlf$)
Reception()
EndProcedure
Procedure Lecture(n)
SelectElement(Chaines(),n)
Envoie("clear")
Envoie("add "+Chaines()\Lien)
DerniereChaineLue=ListIndex(Chaines())
If IsThread(Tid)
StatusBarText(#STATUS,0,Chaines()\Nom+" (Zapping)", #PB_StatusBar_Center)
Else
StatusBarText(#STATUS,0,Chaines()\Nom, #PB_StatusBar_Center)
EndIf
EndProcedure
Procedure Zapping()
a=-1
Repeat
a+1
If a=CountList(Chaines())
a=0
EndIf
Lecture(a)
Delay(#ZAPPING_DELAY)
ForEver
EndProcedure
ProcedureDLL URLDownloadToFile(Url.s,File.s)
retour=URLDownloadToFile_(0, Url, File, 0, 0)
DeleteUrlCacheEntry_(Url)
If retour=0 : retour=1 : Else : retour=0 : EndIf
ProcedureReturn retour
EndProcedure
;}
;{/ Lecture / Ecriture du fichier ini ( Stocke / demande où est VLC )
If #Debug
Ini.s="d:\PBVLC.ini"
Else
Ini=GetPathPart(ProgramFilename())+"PBVLC.ini"
EndIf
OpenPreferences(Ini)
VLC.s=ReadPreferenceString("VLC","")
If VLC=""
VLC=OpenFileRequester("VLC","","Exécutables|*.exe",1)
If VLC=""
End
EndIf
WritePreferenceString("VLC",VLC)
EndIf
;}
;{/ Lecture de chaines.txt et les met dans une LList
If #Debug
Fid=ReadFile(#PB_Any,"d:\Chaines.txt")
Else
Fid=ReadFile(#PB_Any,GetPathPart(ProgramFilename())+"chaines.txt")
EndIf
If Fid
While Not Eof(Fid)
Ligne.s=ReadString(Fid)
Ligne=LTrim(RTrim(Ligne))
If Ligne<>"" And Left(Ligne,1)<>";"
AddElement(Chaines())
Chaines()\Nom=StringField(Ligne,1,",")
Chaines()\Logo=StringField(Ligne,2,",")
Chaines()\Lien=StringField(Ligne,3,",")
EndIf
Wend
Else
MessageRequester("Chaines.txt","introuvable")
End
EndIf
;}
;/ Lance VLC avec les bonnes options
RunProgram(VLC,"--extraintf rc --rc-quiet --rc-host 127.0.0.1:"+Str(#PORT),"") ;/ Désentrelacement: --deinterlace-mode=bob --vout-filter deinterlace
;/ Connexion à VLC via port réseau
InitNetwork()
Cid=OpenNetworkConnection("127.0.0.1",#PORT)
;{/ Visuel
Fid=OpenWindow(0,0,0,Largeur,hauteur,"PBVLC",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
CreateStatusBar(#STATUS,WindowID(0))
CreateMenu(#MENU,WindowID(0))
MenuTitle("Chaines")
ScrollAreaGadget(#SCROLLAREA,10,10,#LargeurImage+40,hauteur-65,#LargeurImage+15,(CountList(Chaines()))*(#HauteurImage+10)+10,#HauteurImage)
;/ Pour chaque chaine : Ajout au menu / ajoute logo
ForEach Chaines()
MenuItem(ListIndex(Chaines()),Chaines()\Nom)
If #Debug
LogoChaine.s="d:\Logo\"+Chaines()\Logo+".jpg"
Else
LogoChaine.s=GetPathPart(ProgramFilename())+"Logo\"+Chaines()\Logo+".jpg"
EndIf
id=LoadImage(#PB_Any,LogoChaine)
ResizeImage(id,#LargeurImage,#HauteurImage)
If id
ButtonImageGadget(n,10,10+#HauteurImage*n+10*n,#LargeurImage,#HauteurImage,ImageID(id))
GadgetToolTip(n,Chaines()\Nom)
n+1
Else
MessageRequester("Logo chaine",LogoChaine+" Introuvable")
EndIf
Next
MenuTitle("Divers")
MenuItem(#ZAP,"Zapper")
MenuItem(#NEXT,"Chaine suivante")
MenuItem(#PREV,"Chaine précédente")
MenuItem(#PLAYLISTFREE,"Télécharger la playlist Free")
AddKeyboardShortcut(0,#PB_Shortcut_Add,#NEXT)
AddKeyboardShortcut(0,#PB_Shortcut_Subtract,#PREV)
CloseGadgetList()
SetActiveGadget(0)
;}
;/ Lecture automatique de la chaine précédente
Lecture(ReadPreferenceLong("LAST",0))
Repeat
evt=WaitWindowEvent()
If evt=#PB_Event_Gadget
If EventGadget()< 3000
If IsThread(Tid)
KillThread(Tid)
EndIf
Lecture(EventGadget())
EndIf
EndIf
If evt=#PB_Event_Menu
If EventMenu()=#ZAP
Tid=CreateThread(@Zapping(),0)
EndIf
If EventMenu()=#NEXT
NextElement(Chaines())
Lecture(ListIndex(Chaines()))
EndIf
If EventMenu()=#PREV
PreviousElement(Chaines())
Lecture(ListIndex(Chaines()))
EndIf
If EventMenu()=#PLAYLISTFREE
URLDownloadToFile("http://mafreebox.freebox.fr/freeboxtv/playlist.m3u","c:\PlayListFree.txt")
EndIf
If EventMenu()<3000
If IsThread(Tid)
KillThread(Tid)
EndIf
Lecture(EventMenu())
EndIf
EndIf
Until evt = #PB_Event_CloseWindow
;/ Enregistre la dernière chaine lue
WritePreferenceLong("LAST",DerniereChaineLue)
Envoie("clear")
Envoie("quit")
Delay(500)
Il faut créer un fichier texte (placé à coté de l'exécutable) nommé Chaines.txt : NomChaine,Logo,Flux ( TNT ou Web )
Voici le mien pour exemple :
;/ Chaines TNT ( Chaines.xml de PouchinTV --> Frequence / SID )
TF1,tf1,dvb-t:// :dvb-frequency=562167 :program=1537
FRANCE 2,fr2,dvb-t:// :dvb-frequency=586167 :program=257
FRANCE 3,fr3,dvb-t:// :dvb-frequency=586167 :program=273
Canal +,canal,dvb-t:// :dvb-frequency=522167 :program=769
FRANCE 5,fr5,dvb-t:// :dvb-frequency=586167 :program=260
M6,m6,dvb-t:// :dvb-frequency=498167 :program=1025
ARTE,arte,dvb-t:// :dvb-frequency=586167 :program=261
Direct 8,direct8,dvb-t:// :dvb-frequency=474167 :program=513
W9,w9,dvb-t:// :dvb-frequency=498167 :program=1026
TMC,tmc,dvb-t:// :dvb-frequency=562167 :program=1542
NT1,nt1,dvb-t:// :dvb-frequency=498167 :program=1027
NRJ 12,nrj,dvb-t:// :dvb-frequency=562167 :program=1538
LCP,lcp,dvb-t:// :dvb-frequency=586167 :program=262
France 4,fr4,dvb-t:// :dvb-frequency=474167 :program=519
BFM TV,bfmtv,dvb-t:// :dvb-frequency=474167 :program=515
iTélé,itele,dvb-t:// :dvb-frequency=474167 :program=516
Europe 2 TV,europe2,dvb-t:// :dvb-frequency=474167 :program=517
GULLI,gulli,dvb-t:// :dvb-frequency=474167 :program=518
France O,fr0,dvb-t:// :dvb-frequency=586167 :program=374
;/ Chaines Free
RTL9,rtl9,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=210
AB1,ab1,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=211
TV5,tv5,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=206
Game One,gameone,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=220
MTV,mtv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=219
AB Moteurs,abmoteurs,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=222
Euronews,euronews,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=205
Liberty TV,liberty-tv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=215
Sky News,skynews,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=355
Demain TV,demain,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=227
Fashion TV,fashion-tv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=221
;Freenews TV,freenews-tv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=428
Histoire,histoire,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=235
Toute l'histoire,toutehist,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=250
Encyclopedia,encyclopedia,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=251
Mangas,mangas,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=253