Internet radio browser GUI for music/video streams from various directory services.

⌈⌋ ⎇ branch:  streamtuner2


Diff

Differences From Artifact [1e246c384f]:

To Artifact [c318545725]:


1
2
3
4
5
6
7

8
9
10
11
12
13
14
1
2
3
4
5
6

7
8
9
10
11
12
13
14






-
+







# encoding: utf-8
# api: streamtuner2
# title: MyOggRadio
# description: Open source internet radio directory.
# type: channel
# category: radio
# version: 0.7
# version: 0.7.5
# url: http://www.myoggradio.org/
# depends: json, ahttp >= 1.5
# config:
#    { name: myoggradio_login,  type: text,  value: "user:password", description: "Account for storing personal favourites." }
#    { name: myoggradio_morph,  type: boolean, value: 0,  description: "Convert pls/m3u into direct shoutcast url." }
# priority: standard
# png:
30
31
32
33
34
35
36

37
38
39
40
41
42
43
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44







+









from channels import *
from config import *
import action
from uikit import uikit
import ahttp
import time

import re
import json
import copy
from uikit import gtk


86
87
88
89
90
91
92
93

94
95
96
97
98
99
100
87
88
89
90
91
92
93

94
95
96
97
98
99
100
101







-
+







        # bookmarks
        elif (cat == "personal") and self.user_pw():
            data = ahttp.get(self.api + "favoriten.json?user=" + self.user_pw()[0], encoding="utf-8")
            entries = json.loads(data)
        
        # unknown
        else:
            self.parent.status("Unknown category")
            self.status("Unknown category")
            pass

        # augment result list
        for i,e in enumerate(entries):
            entries[i]["homepage"] = self.api + "c_common_details.jsp?url="  + e["url"]
            entries[i]["genre"] = cat
            entries[i]["format"] = "audio/mpeg"
126
127
128
129
130
131
132
133
134
135
136
137
138
139











140
141
142
143
144
145
146
147
148
149
150

151
152



153
154
155


156
157
158
159
160
161
162
127
128
129
130
131
132
133







134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162


163
164
165
166
167
168
169
170
171







-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+











+


+
+
+

-
-
+
+







            if row["title"] in (r.get("title") for r in self.streams["common"]):
                pass
            elif row["url"] in (r.get("url") for r in self.streams["common"]):
                pass

            # send
            else:
                self.parent.status("Sharing station URL...")
                self.upload(row)
                sleep(0.5) # artificial slowdown, else user will assume it didn't work
            
        # tell Gtk we've handled the situation
        self.parent.status("Shared '" + row["title"][:30] + "' on MyOggRadio.org")
        return True
                self.status("Sharing station URL...")
                if (self.upload(row)):
                    # artificial slowdown, else user will assume it didn't work
                    self.status(0.5)
                    time.sleep(0.1)

                    # tell Gtk we've handled the situation
                    self.status("Shared '" + row["title"][:30] + "' on MyOggRadio.org", icon="gtk-save")
                else:
                    self.status()
            return True


    # upload bookmarks
    def send_bookmarks(self, entries=[]):
    
        for e in (entries if entries else parent.bookmarks.streams["favourite"]):
            self.upload(e)
        

    # send row to MyOggRadio
    def upload(self, e, form=0):
        return True
        if e:
            login = self.user_pw()
            if not login:
                return

            submit = {
                "user": login[0],    	  # api
                "passwort": login[1], 	  # api
                "user": login[0],         # api
                "passwort": login[1],     # api
                "url": e["url"],
                "bemerkung": e["title"],
                "genre": e["genre"],
                "typ": e["format"][6:],
                "eintragen": "eintragen", # form
            }

184
185
186
187
188
189
190
191

192
193
194
195
193
194
195
196
197
198
199

200
201
202









-
+


-
-
        if len(conf.myoggradio_login) and conf.myoggradio_login != "user:password":
            return conf.myoggradio_login.split(":")
        else:
            lap =  conf.netrc(["myoggradio", "myoggradio.org", "www.myoggradio.org"])
            if lap:
                return [lap[0] or lap[1], lap[2]]
            else:
                self.parent.status('<span background="orange">â›” No login data for MyOggRadio configured. See F12 for setup, or F1 for help.</span>', timeout=10, markup=1);
                self.status("No login data for MyOggRadio configured. See F12 for setup, or F1 for help.", timeout=10, icon="gtk-dialog-error")
        pass