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

⌈⌋ branch:  streamtuner2


Check-in [805dbd5181]

Overview
Comment:Replace statusbar with plain gtk.Label, use glib.timeout_add for clearing it up implicitly.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 805dbd51814d23a9cbbcd91d580f849f90780fa6
User & Date: mario on 2015-04-25 00:39:10
Other Links: manifest | tags
Context
2015-04-26
15:34
Add custom pls extractor (for unordered playlist entries), keep regex method as fallback. More logging. check-in: 0725d3fbc8 user: mario tags: trunk
2015-04-25
00:39
Replace statusbar with plain gtk.Label, use glib.timeout_add for clearing it up implicitly. check-in: 805dbd5181 user: mario tags: trunk
2015-04-24
22:55
More examples for recording/streamripper configuration. check-in: e8560b51b5 user: mario tags: trunk
Changes

Modified channels/internet_radio.py from [1cd93c503e] to [7d08db49a9].

77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
                    "/" + ("page"+str(page) if page>1 else "")
                )
            )

            # Is there a next page?
            if str(page+1) not in rx_pages.findall(html[-1]):
                break
#            self.parent.status(float(page)/float(max_pages+1))

        # Alternatively try regex or pyquery parsing
        #log.HTTP(html)
        for use_rx in [not conf.pyquery, conf.pyquery]:
            try:
                entries = (self.with_regex(html) if use_rx else self.with_dom(html))
                if len(entries):







|







77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
                    "/" + ("page"+str(page) if page>1 else "")
                )
            )

            # Is there a next page?
            if str(page+1) not in rx_pages.findall(html[-1]):
                break
            self.parent.status(float(page)/float(max_pages+1))

        # Alternatively try regex or pyquery parsing
        #log.HTTP(html)
        for use_rx in [not conf.pyquery, conf.pyquery]:
            try:
                entries = (self.with_regex(html) if use_rx else self.with_dom(html))
                if len(entries):

Modified gtk3.xml.gz from [075cbcb73a] to [fbb5039142].

cannot compute difference between binary files

Modified st2.py from [d0ecae043d] to [3eb72c0f83].

37
38
39
40
41
42
43

44
45
46
47
48
49
50
import sys
import os
import re
from copy import copy
import inspect
import traceback
from threading import Thread


# add library path (either global setup, or pyzip basename)
if not os.path.dirname(__file__) in sys.path:
    sys.path.insert(0, os.path.dirname(__file__))

# initializes itself, so all conf.vars are available right away
from config import *







>







37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import sys
import os
import re
from copy import copy
import inspect
import traceback
from threading import Thread
import time

# add library path (either global setup, or pyzip basename)
if not os.path.dirname(__file__) in sys.path:
    sys.path.insert(0, os.path.dirname(__file__))

# initializes itself, so all conf.vars are available right away
from config import *
353
354
355
356
357
358
359
360
361

362
363
364
365
366
367
368
369

370


371
372
373
374
375
376
377
378
379
380
381
382









383
384
385
386
387
388
389
    def switch_notebook_tabs_position(self, w, pos):
        self.notebook_channels.set_tab_pos(pos);
        




    # shortcut to statusbar
    # (hacked to work from within threads, circumvents the statusbar msg pool actually)

    def status(self, text="", sbar_msg=[]):
        # init
        sbar_cid = self.get_widget("statusbar").get_context_id("messages")
        # remove text
        while ((not text) and (type(text)==str) and len(sbar_msg)):
            sbar_msg.pop()
            uikit.do(self.statusbar.pop, sbar_cid, immediate=1)
        # progressbar

        if (type(text)==float):


            if text >= 0.999 or text < 0.0:  # completed
                uikit.do(self.progress.hide)
            else:  # show percentage
                uikit.do(self.progress.show, immediate=1)
                uikit.do(self.progress.set_fraction, text, immediate=1)
                if (text <= 0):  # unknown state
                    uikit.do(self.progress.pulse, immediate=1)
        # add text
        elif (type(text)==str):
            sbar_msg.append(1)
            uikit.do(self.statusbar.push, sbar_cid, text, immediate=1)
        pass











    # load plugins from /usr/share/streamtuner2/channels/
    def load_plugin_channels(self):

        # initialize plugin modules (pre-ordered)
        ls = module_list()







|
|
>
|
<
|
|
<
<
<

>
|
>
>
|




|
<

|
<
|
|
>
>
>
>
>
>
>
>
>







354
355
356
357
358
359
360
361
362
363
364

365
366



367
368
369
370
371
372
373
374
375
376
377

378
379

380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
    def switch_notebook_tabs_position(self, w, pos):
        self.notebook_channels.set_tab_pos(pos);
        




    # Shortcut to statusbar and progressbar.
    # Either pass a string "" or a float 0.5, the message and pulse will be automatically
    # removed after 5 seconds now.
    def status(self, text=None, timeout=3):

        self.status_last = time.time() + timeout




        # progressbar
        if isinstance(text, (int, float)):
            log.FLOAT(text)
            if (text <= 0):  # unknown state
                uikit.do(self.progress.pulse, immediate=1)
            elif text >= 0.999 or text < 0.0:  # completed
                uikit.do(self.progress.hide)
            else:  # show percentage
                uikit.do(self.progress.show, immediate=1)
                uikit.do(self.progress.set_fraction, text, immediate=1)


        # add text
        elif isinstance(text, (str, unicode)):

            uikit.do(self.statusbar.set_text, text)

        # timeout
        if not text or time.time() >= self.status_last:
            self.statusbar.set_text("")
            self.progress.hide()
            return False
        # add timer
        else:
            gobject.timeout_add(int(timeout*1000), self.status)
        return True


    # load plugins from /usr/share/streamtuner2/channels/
    def load_plugin_channels(self):

        # initialize plugin modules (pre-ordered)
        ls = module_list()