[InternetRadio] initial commit of InternetRadio plugin (with music-visualization...
[enigma2-plugins.git] / internetradio / src / WebComponents / Sources / InternetRadioWeb.py
1 #
2 # InternetRadio E2
3 #
4 # Coded by Dr.Best (c) 2012
5 # Support: www.dreambox-tools.info
6 # E-Mail: dr.best@dreambox-tools.info
7 #
8 # This plugin is open source but it is NOT free software.
9 #
10 # This plugin may only be distributed to and executed on hardware which
11 # is licensed by Dream Multimedia GmbH.
12 # In other words:
13 # It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
14 # to hardware which is NOT licensed by Dream Multimedia GmbH.
15 # It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
16 # on hardware which is NOT licensed by Dream Multimedia GmbH.
17 #
18 # If you want to use or modify the code or parts of it,
19 # you have to keep MY license and inform me about the modifications by mail.
20 #
21
22 from Components.Sources.Source import Source
23 from Screens.InfoBar import InfoBar
24 from Plugins.Extensions.InternetRadio.InternetRadioFavoriteConfig import InternetRadioFavoriteConfig
25 from Plugins.Extensions.InternetRadio.InternetRadioScreen import InternetRadioScreen
26 from Plugins.Extensions.InternetRadio.InternetRadioClasses import InternetRadioStation
27
28 class InternetRadioWeb(Source):
29
30         ADD_FAVORITE = 0
31         REMOVE_FAVORITE = 1
32         RENAME_FAVORITE = 3
33         PLAY_STATION = 4
34         GET_PLAYING_STATUS = 5
35         GET_STREAMING_INFOS = 6
36         STOP_PLAYING = 7
37
38         def __init__(self, session, func=ADD_FAVORITE):
39                 Source.__init__(self)
40                 self.func = func
41                 self.session = session
42                 self.command = None
43                 if self.func is self.GET_PLAYING_STATUS:
44                         self.result = self.getPlayingStatus()
45                 elif self.func is self.GET_STREAMING_INFOS:
46                         self.result = self.getStreamingInfos()
47                 elif self.func is self.STOP_PLAYING:
48                         self.result = self.stopPlaying()
49                 else:
50                         self.result = ( False, "one two three four unknown command" )
51
52         def handleCommand(self, cmd):
53                 print "[WebComponents.InternetRadioWeb] handleCommand with cmd = ", cmd
54                 if self.func is self.ADD_FAVORITE:
55                         self.result = self.addFavorite(cmd)
56                 elif self.func is self.REMOVE_FAVORITE:
57                         self.result = self.removeFavorite(cmd)
58                 elif self.func is self.RENAME_FAVORITE:
59                         self.result = self.renameFavorite(cmd)
60                 elif self.func is self.PLAY_STATION:
61                                 self.result = self.playStation(cmd)
62                 else:
63                         self.result = ( False, "one two three four unknown command" )
64                         
65         def addFavorite(self, param):
66                 print "[WebComponents.InternetRadioWeb] addFavorite with param = ", param
67                 name  = param["name"]
68                 if name  is None:
69                         return (False, "No favorite name given!")
70                 text = param["text"]
71                 if text is None:
72                         text = name 
73                 favoritetype = param["favoritetype"]
74                 if favoritetype is None:
75                         return (False, "No favorite type given!")
76                 elif favoritetype.isdigit() == False:
77                         return (False, "favorite type has to be a number between 0 and 2!")
78                 tags = param["tags"]
79                 if tags is None:
80                         tags = ""
81                 country = param["country"]
82                 if country is None:
83                         country = ""
84                 homepage = param["homepage"]
85                 if homepage is None:
86                         homepage = ""
87                 favoriteConfig = InternetRadioFavoriteConfig()
88                 favoriteConfig.addFavorite(name = name, text = text, favoritetype = int(favoritetype), tags = tags, country = country, homepage = homepage)
89                 player = self.getPlayerInstance()
90                 if player is not None:
91                         player.updateFavoriteList()
92                 return (True, "favorite %s added." % name)
93                 
94         def removeFavorite(self, param):
95                 print "[WebComponents.InternetRadioWeb] removeFavorite with param = ", param
96                 name  = param["name"]
97                 if name  is None:
98                         return (False, "No favorite name given!")
99                 text = param["text"]
100                 if text is None:
101                         text = name 
102                 favoritetype = param["favoritetype"]
103                 if favoritetype is None:
104                         return (False, "No favorite type given!")
105                 elif favoritetype.isdigit() == False:
106                         return (False, "favorite type has to be a number between 0 and 2!")
107                 found = 0
108                 favoriteConfig = InternetRadioFavoriteConfig()
109                 if favoriteConfig.removeFavoriteHTML(name = name, text = text, favoritetype = int(favoritetype)) == 1:
110                         player = self.getPlayerInstance()
111                         if player is not None:
112                                 player.updateFavoriteList()
113                         return (True, "favorite %s removed." % name)
114                 else:
115                         return (False, "Could not find favorite %s!" % name)
116                         
117         def renameFavorite(self, param):
118                 print "[WebComponents.InternetRadioWeb] renameFavorite with param = ", param
119                 name  = param["name"]
120                 if name  is None:
121                         return (False, "No favorite name given!")
122                 text = param["text"]
123                 if text is None:
124                         text = name 
125                 favoritetype = param["favoritetype"]
126                 if favoritetype is None:
127                         return (False, "No favorite type given!")
128                 elif favoritetype.isdigit() == False:
129                         return (False, "favorite type has to be a number between 0 and 2!")
130                 newname  = param["newname"]
131                 if newname  is None:
132                         return (False, "No favorite newname given!")
133                 found = 0
134                 favoriteConfig = InternetRadioFavoriteConfig()
135                 if favoriteConfig.renameFavoriteHTML(name = name, text = text, favoritetype = int(favoritetype), newname = newname) == 1:
136                         player = self.getPlayerInstance()
137                         if player is not None:
138                                 player.updateFavoriteList()
139                         return (True, "favorite %s renamed." % name)
140                 else:
141                         return (False, "Could not find favorite %s!" % name)
142                         
143         def playStation(self, param):
144                 print "[WebComponents.InternetRadioWeb] playStation with param = ", param
145                 name  = param["name"]
146                 if name  is None:
147                         name = ""
148                 url = param["url"]
149                 if url is None:
150                         return (False, "No url given!")
151                 radioStation = InternetRadioStation(name = name)
152                 player = self.getPlayerInstance()
153                 if player is not None:
154                         player.playRadioStation(url, radioStation)
155                         player.updateFullscreenStationName(radioStation.name)
156                         return (True, "%s opend." % url)
157                 else:
158                         # start plugin only when no other screen is open...
159                         if isinstance(self.session.current_dialog, InfoBar):
160                                 player = self.session.open(InternetRadioScreen, url, radioStation)
161                                 return (True, "%s opend." % url)
162                         else:
163                                 return (False, "Player can not start because there is another screen already open.")
164                 
165         def getPlayingStatus(self):
166                 player = self.getPlayerInstance()
167                 if player is not None:
168                         return player.getCurrentPlayingStation()
169                 else:
170                         return (False, "InternetRadio plugin is not running...") 
171         
172         def getStreamingInfos(self):
173                 player = self.getPlayerInstance()
174                 if player is not None:
175                         return (True, player.getStreamingInfos())
176                 else:
177                         return (False, "InternetRadio plugin is not running...") 
178         
179         def stopPlaying(self):
180                 player = self.getPlayerInstance()
181                 if player is not None:
182                         player.closePlayer()
183                 return (True, "Done...") 
184                 
185         def getPlayerInstance(self):
186                 if isinstance(self.session.current_dialog, InternetRadioScreen):
187                         return self.session.current_dialog
188                 else:
189                         return None