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

โŒˆโŒ‹ โŽ‡ branch:  streamtuner2


Check-in [beebec9c76]

Overview
Comment:Add some version: bumps and add a few versions to depends: references.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: beebec9c7629fa4d043b3d957c1c4103b6761067
User & Date: mario on 2015-05-03 20:26:01
Other Links: manifest | tags
Context
2015-05-04
15:20
Hopefully fix Gtk3 error by wrapping second set_current() call in uikit.do check-in: b5a787d470 user: mario tags: trunk
2015-05-03
20:26
Add some version: bumps and add a few versions to depends: references. check-in: beebec9c76 user: mario tags: trunk
20:24
Perform basic version dependency checks before displaying downloadable plugins. check-in: c83b236a5a user: mario tags: trunk
Changes

Modified channels/__init__.py from [4aa8b6efaf] to [fcabfb47c7].

42
43
44
45
46
47
48

49
50
51
52
53
54
55
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56







+









# Only export plugin classes
__all__ = [
    "GenericChannel", "ChannelPlugin", "use_rx",
    "entity_decode", "strip_tags", "nl", "unhtml", "to_int"
]
#__path__.insert(0, conf.plugin_dir)



# generic channel module                            ---------------------------------------
class GenericChannel(object):

    # control attributes

Modified channels/dnd.py from [f74a30909e] to [b0d6800112].

1
2
3

4
5
6


7
8
9
10
11
12
13
1
2

3
4


5
6
7
8
9
10
11
12
13


-
+

-
-
+
+







# encoding: UTF-8
# api: streamtuner2
# title: Drag and Drop (experimental)
# title: Drag and Drop
# description: Copy streams/stations from and to other applications.
# depends: uikit
# version: 0.5
# depends: uikit >= 1.8, action >= 1.0
# version: 0.6
# type: feature
# config:
#   { name: dnd_format, type: select, value: xspf, select: "pls|m3u|xspf|jspf|asx|smil|desktop|srv", description: "Default temporary file format for copying a station." }
# category: io
# priority: default
# support: experimental
#

Modified channels/file.py from [710b8d2e10] to [a4d7826b5b].

1
2
3
4
5
6

7
8
9
10
11
12
13
1
2
3
4
5

6
7
8
9
10
11
12
13





-
+







# api: streamtuner2
# title: File browser
# description: Displays mp3/oggs or m3u/pls files from local media file directories.
# type: channel
# category: local
# version: 0.1
# version: 0.2
# priority: optional
# depends: mutagen
# config:  
#   { name: file_browser_dir, type: text, value: "$XDG_MUSIC_DIR, ~/MP3", description: "List of directories to scan for audio files." },
#   { name: file_browser_ext, type: text, value: "mp3,ogg, m3u,pls,xspf, avi,flv,mpg,mp4", description: "File type/extension filter." },
#
# Local file browser. Presents files from configured directories.

Modified channels/global_key.py from [9906a49477] to [62a1ee3f85].

1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11

12
13
14
15
16
17
18
19











-
+







# api: streamtuner2
# title: Global keyboard shortcut
# description: Allows switching between bookmarked radios via key press.
# type: feature
# category: ui
# version: 0.3
# config:
#    { name="switch_key", type="text", value="XF86Forward", description="Global key shortcut for switching radio." },
#    { name="switch_channel", type="text", value="bookmarks:favourite", description="Station list and channels to alternate in." },
#    { name="switch_random", type="boolean", value=0, description="Pick random channel, instead of next." },
# priority: extra
# depends: python-keybinder
# depends: python:keybinder, uikit >= 1.5
#
#
# Binds a key to global desktop (F13 = left windows key).
# On keypress switches the currently playing radio station
# to another one from the bookmarks list.
#
# Valid key names are `F9`, `<Ctrl>G`, `<Alt>R` for example.

Modified channels/myoggradio.py from [cb87a3782b] to [b165bc2c10].

1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
16








-
+








# api: streamtuner2
# title: MyOggRadio
# description: Open source internet radio directory.
# type: channel
# category: radio
# version: 0.7
# url: http://www.myoggradio.org/
# depends: json, StringIO
# depends: json, StringIO, ahttp >= 1.2
# 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:
#   iVBORw0KGgoAAAANSUhEUgAAAAsAAAAQCAYAAADAvYV+AAAABHNCSVQICAgIfAhkiAAAARdJREFUKJGt0U8rhFEUx/HP3AfjT9QQJo80CyzGG1A2UspL8k4s
#   7G2lvAlLC0skEWliMJTHM2Nx72iSjfJb3Xv6/n7ndA5/UIWz/jtDGZ9rqXQGAT30+vAE6njA80DYCObQxe1QTFdPhlFc4D0lzmMGn3gJGEtQhipFg80a53Uq

Modified config.py from [f4ef1864d6] to [8817626a3c].

389
390
391
392
393
394
395
396
397

398
399
400
401
402
403
404
389
390
391
392
393
394
395


396
397
398
399
400
401
402
403







-
-
+







# Extremely crude version for Python and streamtuner2 plugin usage.
# But can fetch from different sources:
#  ยท fn= to read from literal files, out of a .pyzip package
#  ยท src= to extract from pre-read script code
#  ยท module= utilizes pkgutil to read 
#  ยท frame= automatically extract comment header from caller
#
plugin_base = ("channels", "plugins")
def plugin_meta(fn=None, src=None, module=None, frame=1):
def plugin_meta(fn=None, src=None, module=None, frame=1, plugin_base=["channels", "plugins"]):

    # try via pkgutil first
    if module:
       fn = module
       for base in plugin_base:
           try:
               src = pkgutil.get_data(base, fn+".py")

Modified st2.py from [49404ca98a] to [f3bb2fc332].

1
2
3
4
5
6
7
8
9
1

2
3
4
5
6
7
8

-







#!/usr/bin/env python
#
# encoding: UTF-8
# api: python
# type: application
# title: streamtuner2
# description: Directory browser for internet radio, audio and video streams
# version: 2.1.7-dev
# state: beta

Modified uikit.py from [38277dba47] to [baec4be4e9].

1
2
3
4
5
6

7
8
9
10
11
12
13
1
2
3
4
5

6
7
8
9
10
11
12
13





-
+







# encoding: UTF-8
# api: python
# type: functions
# title: uikit helper functions
# description: simplify usage of some gtk widgets
# version: 1.8
# version: 1.9
# author: mario
# license: public domain
#
# Wrappers around gtk methods. The TreeView method .columns() allows
# to fill a treeview. It adds columns and data rows with a mapping
# dictionary (which specifies many options and data positions).
#