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

⌈⌋ ⎇ branch:  streamtuner2


Timeline

113 check-ins using file help/action_recording.page version f19b531796

2015-04-24
19:20
Prepare bookmarks-category DND as target (for internal stream moving). Fix FILE_NAME being passed as text not uris XSelection type. Use underscores in place of spaces to avoid urlencoding file:// references. Move log.DND colorization to config. check-in: 1569b57c42 user: mario tags: trunk
05:01
Add .desktop and .url to export format file extensions probing and SaveAs dialog. check-in: a35c889740 user: mario tags: trunk
05:00
Split plugin configuration into channels and [features] tabs. check-in: bd411967bc user: mario tags: trunk
04:59
Disable update_streams_partially_done() for Gtk3, as that's the main cause of memory corruption (despite being run in idle loop). check-in: 1edde401ce user: mario tags: trunk
00:00
Add conf.nothreads flag and --nt cmdline flag, to prevent Gtk3 idle update race conditions if need be. (Still flaky for initial startups.) check-in: ce0e9149db user: mario tags: trunk
2015-04-23
19:31
Use distinct /tmp/streamtuner2/ directory for temporary pls/m3u/xspf files (also for DND). And have action. module reuse them, based on numeric row{} hash. check-in: 7411543862 user: mario tags: trunk
19:04
Some more comments and log messages. check-in: 79ef6e5f2a user: mario tags: trunk
19:04
Add uikit.tree() instantiation for bookmarks tab. check-in: dbfe218f76 user: mario tags: trunk
19:03
Draw gtk_cat columns on initialiation in .gui() call. Use more literal uikit.do() invocations without lambda: wrapping. Let display_categories only run in uikit.do/idle, whereas .load() is run directly from there now. check-in: f1a357a60d user: mario tags: trunk
18:58
Statusbar updates via uikit.do, immediate=True. check-in: 7aa0ce2a25 user: mario tags: trunk
18:57
Make uikit.do() manage a task spool itself. Run new tasks immediately if invoked already within gtk_idle callback. Move uikit.tree column creation into separate function, for immediate use through GenericChannel.gui() - instead of destroying+repopulating it on category-list reloads. check-in: 7f51022370 user: mario tags: trunk
01:09
Remove some print statements, and switch to log.FUNC where necessary. check-in: ecc88e5d3e user: mario tags: trunk
01:08
Add TreePath() abstractions for app_state/restore. check-in: 655dd9f19c user: mario tags: trunk
2015-04-22
21:17
Update online manual to current help page set. check-in: 2b95379373 user: mario tags: trunk
21:16
Add some notes about DND to the manual. check-in: faacd9c284 user: mario tags: trunk
20:52
Fix .desktop file exporting. Add mime_guess() for streaming url. Move insert_rows() implementation out of DND module. check-in: 749715cb39 user: mario tags: trunk
20:50
Move DND insert_rows() into GenericChannel. Add load(y=) parameter to scroll back to previous position after insert_rows(). Reenable select_path("0") after reloading category list. (Fixes initial startup.) check-in: a5893e591c user: mario tags: trunk
20:49
Let bookmarks channel use generic.load() to reapply scroll position y= after inserts. check-in: a6ba97bce0 user: mario tags: trunk
2015-04-21
22:07
Remove old .ico workaround, as PIL2(Pillow) now integrates support. Leave the remaining code in shambles, and with excessive logging. Still needs a huge rewrite to optionalize Google reliance again. (The manual favicon fetching never worked, because the regexp is too crude for most sites; and URL joining is off too.) check-in: 743c60ff80 user: mario tags: trunk
22:05
Playlist DND import and conversion has been greatly simplified. (To the detriment of the action module now becoming more complex.) check-in: 705c7d16c2 user: mario tags: trunk
22:04
Major rewrite of playlist_extract handler. Now retains url and titles for playlist types that contain it. Still provides simpler urls() wrapper for old action.play/convert/interpol usage. Move probe_* functions into playlist_extract class as well. Introduce basic playlist_fmt_prio list for supported formats. (Too many regexps to probe for allowed file extensions, etc.) Add support for .url and .desktop files (import only.) check-in: f18b5c461f user: mario tags: trunk
22:01
Alias urllib*.unquote as urldecode() check-in: bd2ee4de96 user: mario tags: trunk
22:00
Fix missing .module property for add_plugin_defaults. check-in: 266321da13 user: mario tags: trunk
06:05
Replace old __print__/dbg.XYZ references with new log.XYZ() wrapper. check-in: ebae9e51ac user: mario tags: trunk
2015-04-20
23:19
Fix explanation on why iCast fetching takes a little while for some categories. check-in: de5d9ad092 user: mario tags: trunk
23:18
Shorten "Ogg Vorbis 112kbit/s" option name (was expanding the general settings dialog too much). check-in: 8759215e26 user: mario tags: trunk
23:18
Add overly crude playlist_convert.title() extraction (for M3U/PLS/XSPF/ASX and the custom STRING/TEXT format used by DND module). Insert imported rows at the right position. Scrolling won't work, because it's done in a separate thread. check-in: 6dfe1fdeb5 user: mario tags: trunk
16:24
Move playlist extension and context probing into separate functions. Introduce some rather crude import functionality for a few playlist file formats. (Still requires proper importer with title= reading, and entirely rows[] based function signatures in action module.) check-in: 8e3b1e4d5b user: mario tags: trunk
16:22
Introduce log.ERR() etc. instead of __print__(dbg.XY...) workaround (was meant for Py3 only). check-in: 256b1e5833 user: mario tags: trunk
16:21
Remove some obsolete comments/code snippets. check-in: dd605f1352 user: mario tags: trunk
2015-04-19
22:17
Implement in-application row copying per JSON (info=51, mime=json/vnd.streamtuner2.station). Fixed set_text() bug by using set("STRING",..) atom instead. check-in: 38812e4bbf user: mario tags: trunk
19:35
Experiment with a few more target types. Works with a few text editors on STRING. Most just want a uri-list, but can't handle it. check-in: e0e28edba2 user: mario tags: trunk
19:35
Add plugin defaults. check-in: 6a17061df0 user: mario tags: trunk
16:36
Implement basic exporting and conversion for drag-and-drop. Needs to buffer implicit playlist file, because data_get() gets called excessively. Still support direct M3U/PLS/XSPF transfers (should any other application ever understand it), and direct URL transmission. No import functionality yet, but internal JSON format prepared as target type. check-in: 8c7de37e5e user: mario tags: trunk
16:33
Semi-fix for brand-new initialization. Set default category from existing categories[] list. Setting the displayed path as well doesn't work yet. (It's just half-way selected after the next restart.) check-in: 1cfacd1296 user: mario tags: trunk
16:31
Bring back .base_url instead of .homepage property for HTTP requests. check-in: c6416a18df user: mario tags: trunk
16:31
Simplify uikit.do() callback for GUI updates from within threads. Search plugin led to a memory corruption due to not using it for updates. check-in: aa264c28e2 user: mario tags: trunk
2015-04-18
20:41
Add [feeds] support for Jamendo. (Pretty much only albums, so track lookup works.) Better support for configured audio format/mime. Ogg Vorbis now works in albums and playlists. check-in: 90b1672010 user: mario tags: trunk
20:39
Fix homepage url issue / quote() checks for list first now. Restructure playlist extraction into ordered dict; use in conver_playlist as probe formats. Make xml/json url decoding explicit, prepare for custom extractors (e.g. real json or xml traversal, full row/title extraction). check-in: 58d2981ca9 user: mario tags: trunk
20:37
Guard appstate_init channels.current setting for absent plugins. check-in: 24fb9b895e user: mario tags: trunk
17:19
Updated Jamendo plugin audioformat and listformat descriptors. Attempted to use v3.0 API for playlist tracks. Still no playlist API endpoint. So using a separate track requests now. Implemented a new action/playlist_convert URL extractor, which shall henceforth be known as "jamj" (JamJibberish). Fixed XML url extraction in regex mode, trivial backslash deescaping for JSON formats; and fixed multiply URL bug by copying row{} dict during conversion. check-in: 7149d92fe1 user: mario tags: trunk
17:16
Removed dnd code snippets. check-in: 1e268b6422 user: mario tags: trunk
17:15
Experimental drag and drop code snippets. (Not going to work well with other apps, only VLC tested, everything else depends on text/uri-list temp file:// URLs. Internal row dragging not implemented / no bookmarks subcats yet.) check-in: 185e42f185 user: mario tags: trunk
2015-04-17
22:15
Move PYZ shebang prefixing into `xpm` codebase. Simplifies local Makefile. Renamed PKG_PYZ into PKG_ZIP, and added extra target rules to Packfile. check-in: 9b93393d5e user: mario tags: trunk
21:14
Remove remnant module .title/etc attributes, and .current category overwriting. check-in: a7b0cd39a2 user: mario tags: trunk
21:13
Make .current a dynamic property for debugging. Skip load() update for category==None calls (doesn't happen with previous appstate). Undo default category setting. Now main.appstate_init values are used again. Don't position category liststore selection to #0. Enable "Format" station column. check-in: 99ee6c4ef4 user: mario tags: trunk
21:09
Simplify appliation state restore. Don't override old .shown status / liststore position should be handled by GenericChannel. Suppress TreeView errors when clicking on empty station list area. check-in: 2687258c8c user: mario tags: trunk
21:07
Tested fixed-width for pixbuf cellrenderer in stream lists; little effect. Set .module attribute for auxiliary windows (unused). check-in: b434d63e4e user: mario tags: trunk
21:06
Mark PIL workaround as obsolete. check-in: ee9da14a46 user: mario tags: trunk
2015-04-15
20:58
Run channel.first_show() on tab switches in a separate thread. This makes ST2 *look* snappy after initialization, and for the very first startup in particular. (Seems to work stable after all, even uncovers the HTTP statusbar updates now.) check-in: 56c215a897 user: mario tags: trunk
18:31
Move preprocessing from Makefile to Packfile, just runs on channels/search.py instead of all *.py files now. check-in: 9e4b52a0f5 user: mario tags: trunk
2015-04-14
17:03
Not implemented: `8tracks` (plugin name suffers from identifier mismatch, and it's not quite doable in ST2, because 8tracks requires feedback shortly after playback has begun; yet streamtuner can't inspect any configured audio player for actually doing so.) check-in: 327d2ed94c user: mario tags: trunk
16:57
Add old Compound★ example plugin, slightly updated for current meta data scheme. check-in: a4cb6da4ac user: mario tags: trunk
16:43
Old helper script to make streamripper add genre. Though there are `-D` pattern options that often work better. And KStreamripper or fIcy/fPls might be more modern. check-in: 39e61e9915 user: mario tags: trunk
16:39
Remove ancient dependency. (Whole favicon module needs refurbishment though. Might be feasible to turn it into a plugin meanwhile.) check-in: 6569edc420 user: mario tags: trunk
16:36
Last tagged release (2.1.6) check-in: baed88d243 user: mario tags: trunk
15:47
Move NEWS->changelog.gz conversion into xpm Packfile. check-in: b1eb48cafd user: mario tags: trunk
2015-04-13
00:32
Remove default %m3u placeholders. (Now defaulting to PLS, as supported by pretty much all players.) check-in: 3dd41a0668 user: mario tags: trunk, 2.1.6
2015-04-12
18:02
Optional plugin, retrieves raw Wiki content from Wiki.UbuntuUsers.de with country-grouped radio stations. (Will be bundled in another release.) check-in: 0f7bc40c16 user: mario tags: trunk
16:40
Prepare next beta release 2.1.6 check-in: ace13f842d user: mario tags: trunk
16:39
Fix NoneType concatenation (empty genre: entries) in cache search. check-in: 0116b55e34 user: mario tags: trunk
15:35
Add easter egg in search_dialog only for PYZ package. (Now Makefile targets require preprocess.py though). Resize GtkBuilder definition for search_dialog. check-in: 5ab206cedc user: mario tags: trunk
15:32
Fix default bitrates in static SomaFM stream list. check-in: c41b729685 user: mario tags: trunk
00:48
SomaFM.com channel plugin, with entirely static station list. check-in: 6a5133781f user: mario tags: trunk
2015-04-11
19:14
Cleanup exportcat file extension mapping, and fix docs. check-in: 2b729c9433 user: mario tags: trunk
19:14
Manually implement $XDG_MUSIC_DIR lookup. check-in: b3afb7ed76 user: mario tags: trunk
16:09
Safeguard get_data for plugin_meta(), as global or local extras would be found by module_list, but not get_data(). check-in: d781433c78 user: mario tags: trunk
16:09
Give up. Just use embedded PNG for transparent empty_pixbif. check-in: c4adfede4a user: mario tags: trunk
16:08
Fix bookmarks tab swtich on search completion. check-in: 98f8aea21d user: mario tags: trunk
14:12
Shorten first_show(). Plugins don't initialize on startup anymore, but again on first channel tab selection. Use first entry from categories as current, if none is set. Remove some obsolete code. Display now matches on fresh installations as well as with existing cache/state. check-in: e663445700 user: mario tags: trunk
14:10
Slim down first_show() in main.channel_switch(). check-in: 97a832d8f2 user: mario tags: trunk
14:06
Fix case-sensitive PLS construction and File\d+ index starting from 1. Adapt format detection regexps as well for html, and xspf xmlns. check-in: 3301815009 user: mario tags: trunk
01:20
Initialize with empty station TreeView again. Make bookmarks channel not override the behaviour. (This sort of works around the .current category mismatch after startup.) check-in: 6109a1a671 user: mario tags: trunk
2015-04-10
17:36
Move appstate restoration into init function. Implemented "quit" hook for action.cleanup_tmp_files, fixed app_restore `w.set_current_page` bug. check-in: 8622bed197 user: mario tags: trunk
17:35
Rewritten action module and playlist conversion/export works okay enough. Merged into trunk. check-in: 60f5238dc8 user: mario tags: trunk
17:34
Fix str→bytes saving for Py3. Tmplement tmp_files[] cleanup. Leaf check-in: 36c234a70b user: mario tags: action-mapfmts
16:40
Finalize allowed filename extensions for exporting. Normalize Python3 string decoding (errors='ignore' per default). Update XSPF and SMIL export. Use row={} template now, instead of just carrying over title= to rewritten playlists. check-in: e136a78c73 user: mario tags: action-mapfmts
13:50
Implement filename update in SaveAs dialog on changing FileFilter (.m3u, .pls, .xspf) extension. check-in: 0a9cb60b3a user: mario tags: action-mapfmts
11:56
Apply proper file extension to temp files (they're never cleaned up, are they?) Fix MIME type probing, strip attributes. Support Apple M3U minor type, detect GVP playlists. check-in: 59075dcc1b user: mario tags: action-mapfmts
11:55
SurfMusik actually holds .m3u playlists. check-in: 46062ce00f user: mario tags: action-mapfmts
10:54
Sync with trunk changes. check-in: 801ad7fd98 user: mario tags: action-mapfmts
10:51
Fix parent window references. check-in: a61a746c31 user: mario tags: trunk
10:50
Removed custom pls conversion code, now uses action. playlist conversion tools. check-in: c683b52003 user: mario tags: trunk
10:49
Move concrete row(), rowno(), selected(), model_iter() and play(), record() implementations from main into channels.GenericModule. check-in: 65a0b18268 user: mario tags: trunk
10:45
Update comment on rewritten action module. Add alternative MIME types for m3u and asx, spport asf detection and extraction. Fix listformat→source arg. Move save() and filename handling out of save_playlist. Fix mediafmt_t lookup and print warning when there's an audio-response on playlist fetching (and it does happen). Change myoggradio plugin "format" population, and set listformat to "mixed(..)" for automatic probing. check-in: 223368ebbf user: mario tags: action-mapfmts
02:36
Fixed ASX and SMIL playlist exporting, allowed new placeholders %xspf, %jspf, %asx, %smil for application configuration. Documented in help/ pages. check-in: 1937c5766b user: mario tags: action-mapfmts
2015-04-09
21:58
Python3 doesn't like `if [x = ...]` inline assignment trickery (kwargs out of scope). check-in: 82cf514e49 user: mario tags: action-mapfmts
21:57
Figured out how to use standard confirm-overwrite dialog (buttons were defined, but no actions associated). Removed custom msg box. check-in: 5539fcccc2 user: mario tags: action-mapfmts
14:52
Update notes on python-requests >= 2.0.0 required now (streams=True). And fix reference to `icon.png` now. check-in: 45c45d5755 user: mario tags: trunk
14:50
Still some parameter renaming in action module to do. Optional support for row={} parameter in play/record calls, in case .pls/.m3u needs to be constructed (to retain title=). Adapt action playlist exporting to wrapper object, which preconverts plain URL lists or [rows] list, can itself call convert_playlist(), and optionalized file writing. Rewrite main save() and exportcat.save() to utilize new save_playlist(). Implement overwrite confirmation for Save-as dialog. check-in: b784d408c1 user: mario tags: action-mapfmts
02:51
Use ordered list for playlist content probing. Fix listfmt() mime to abbr conversion. Allow non-http URLs for raw() extraction. check-in: babd818a96 user: mario tags: action-mapfmts
2015-04-08
23:32
Consolidate listformat types to just "pls", "m3u" and "srv". Probe for direct ICY server contact in action.playlist_convert(), unify extraction methods. check-in: 85313637a3 user: mario tags: action-mapfmts
17:59
Remove extraneous class wrapper action.action. Start to regroup listformat mapping (pls-url → m3u-fn rewrites). Will need some heuristics, as depending just on the channel.listformat assumption won't work in practice (some .pls servers actually host direct server links, or occasionally .m3u references even). Currently does nothing, just returns the pls/etc URL. check-in: ea628d6426 user: mario tags: trunk
17:57
Create new branch named "action-mapfmts" check-in: 320e271864 user: mario tags: action-mapfmts
2015-04-07
22:19
Added some notes about "Export all" plugin. List streams#actions as topic in index.page check-in: 97bb4bbfe9 user: mario tags: trunk
19:49
Split up Extensions› submenus. Register major plugins (timer, myoggradio, radiotray) as direct menu entries, but complex extensions (exportcat) as subentry still. check-in: a872fb7d36 user: mario tags: trunk
19:48
Fix main. references from bookmarks callback. check-in: 5a772b3c64 user: mario tags: trunk
19:48
Got rid of switchy() expression, use plain `cond and val or ...` chain. check-in: 30dd0c5b1f user: mario tags: trunk
05:55
Temporary export mechanism (saves whole category into .pls file). check-in: 8b7b270591 user: mario tags: trunk
05:54
Less indentation, starting to overhaul action.save() at least. (Whole `action` module is overdue.) check-in: 7726e18571 user: mario tags: trunk
05:53
Fix a few CLI bugs (doesn't work yet with dynamic module list), stub_parent() implementations for non-GUI mode should be merged. check-in: a7c3f7336a user: mario tags: trunk
05:51
Move argv initialization to conf.apply_args(). Document config: format for argparse conversion. Enable file=sys.stderr for __print__/debug messages. check-in: 1eea3140f8 user: mario tags: trunk
2015-04-06
18:55
Add workaround for ArgumentParser, which tries to map config: descriptors onto AP.add_argument(*yikes) params. check-in: 24a5fe69a1 user: mario tags: trunk
18:53
Add UserAgentSwitcher plugin. (Just for experimenting really, not required.) check-in: e8c162f72a user: mario tags: trunk
2015-04-05
22:06
Fix manual Makefile `install` rules. Update -D debug notes in README. Release as 2.1.5 (beta). check-in: b6b64a45f6 user: mario tags: trunk, 2.1.5
22:04
Provide a `-D` debugging flag and a `-d shoutcast` option to disable plugins prior startup. check-in: 08b1306823 user: mario tags: trunk
20:27
Recategorized some dbg.ERR messages, but make them displayed now regardless of conf.debug setting. check-in: 2b63a42675 user: mario tags: trunk
18:24
Make Youtube channel also default. check-in: 333ed92349 user: mario tags: trunk
18:24
Switch .meta.title attribute after UI initialization. check-in: 86cac0312e user: mario tags: trunk
18:23
Fix `local` category base url, again. Make priority: default. check-in: 76b83cd1e1 user: mario tags: trunk
18:23
Change version number in plugin settings from orange to gray. check-in: 0a4c981f66 user: mario tags: trunk
18:22
File reading in plugin_meta(): convert Py3 bytes to string. check-in: bb7e73cafb user: mario tags: trunk
16:15
Fixed some help page typos, added streamedit description, and some screenshots for the configuration window. check-in: ec3a49e365 user: mario tags: trunk