Check-in [21d6d1cf4b]
Overview
Comment: | Basic rewrites to transition to fully plugin meta data capable implementation. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
21d6d1cf4bec4425a0f7f0919f9b0df1 |
User & Date: | mario on 2015-03-28 07:33:09 |
Other Links: | manifest | tags |
Context
2015-03-28
| ||
07:34 | Minor additions, more cross references, and Mallard note icons. Document Jamendo plugin options. check-in: 89ba7b5c8e user: mario tags: trunk | |
07:33 | Basic rewrites to transition to fully plugin meta data capable implementation. check-in: 21d6d1cf4b user: mario tags: trunk | |
07:32 | Moved `bookmarks` channel into plugin. Implemented plugin .meta data consumption to replace .config = [] builtins. (Still need to rescan disabled channel/feature plugins later..) check-in: 9de894c13c user: mario tags: trunk | |
Changes
Modified channels/file.py from [f92686b376] to [4d4dd4f9cc].
1 2 3 4 5 6 | # # api: streamtuner2 # title: File browser # description: Displays mp3/oggs or m3u/pls files from local media file directories. # type: channel # category: media | | > > > | < > | | 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 38 39 40 41 42 43 44 | # # api: streamtuner2 # title: File browser # description: Displays mp3/oggs or m3u/pls files from local media file directories. # type: channel # category: media # version: 0.1 # priority: optional # depends: mutagen # config: # {name:"file_browser_dir", "type":"text", "value": "~/Music, /media/music", "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 filter"}, # # # Local file browser. # # # modules import os import re from channels import * from config import * # ID3 libraries try: from mutagen import File as get_meta except: try: from ID3 import ID3 __print__(dbg.INFO, "Just basic ID3 support") get_meta = lambda fn: dict([(k.lower(),v) for k,v in ID3(fn).iteritems()]) except: __print__(dbg.INIT, "You are out of luck in regards to mp3 browsing. No ID3 support.") get_meta = lambda *x: {} # work around mutagens difficult interface def mutagen_postprocess(d): if d.get("TIT2"): return { |
︙ | ︙ | |||
52 53 54 55 56 57 58 | # file browser / mp3 directory listings class file (ChannelPlugin): # info | < < < < < < < | | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | # file browser / mp3 directory listings class file (ChannelPlugin): # info module = "file" title = "file browser" listtype = "url/file" # data streams = {} categories = [] dir = [] ext = [] # display datamap = [ # coltitle width [ datasrc key, type, renderer, attrs ] [cellrenderer2], ... ["", 20, ["state", str, "pixbuf", {}], ], ["Genre", 65, ['genre', str, "t", {"editable":8}], ], ["File", 160, ["filename", str, "t", {"strikethrough":10, "cell-background":11, "cell-background-set":12}], ], ["Title", 205, ["title", str, "t", {"editable":8}], ], ["Artist", 125, ["artist", str, "t", {"editable":8}], ], ["Album", 125, ["album", str, "t", {"editable":8}], ], ["Bitrate", 35, ["bitrate", int, "t", {}], ], ["Format", 50, ["format", str, None, {}], ], [False, 0, ["editable", bool, None, {}], ], [False, 0, ["favourite", bool, None, {}], ], |
︙ | ︙ |
Modified channels/global_key.py from [3a244b8b88] to [8937954709].
︙ | ︙ | |||
25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # register a key class global_key(object): module = "global_key" title = "keyboard shortcut" config = [ dict(name="switch_key", type="text", value="XF86Forward", description="global key for switching radio"), dict(name="switch_channel", type="text", value="bookmarks:favourite", description="station list to alternate in"), dict(name="switch_random", type="boolean", value=0, description="pick random channel, instead of next"), ] last = 0 | > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # register a key class global_key(object): module = "global_key" title = "keyboard shortcut" meta = plugin_meta() config = [ dict(name="switch_key", type="text", value="XF86Forward", description="global key for switching radio"), dict(name="switch_channel", type="text", value="bookmarks:favourite", description="station list to alternate in"), dict(name="switch_random", type="boolean", value=0, description="pick random channel, instead of next"), ] last = 0 |
︙ | ︙ |
Modified channels/history.py from [d33de09886] to [07819073c4].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # # api: streamtuner2 # title: History # description: List recently played stations under favourites > history. # version: 1.0 # type: category # category: ui # priority: optional # # Lists last activated streams in a new [history] tab in the favourites # channel. # # # | > > | | | < < < < < < < < < < > | 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 38 39 40 41 42 43 44 45 46 | # # api: streamtuner2 # title: History # description: List recently played stations under favourites > history. # version: 1.0 # type: category # category: ui # priority: optional # config: { name: history, type: int, value: 20, description: Number of last played streams to keep in history list., category: limit } # # # Lists last activated streams in a new [history] tab in the favourites # channel. # # # from config import * from channels import * class history: # plugin info module = "history" title = "History" meta = plugin_meta() # store bm = None # hook up to main tab def __init__(self, parent): self.config = self.meta["config"] # keep reference to main window self.bm = parent.channels["bookmarks"] # create category self.bm.add_category("history"); self.bm.reload_if_current(self.module) |
︙ | ︙ |
Modified channels/jamendo.py from [949c1eaeb0] to [fc2a3bf698].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # api: streamtuner2 # title: Jamendo # description: A license-free music collection and artist hub. # type: channel # version: 2.2 # category: radio # depends: json # priority: default # # Now utilizes the Jamendo /v3.0/ API. # # Radio station lists are fixed for now. Querying the API twice per station # doesn't seem overly sensible. # # Tracks are queried by genre, where currently there's just a small built-in | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # api: streamtuner2 # title: Jamendo # description: A license-free music collection and artist hub. # type: channel # version: 2.2 # category: radio # depends: json # priority: default # config: # { name: "jamendo_stream_format", type: "select", value: "ogg", select: "ogg=Ogg Vorbis|mp32=MP3, 192vbr|mp31=MP3, 96kbps|flac=Xiph FLAC", description: "Default streaming audio format. Albums and playlists still return Vorbis mostly for best quality." } # # # Now utilizes the Jamendo /v3.0/ API. # # Radio station lists are fixed for now. Querying the API twice per station # doesn't seem overly sensible. # # Tracks are queried by genre, where currently there's just a small built-in |
︙ | ︙ |
Modified channels/links.py from [fb5b65ac66] to [4b9e35f7fc].
︙ | ︙ | |||
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 | # # Simply adds a "links" entry in bookmarks tab, where known channels # and some others are listed with homepage links. # # from channels import * import copy # hooks into main.bookmarks class links (object): # plugin info module = "links" title = "Links" version = 0.1 # configuration settings config = [ ] # list streams = [ ] | > > | 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 | # # Simply adds a "links" entry in bookmarks tab, where known channels # and some others are listed with homepage links. # # from config import * from channels import * import copy # hooks into main.bookmarks class links (object): # plugin info module = "links" title = "Links" version = 0.1 meta = plugin_meta() # configuration settings config = [ ] # list streams = [ ] |
︙ | ︙ |
Modified channels/surfmusik.py from [02e3c00437] to [f86a97dfce].
︙ | ︙ | |||
10 11 12 13 14 15 16 | # recognizes: max_streams # # This plugin comes in German (SurfMusik) and English (SurfMusic) variations. # It provides a vast collection of international stations and genres. # While it's not an open source project, most entries are user contributed. # # They do have a Windows client, hencewhy it's even more important for | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # recognizes: max_streams # # This plugin comes in German (SurfMusik) and English (SurfMusic) variations. # It provides a vast collection of international stations and genres. # While it's not an open source project, most entries are user contributed. # # They do have a Windows client, hencewhy it's even more important for # streamtuner2 to support it on other platforms. # # TV stations don't seem to work mostly. And loading the webtv/ pages would # be somewhat slow (for querying the actual mms:// streams). # # # |
︙ | ︙ |
Modified channels/timer.py from [cb57b7822f] to [2de8202f62].
︙ | ︙ | |||
16 17 18 19 20 21 22 | # # Programmed events are visible in "timer" under the "bookmarks" channel. Times # are stored in the description field, and can thus be edited. However, after editing # times manually, streamtuner2 must be restarted for the changes to take effect. # | | > | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # # Programmed events are visible in "timer" under the "bookmarks" channel. Times # are stored in the description field, and can thus be edited. However, after editing # times manually, streamtuner2 must be restarted for the changes to take effect. # from config import * from channels import * import kronos from mygtk import mygtk from action import action import copy import re # timed events (play/record) within bookmarks tab class timer: # plugin info module = "timer" title = "Timer" meta = plugin_meta() # configuration settings config = [ ] timefield = "playing" |
︙ | ︙ |
Modified channels/xiph.py from [7363e5b0c8] to [a46d943cfe].
|
| | < > > > > > > > > > | 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 | # encoding: UTF-8 # api: streamtuner2 # title: Xiph.org # description: ICEcast radio directory. Now utilizes a cached JSON API. # type: channel # category: radio # version: 0.3 # priority: standard # # Xiph.org maintains the Ogg streaming standard and Vorbis audio compression # format, amongst others. The ICEcast server is an alternative to SHOUTcast. # # It meanwhile provides a JSOL dump, which is faster to download and process. # So we'll use that over the older yp.xml. (Sadly it also doesn't output # homepage URLs, listeners, etc.) # # Xiphs JSON is a horrible mysqldump concatenation, not parseable. Thus it's # refurbished on api.io for consumption. Which also provides compressed HTTP # transfers and category slicing. # # Xiph won't be updating the directory for another while. The original feature # request is now further delayed as summer of code project: # ยท https://trac.xiph.org/ticket/1958 # ยท https://wiki.xiph.org/Summer_of_Code_2015#Stream_directory_API # # # streamtuner2 modules from config import conf |
︙ | ︙ | |||
39 40 41 42 43 44 45 | class xiph (ChannelPlugin): # desc api = "streamtuner2" module = "xiph" title = "Xiph.org" homepage = "http://dir.xiph.org/" | | | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | class xiph (ChannelPlugin): # desc api = "streamtuner2" module = "xiph" title = "Xiph.org" homepage = "http://dir.xiph.org/" #xml_url = "http://dir.xiph.org/yp.xml" json_url = "http://api.include-once.org/xiph/cache.php" listformat = "url/http" config = [ {"name":"xiph_min_bitrate", "value":64, "type":"int", "description":"minimum bitrate, filter anything below", "category":"filter"} ] has_search = True |
︙ | ︙ |