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

⌈⌋ branch:  streamtuner2


Diff

Differences From Artifact [02a852d95e]:

  • Executable file st2.py — part of check-in [f5f0ae18c1] at 2015-03-29 14:47:35 on branch trunk — Renamed `uikit` module. Auxiliary dialogs `streamedit` and `search` moved into plugins. Less indentation. Compacter import statements. Core plugins initialized into .features, and grayed out in configuration dialog. And `station_context_menu` moved into method. (user: mario, size: 21734) [annotate] [blame] [check-ins using]

To Artifact [a25ff9d0d3]:


34
35
36
37
38
39
40
41

42
43
44

45
46
47
48
49
50
51
34
35
36
37
38
39
40

41
42

43
44
45
46
47
48
49
50
51







-
+

-

+






# collections. Commercial and sign-up services are not an objective.
#



# standard modules
import sys
import os, os.path
import os
import re
from collections import namedtuple
from copy import copy
import inspect
import traceback
from threading import Thread

# add library path
sys.path.insert(0, "/usr/share/streamtuner2")   # pre-defined directory for modules
sys.path.insert(0, ".")   # development module path
78
79
80
81
82
83
84
85

86
87
88
89
90
91
92
93
94

95
96
97
98
99
100
101
78
79
80
81
82
83
84

85
86
87
88
89
90
91
92
93

94
95
96
97
98
99
100
101







-
+








-
+






    add_signals = {} # channel gtk-handler signals
    hooks = {
        "play": [favicon.download_playing],  # observers queue here
        "init": [],
        "config_load": [],
        "config_save": [],
    }
    __version__ = "2.1.5"
    meta = plugin_meta()

    # status variables
    channel_names = ["bookmarks"]    # order of channel notebook tabs
    current_channel = "bookmarks"    # currently selected channel name (as index in self.channels{})


    # constructor
    def __init__(self):

        
        # gtkrc stylesheet
        self.load_theme(), gui_startup(1/20.0)

        # instantiate gtk/glade widgets in current object
        gtk.Builder.__init__(self)
        gtk.Builder.add_from_file(self, conf.find_in_dirs([".", conf.share], ui_file)), gui_startup(2/20.0)
        # manual gtk operations
414
415
416
417
418
419
420
421


422
423
424
425
426
427
428
414
415
416
417
418
419
420

421
422
423
424
425
426
427
428
429







-
+
+






                continue
            # or if it's a built-in (already imported)
            elif module in self.features or module in self.channels:
                continue
            
            # load plugin
            try:
                plugin = __import__("channels."+module, None, None, [""])
                plugin = __import__("channels."+module, globals(), None, [""])
                #print [name for name,c in inspect.getmembers(plugin) if inspect.isclass(c)]
                plugin_class = plugin.__dict__[module]
                plugin_obj = plugin_class(parent=self)
                
                # load .config settings from plugin
                conf.add_plugin_defaults(plugin_obj.meta["config"], module)

                # add and initialize channel