Check-in [2c8a7bf1a8]
Overview
| Comment: | More mapping options in Radiotray hook. |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
2c8a7bf1a81bb5b2847f66016c1e4e85 |
| User & Date: | mario on 2018-12-18 22:40:56 |
| Other Links: | manifest | tags |
Context
|
2018-12-21
| ||
| 23:03 | Fix dict error for new categories. check-in: ceba1060dd user: mario tags: trunk | |
|
2018-12-18
| ||
| 22:40 | More mapping options in Radiotray hook. check-in: 2c8a7bf1a8 user: mario tags: trunk | |
| 22:40 | Optional toolbar button for search dialog. check-in: 4beef0ad4d user: mario tags: trunk | |
Changes
Modified channels/radiotray.py from [f78abe4734] to [d06646c6dc].
1 2 3 | # api: streamtuner2 # title: RadioTray hook # description: Allows to bookmark stations to RadioTray/NG | > | | > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# encoding: utf-8
# api: streamtuner2
# title: RadioTray hook
# description: Allows to bookmark stations to RadioTray/NG
# version: 0.8
# type: feature
# category: bookmarks
# depends: deb:python-dbus, deb:streamtuner2, deb:python-xdg
# config:
# { name: radiotray_map, type: select, value: "group", select: 'root|group|category|asis|channel|play', description: 'Map genres to default RadioTray groups, or just "root".' }
# url: http://radiotray.sourceforge.net/
# priority: extra
# id: streamtuner2-radiotray
# extraction-method: xml
# pack: radiotray.py
# fpm-prefix: /usr/share/streamtuner2/channels/
#
# Adds a context menu "Add in RadioTray.." for bookmarking.
# Should work with old Radiotray and Radiotray-NG. It will
# now probe for RTNG first and prefers to edit its bookmark
# list.
#
# The mapping options:
# ยท "root" is just meant for the old Radiotray format.
# ยท "group" tries to fit genres onto existing submenus.
# ยท "category" maps just the channel category.
# ยท "channel" instead creates `Shoutcast - Rock` entries.
# ยท "asis" will transfer the literal station genre.
# ยท "play" is unused.
#
# With the old Radiotry this plugin will fall back to just
# playUrl() until the addRadio remote call is added.
# The patch for radiotray/DbusFacade.py would be:
# +
# + @dbus.service.method('net.sourceforge.radiotray')
# + def addRadio(self, title, url, group="root"):
# + self.dataProvider.addRadio(title, url, group)
|
| ︙ | ︙ | |||
123 124 125 126 127 128 129 |
return r
# send to
def share(self, *w):
row = self.parent.row()
if row:
| | < > | | > > > > > | 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 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
return r
# send to
def share(self, *w):
row = self.parent.row()
if row:
group = self.map_group(row.get("genre", self.parent.channel().current))
log.PROC("mapping genre '%s' to RT group '%s'" % (row["genre"], group))
# Radiotray-NG
try:
self.radiotray_ng().add_radio(row["title"], row["url"], group)
except:
try:
cfg = self.radiotray_ng().get_config()
self.save_rtng_json(cfg, row, group)
self.radiotray_ng().reload_bookmarks()
self.parent.status("Exported to Radiotray. You may need to use Preferences > Reload Bookmarks.")
except Exception as e:
log.ERR("radiotray-ng not active", e)
# RadioTray doesn't have an addRadio method yet, so just fall back to play the stream URL
try:
self.radiotray().addRadio(row["title"], row["url"], group)
except:
try:
self.radiotray().playUrl(row["url"])
except:
log.ERR("radiotry-old not active")
pass
# manually add to RTNG bookmarks.json
def save_rtng_json(self, cfg, row, group):
fn = json.loads(cfg)["bookmarks"]
j = json.load(open(fn, "r"))
found = None
group = {"root": "streamtuner2", "": "streamtuner2"}.get(group, group)
# find existing group
for g in j:
if g["group"] == group:
found = g
break
# else add new group
if not found:
found = {
"group": group,
"image": None,
"stations": []
}
j.append(found)
# overwrite bookmarks.json
if found:
found["stations"].append({
"image": None,
"name": row["title"],
"url": row["url"]
})
json.dump(j, open(fn, "w"), indent=4)
# match genre to RT groups
def map_group(self, genre):
if not genre or not len(genre) or conf.radiotray_map == "root":
return "root"
if conf.radiotray_map == "channel":
return "%s - %s" % (self.parent.current_channel, self.parent.channel().current)
if conf.radiotray_map == "asis":
return genre # if RadioTray itself can map arbitrary genres to its folders
if conf.radiotray_map == "play":
raise NotImplementedError("just call .playUrl()")
if conf.radiotray_map == "category":
genre = self.parent.channel().current
# else "group" - find first fit for station genre
map = {
"Jazz": "jazz|fusion|swing",
"Latin": "latin|flamenco|tango|salsa|samba",
"Classic Rock": "classic rock",
"Classical": "classic|baroque|opera|symphony|piano|violin",
"Pop / Rock": "top|pop|rock|metal",
"Oldies": "20s|50s|60s|70s|oldie",
|
| ︙ | ︙ |