Revisions of streamtuner2

Eric Schirra's avatar Eric Schirra (ecsos) accepted request 1150769 from Eric Schirra's avatar Eric Schirra (ecsos) (revision 4)
- Adjustments patch macro for rpm 4.20.
- Update to 2.2.2
  * Fix radiobrowser, radiolist, jamendo, housemixes, filtermusic,
    radio.net and rcast plugins. 
  * Introduce peertube, deprecate youtube channel.
  * Elevate liveradio.ie channel as default.
  * Removed support for services that went offline: Tuner2, Dirble,
    Listenlive, Delicast, Streamlicensing.
  * Don't enable MyOggRadio channel per default for now.
  * Refine dual-dependencies on python2 3.
  * Minor changes to plugin processing and config syntax.
  * Reintroduce normal_bg='' und gtk warnings for dark themes.
  * Better CLI and HTTP error responses, better User-Agent string.
  * Minor doc updates, update or remove stale links.
  * Updates to recordflags frontend.
  * Add channel icon above title/link in toolbar.
  * Updates to Xiph for support of new BETA directory.
  * Utilize XDG_CACHE_HOME/.cache storage now.
  * Remove 0install support.
  * Support snap instead.
Eric Schirra's avatar Eric Schirra (ecsos) accepted request 662327 from Eric Schirra's avatar Eric Schirra (ecsos) (revision 3)
- update to 2.2.1
 * Fix missing import for find_executable fallback.
 * Fixed shoutcast base url, and added format option.
 * Updates to extraction for radiolist.net, delicast, streema.
 * Optional bookmark subcategories.
 * Radiotray-NG support.
 * Optional toolbar button for search dialog.
 * Added plugin to highlight Vorbis and Opus streams.
 * New recordflags plugin with additional command options.
 * Support for internal calls in specbuttons.
 * Disable man page compression.
 * New st2subprocess plugin for alternative player invocation 
   schemes (mostly Windows).
 * UI changes for player/application configuration and feature 
   settings, colorization and icons in main statusbar.
 * More streamlined heuristic for URL and format guessing.
 * Logging and broader plugin dependency checking.
 * Minor text fixes.
 * Windows fixes related to paths and encoding.
 
- update to 2.2.0
 * Adds new plugins for RCast, Streema, vTuner2, Liveradio.ie, 
   RadioSure, house-mixes, and Reciva.
 * Feature extensions include the Cache Reset, Config 
   import/export, Gtk theme setting and installer, and Specbuttons 
   for custom shortcuts, and script stations.
 * Live365, di.fm and WindowsMediaGuide are gone.
 * Marks the first release with thorough Windows support, and comes 
   with a Python+Gtk post-installer and additional tools for the 
   SFX archive. Comes with a CHM manual version instead.
 * Many typos and stale infos in the manual have been remedied, 
   more details on contrib plugins and station status icons 
   (reddit, dirble, etc), and stream $placeholders have been 
   documented.
 * Internet-Radio now supports the search, its DOM extraction was 
   updated.
 * Other fixes encompass the file browser, MODarchive categories,
   Radio-Browser submit function, Radionomy icon sizes, ...
 * Reddit and Record-stop are now distributed plugins.
 * Channels can easier hook new content types and extractors in the 
   action module, the .QTL export format was added, better 
   cross-platform quoting and a multi-URL workaround added.
 * Better channel refresh indication, and colorized status bar.
 * Plugin management has been extended, and a few fixes and option
   safeguards applied, support for table/dict settings.
 * Other internal changes include plugin init2() callbacks, 
   a secret `conf.cmd` option, "rt" open flag fixes, new unichr() 
   alias, a cmd= flag for run_fmt_url()
- update to 2.1.9
 * Update html manual.
 * Allow api: to be "python" or "streamtuner2"
 * Disable window tilte updating per default again.
 * Fix row[`url`] reference.
 * Update for new action.play() signature,
   scale down banner images.
 * Fix action.browser() to use only row{}, not pass url= argument.
   Native JAMJSON extractor now tests for ["tracks"] or uses plain ["results"] list.
 * Fix simplified regex to stop before }}} for URL extraction.
 * Fix unqualified icon_dir reference.
 * Add missing quotes for streamripper default option.
 * Remove url= attribute in main entry points in favour of row{}
 * Undo {expand:False} attribute for CellRendererPixbuf
 * Overwrite row["format"] after updating entry.
 * Fix audioformat to audio/mpeg.
 * Introduce action.handler{} callbacks to convert custom streaming URL
   types such as "audio/soundcloud". Unify backend code for .play/record/browser()
   calls.
   Reddit module just splits out domain name now, then checks for walledgarden
   links (filter option renamed).
   Introduce url_soundcloud plugin in favour of `soundcli` cmdline client setting.
 * Move channel.save() after column updating.
 * Lighter highlight color: for plugin options.
 * Introduce channel.fixed_size=[24,24] to constrain favicon CellRendererPixbuf.
   Works in conjunction to .img_resize= attribute for favicon/img converter.
   Set expand:False in default datamap[] for favicon cell.
 * Check for string length (.q) before starting cache/server search.
   Wrap channel+cat switching in ukit.do().
 * Add a "keep all" web links option.
 * Fix swapped boolean and integer options in set_plugin_defaults()
 * Support custom audio handlers for soundcloud etc.
   Example plugin to register them (only `soundcli` so far).
 * Simplify favicon callbacks, use channel= instead of artifical pixstore=
   tuple. update_rows() itself extracts liststore and indicies now.
   Introduce `img_resize` channel option for `img` banner rescaling in favicon
   module.
 * Fix `id` reference in dependency resolver.
 * Add more subreddits to category list. Placeholder groups with "→" decorator.
   Allow web-only links per config option (start web browser for sptfy/sndcl etc.)
 * Catch http/json result errors earlier. Break on absent "after" id.
 * Support config option boolean aliases (1, true, yes, on).
 * Use gtk-info/-error/-no for placeholder entries.
 * Channel plugin for <b style=color:red>reddit /r/*music*</b> categories.
   Just filters out Youtube or direct MP3/Ogg links at the moment.
 * Remove config.find_in_dirs(), which is unused now.
 * Make quicksearch icon activatable again (property "secondary-icon-activatable" was required).
 * Minor help page updates.
 * Fetch all 5 available pages from Xiph directory. Rewrite to use more
   directed regex extraction mode.
   Minor help page updates.
 * A bit more PEP8, without undoing all readability.
 * Allow Exif-wrapped JPEGs as well (not just JFIF regexp check).
   Comment on merging row["favourite"] merge via prepare_filters list.
 * Delay window title updating logic and ui_cht callback via uikit.do() wrapper.
   Seems to fix both:
    - Gdk:ERROR:/build/buildd/gtk+2.0-2.24.23/gdk/gdkregion-generic.c:1114:miUnionNonO: assertion failed: (r->x1 &lt; r->x2)
    - Error in `python': double free or corruption (fasttop): 0x0.....
 * Typecast str() for bookmarks.is_in() url lookups → redundant.
   (Prepare for merging columns-update hook.)
 * Strip double .png/.jpeg extension from cached `img` icons.
 * Remove _=time from streaminfo json urls.
 * Minor simplifications in manual, remove iCast page.
 * Adapt config options (color, and type: int)
 * Remove stray `print` statement
 * Typecast plugin options on initialization.
   Use SpinButton for `int` options instead of text label.
 * Introduce new hooks["switch"] for update_title().
   Used by new `Channel homepage link` plugin, which brings back
   streamtuner1-style service homepage.
 * Add toolbar placeholder for channel-link.
   Change conf.max_streams to SpinButton.
 * Minor comment updates, version bumps.
 * Remove ahttp aliases, print warning for "raw" extractor fallback,
   add some comment headlines for better overview.
 * Get rid of StringIO wrapper for json loading.
 * Add WinAmp user agent.
 * Fix python dependency, and embed PYTHONPATH in 0-requests feed.
 * New channel plugin for <b style=color:red>radio.net</b> station directory.
 * Remove channel_itunes manual page.
 * Use new autosave flag for DND.
 * Simplify windowsmedia regexp. Omit bitrate=32, because `filter_bitrate`
   makes it appear empty per default then.
 * Use shorter domain names for homepage favicons again.
 * Update Dirble comments.
 * Weighted selection of available stream urls from Dirble API.
 * Add ahttp.fix_url() for dirble `website` addresses.
 * `timedout` and `description` are seemingly gone from the API responses.
 * Add `filter_bitrate` to default pack: list.
 * Add 0install requests dependency.
 * Add 2.1.8-dev as 0install option; depend on Py 2.7 for now.
 * Update 0install descriptor to use command/runner with virtual python package.
 * Update manual regarding new favicon plugin and its options.
 * Set dest= and main=
 * Try &lt;file&gt; instead of &lt;archive&gt;
 * ./.
 * Update with signature
 * Add option to inhibit window title adaption ("Streamtuner2 - Channelname"),
   mostly just for filling up the "Display" config section again.
 * Add 0install pkg description wrapper for testing.
 * Remove a few options from configuration dialog;
   now available in [feature] plugin tabs for favicon module.
   Favicon module exposes google_station_homepage, and retrieval methods,
   but no longer `conf.show_favicons` (which is decided on just by having
   the plugin enabled - or not.)
   Introduce conf.auto_save_stations for favicon/DND plugin.
 * Default to encoding=utf-8 for jamendo API.
 * Add feature plugin icon.
 * Resize logo together with toolbar buttons.
 * Make favicon redisplay work after google_find_homepage() and existing
   icons in cache.
   Shorter timeout/display for status label for google search.
 * Move mime_fmt() into regular function.
   Fix live365 ahttp feedback= bug.
   Regroup functions and update a few comments in channels/__init__
 * Add default filters only once in GenericChannel.__init__
   Allow preprocess_filter callbacks access to current channel object.
   (Used by filter_bitrate to recognize .audioformat if row[format] is absent.)
 * Add plugin defaults (for newly added options, but previously active modules)
   in any case when starting with -D flag.
   Save settings.json in json.dumps(sort_keys=True) mode.
 * Add generic bitrate filter plugin, move functionality out of xiph channel.
 * Remove plugin #color:
 * Use GenericChannel.prepare_filters hook to update "favicon" filenames in rows.
   Precompile row_to_fn regexps.
   Fix google_find_homepage params (just a function, not a method).
 * Split up post-proccessing filters (run after load/update_streams), use
   filter callback list now.
   Separate prepare display filters as well (so to hook dedicated favicon
   callback into).
   Move conf.show_favicons option into uikit.columns() signature.
 * Break out _on_reload thread callback.
 * Remove _ prefix from ls, rowmap, pix_entry, as features/search was already
   depending on literal rowmap.
 * Change pluginconf lookups. Use only pkg basenames for configuration,
   but override channels.__path__ directly in module.
   Thus pluginconf can convert `plugin_base` into path list for module_list()
   scanning.
 * Switch dirble plugin to predeclare encoding="utf-8" for speed.
 * Disable iTunes plugin, no alternative resource.
 * Fix URL patching (after actually testing it).
   And provide fallback for image resizing (.thumbnail in PIL 2.3.0 is broken).
 * Move internal commentary out of plugin description block.
   Try/Catch processing failures in update_rows() loop.
   Use quieter=1 option for image downloads.
   Reimplement custom base_url+href favicon patching.
 * Add ahttp.get( quieter= ) option for less log.HTTP notices.
 * Work atop Python3 by using io.BytesIO rather than compat2and3 module.
 * Move `favicon` module into extension/feature plugin.
   Simplify row["favicon"] cache filename pregeneration; separate from favicon
   module (but basically duplicated code there).
   Refactor most internal favicon+banner processing, rename methods for clarity.
   Plugin registers itself as .hooks["play"] callback.
   Uses main.thread() now instead of custom variant.
   Create icon cache dir on initialiation rather.
   Use combined row_to_fn() for cache filename generation instead of domain(),
   url(), file(), etc.
   Previous banner downloads are ignored, because the filename normalization is
   more in line with domain favicons now.
   Only update pixstore on successful downloads.
   Pre-check the content type per binary regex now, before saving image files.
   Combine resizing into store_image() function as well.
   Even PNG files will be piped through PIL (for sanitization).
   Completely got rid of urllib usage.
   Homepage/HTML extraction got rewritten, simpler, still inexact; but works
   now for most webpages. Favicon homepage downloading checks both returned
   MIME type and actual file content prior saving. Shorten timeouts to 2-3
   seconds for Google and custom favicon retrieval.
 * Create stub plugins/__init__.py in any case.
 * Make AHTTP timeout= configurable.
 * Fix super slow requests download for Xiph YP.XML, due to automatic charset
   detected in requests.text access. Override encoding= now and manually
   .decode() known "utf-8" charset.
 * Implement favicon live updating. Play event and download_all now pass the
   treestore, with row index, and pix_entry number (column index in liststore).
   Favicon module checks for downloaded images twice now, and updates PixBuf
   in ListStore. (Works for both single station view, and download_all.)
 * Prepare for more complex hooks["play"] invocation (ignore args, kwargs).
 * Use custom GenericChannel.columns() wrapper to simplify passing TreeView
   widget and keeping returned liststore/rowmap/pix_entry.
 * Minor typo fixes.
 * Return ListStore, rowmap and pix_entry from uikit.columns()
 * Crash in search module again. Seemingly fixed it for threaded mode by preupdating
   the bookmarks.streams{search} result store before switching tabs.
 * Fix srver url extraction prior sending to myoggradio API.
 * Lock WindowsMediaGuide plugin against >2.1.8
 * Step-tutorial for bookmarking a station.
 * Explain in detail how to enable pluginmanager2 extension.
 * Additional project+help links for manual.
 * Make static category lists more readable.
 * Remove unsupported view-source: URL prefix, rewrite links from /cat/ to
   /doc/tip/ for downloading/plain view instead of text/html browsing.
 * Fix UTF-8 text decoding for CSV after downloading as binary.
 * Add description: line.
 * Add windows media guide radio lists (ASX). Fixed action module to extract
   with case-insensitve matches for that playlist format. (It's not really
   XML after all.)
 * Another radio station directory: listenlive.eu
 * Compressed GLRP csv playlist.
 * Add preliminary Magnatune contrib plugin. (Radio playlists are currently
   broken. Only small album list is fetched.)
 * Add yelp &lt;note&gt; icons.
 * Update config option references for channel pages.
 * Converted help images to more grayscale/indexed variants to reduce filesize.
 * Use fallback title= for mkrow() importing.
 * Fix urlencode references to urllib.quote.
 * Add favicon and description.
 * Fix JSON serialization.
 * Add trivial di.fm/sky.fm radio list fetcher.
 * Enable glrp.csv download from repo.
 * Remove default ["empty",] category.
- update to 2.1.8
 * Fix some print and log statements.
 * Use Gtk3/gdk.Color.parse() as fallback to .get_colormap(), get rid of style
   copying (was only necessary with the previous theming support IIRC).
 * Inline copy&paste HTML entity definitions, because they seemingly were also
   sacrificed at the Python 3 altar.
 * Fix region_id default to enable v3 mostPopular query (YT stumbled over "UK").
 * Filter `None` from extracted URLs.
   Fix save_playlist.export; copy.copy each row before overwriting/filling url.
   Implement specific `jamj` extractor (regex stumbled over playlist title).
 * Add .save() after reading in CSV list.
 * Add playlist importer channel for GLRP.
 * Updated channel documentation with links.
 * Moved `file` and `punkcast` into contrib/ group.
 * ./.
 * Add -B and -3 options to `make run`
 * Add icon for file browser.
 * Fix some typos.
 * Add omitted HTML pages. (*.html is in the fossil `ignore-glob`, so they get
   skipped for github-skin statistics bar.)
 * Update documentation and notes for new channel/feature plugins.
 * Readd plugin_base paths in addition to module basenames,
   otherwise pluginconf.get_data won't find plugins/* either in the
   module_list() or per get_data() - one uses paths, the other pkg names.
 * Simplify core plugin dependency lookups.
 * Support direct URLs in DND import (only used as literal url=, brings up
   streamedit window afterwards).
 * Fix missing channel key error. Add icon.
 * Stub placeholder version: as `0`
 * Rewrite some comments.
 * Fix http reference, unneeded.
 * No more API.
 * Moved dependency() into pluginconf module, which shortens adding new
   installable modules to the vbox.
 * Make configwin construction slightly more readable, use new pluginconf functions.
 * Split pluginconf from config module.
 * Use file:// prefix for storing local paths. (Did break DND without "srv" export.)
 * Shorter format option descriptions.
 * Hopefully fix Gtk3 error by wrapping second set_current() call in uikit.do
 * Add some version: bumps and add a few versions to depends: references.
 * Perform basic version dependency checks before displaying downloadable plugins.
 * Disable iCast plugin for now.
 * Make plugin list prettier. Implement vbox redrawing on [save].
   Activation seems to work okay for channel plugins, and main already
   had enough safeguards to make st2.load_plugin_channels() work as is.
 * Make short help notices for player/recording configuration smaller.
 * Catch invalid image files when creating pixbuf in uikit.columns()
 * Add user plugin manager / download tool.
   Not very well integrated nor pretty.
   Still requires a restart, needs more hooks into config dialog. (Clean up
   previous plugin vboxes after installation. Auto-activation required to
   reimplement init loader. And channels.__path__ setup isn't yet injectable,
   because no plugin `order:` is honored by main/init, and pluginmanager2
   would run too late for overrides.)
 * Detect all command names in player config, so that both `xterm` and
   `streamripper` are probed for existence.
   Use dict comprehension for plugin_meta lookup.
   Remove wrap_entry in favour of generic uikit.wrap().
 * Allow to override encoding= for .text results (requests can't detect it
   automatically for binary/json responses).
 * Support multiple `plugin_base` references (namely "channels" and "plugins").
 * Add .wrap() from configdialog for general use.
 * Remove print statement.
 * Implement "buffy" mode for just keeping Xiphs YP.XML in memory once traversed.
 * Consolidate bitrate filter in main update_streams() method.
   Fix conjoined category strings.
 * Fix server search var reference.
 * Move parole behind vlc in setup alternatives.
 * Support literal references in text/uri-list per "srv" setting.
 * Better plugin comments for user interface.
 * Fix xiph search URL and by_format mapping.
 * Add combined unhtml() utility function for raw page extractors.
 * Clean out unneeded xml module references.
 * Xiph module: reintroduce YP.XML extraction (still exceedingly slow),
   simplify JSON cache API usage (may get retired, incurs a delay of its own),
   and add raw dir.xiph.org website scraping (fastest, and most features).
 * Added default icons to dialog windows, and st2 logo to main window.
   Introduce more keyboard shortcuts (F6 favicons, Alt-F5 category reload,
   etc..)
 * Use shorter entity_decode() call. Strip example content.
 * Allow to add custom statusmsg for lengthier HTTP requests.
 * Move strip_tags(), entity_decode(), and nl() out of class into normal functions.
 * Move strip_tags(), entity_decode(), and nl() out of class into normal functions.
 * New channel plugin for <b style=color:red>Radionomy</b>.
 * Fix `audioformat` property name.
 * Stub category tree building main[] in case of wrapped primary group.
   Add uikit.bg on STATE_ACTIVE, skip existing EventBox widgets.
 * Remove redundant pq and compat2and3 imports.
 * Use new @use_rx decorator to switch and fall back between regex/pyquery modes.
 * Implement custom HTML .entitiy_decode, because SAX didn't honor any HTML;
   and HTMLParser would require customized/compat2and3 imports.
   Colorize channel labels if #color: is specified in any plugins.
   And provide @use_rx decorator to alternate between regex/pyquery extractors.
 * More specific log.HTTP messages (GET vs POST)
 * Prepare row() and play() wrappers. No genre requests yet.
   (Still just a planned channel pugin.)
 * Rename 8tracks module to have a legal Python identifier (rather than the
   globals()/module rename workaround).
 * Tag with priority:never, as it's not meant to be bundled really.
 * Remove contrib/bieber joke example.
 * Separate statusbar timer-reset from text/progressbar setter.
 * Use empty stub {} dict in place of state.json contents on fresh init.
 * Add python2-requests dependency.
 * Test build -t arch Linux package as well.
 * A little more comments on playlist_export usage.
 * Implement state: mapping (though no idea what 0-2 mean),
   and make default API key internally predefined again.
 * Add delicast favicon.
 * Temporarily remove iCast plugin from packaging, but add dirble and filtermusic.
 * Basic channel plugin for delicast.com
 * Manually replace `nbsp;` in entity_decode
 * Make SSL verify= configurable.
 * Fix typos in myoggradio help page.
 * Bring back dirble channel.
 * Update HTML manual with current page set.
 * Add new channel plugin for filtermusic.net,
   which works both per website extraction and from XML map traversal.
   (Again, the HTML→regex grepping seems more reliable.)
 * Statusbar timeout and reset still not as planned.
 * Add new config dialog group for "Playlists".
   Conf setting `playlist_asis` completely skips action.convert_playlist().
   Works for any real m3u/pls/srv server and flexible audio players.
   But obviously breaks Jamendo albums or other JSON playlist sources.
 * No has_search for PRF channel.
 * Applied listformat= testing via action.extract_playlist.probe_ext().
 * iCast currently(?) down. Added JSON/HTTP log.ERR message.
 * Moved artwork (logo/icon) into dev/ folder.
 * Undo itertools.chain(), use plain list appending.
 * Exchanged all "import ahttp as http" for plain `ahttp` module usage.
 * PublicRadioFan directory plugin. (Works ok, but fetching is somewhat slow.)
 * Fix `st2.py` name/location in comment.
 * Support "TV" channel for UbuntuUsers. (Albeit few are still working.)
 * Also scroll to last category after .select_current
   (didn't automatically happen for current notebook.)
 * Removed export_format config option for exportcat plugin (as that's selectable
   now in the file dialog anyway).
   Recategorized dnd plugin to appear earlier in the [features] config tab.
 * Move `state.json` and .current restoration into GenericChannel.gui().
   Current category is reselected by TreeView traversal on instantion now.
   Previous state now load through config.state() for channels/__init__,
   not in main/init_app_state anymore (just row:expand / winsizes now).
   Disable .currentcat() overwriting, redundant now in display_categories().
   Still need to avoid second .select_current() call in first_show().
 * Document command line flags in manual.
 * Reorder target types, to prefer XSPF over PLS and M3U.
   Support .URL exports, keep distinct literal url/direct.
 * Updated category:/type:
 * PodSpider.xml database reader. Untested.
 * TreePath restoration +1 for drag and drop.
 * Readd `default`, and fix forgotten `favicon` import.
 * Fix uikit.do spool appending with len(idle_tasks) instead of -1.
   Unpack window state treepath tuple conversion into 1:2:3 strings.
   
- update to 2.1.7
 * Extended generic JSON extractor, to understand a few common field aliases.
   Add fallbacks for mime_app lookup in case */* is absent.
   Simplified %rowfield injection, which is commonly unused anyway.
 * Uneeded windows desktop shortcut.
 * Disable "Format" column again.
 * Embed base_url for extraction.
 * Missing Exception capture for error log.
 * Fixed gtk.main_iteration() extraneous parameter in gui_startup.
 * Cover most catched exceptions with log messages.
 * More customized log categories/colorization.
 * Add custom pls extractor (for unordered playlist entries), keep regex method
   as fallback. More logging.
 * Replace statusbar with plain gtk.Label,
   use glib.timeout_add for clearing it up implicitly.
 * More examples for recording/streamripper configuration.
 * Add spacing for config dialog options (indented per plugin).
   Narrower labels, icons now show up.
   Undo newline-removal for Gtk3 tooltips (work with preformatted text instead).
 * Fallback for Gtk3 using set_text() now.
   Fix "href" vs "raw" format probing.
 * Add .url exporting (shallow Windows variant of .desktop files).
 * Use generic `audio/mod-zip` for all MOD Archive urls.
 * Document current reuse_m3u and nothreads config behaviour.
   Rewrite placeholder and application help pages to be more understandable.
   Mention GUI alternatives to streamripper.
 * 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.
 * Add .desktop and .url to export format file extensions probing and SaveAs dialog.
 * Split plugin configuration into [channels] and [features] tabs.
 * Disable update_streams_partially_done() for Gtk3, as that's the main cause
   of memory corruption (despite being run in idle loop).
 * Add conf.nothreads flag and --nt cmdline flag, to prevent Gtk3 idle
   update race conditions if need be. (Still flaky for initial startups.)
 * 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.
 * Some more comments and log messages.
 * Add uikit.tree() instantiation for bookmarks tab.
 * 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.
 * Statusbar updates via uikit.do, immediate=True.
 * 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.
 * Remove some print statements, and switch to log.FUNC where necessary.
 * Add TreePath() abstractions for app_state/restore.
 * Update online manual to current help page set.
 * Add some notes about DND to the manual.
 * Fix .desktop file exporting. Add mime_guess() for streaming url.
   Move insert_rows() implementation out of DND module.
 * Move DND insert_rows() into GenericChannel.
   Add load(y=) parameter to scroll back to previous position after insert_rows().
 * Let bookmarks channel use generic.load() to reapply scroll position y= after inserts.
 * 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.)
 * Playlist DND import and conversion has been greatly simplified.
   (To the detriment of the action module now becoming more complex.)
 * 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.)
 * Alias urllib*.unquote as urldecode()
 * Fix missing .module property for add_plugin_defaults.
 * Replace old __print__/dbg.XYZ references with new log.XYZ() wrapper.
 * Fix explanation on why iCast fetching takes a little while for some
   categories.
 * Shorten "Ogg Vorbis 112kbit/s" option name (was expanding the general
   settings dialog too much).
 * 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.
 * 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.)
 * Introduce log.ERR() etc. instead of __print__(dbg.XY...) workaround (was meant for Py3 only).
 * Remove some obsolete comments/code snippets.
 * Implement in-application row copying per JSON (info=51, mime=json/vnd.streamtuner2.station).
   Fixed set_text() bug by using set("STRING",..) atom instead.
 * 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.
 * Add plugin defaults.
 * 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.
 * 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.)
 * Bring back .base_url instead of .homepage property for HTTP requests.
 * Simplify uikit.do() callback for GUI updates from within threads.
   Search plugin led to a memory corruption due to not using it for updates.
 * 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.
 * 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).
 * Guard appstate_init channels.current setting for absent plugins.
 * 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.
 * Removed dnd code snippets.
 * 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.)
 * Move PYZ shebang prefixing into `xpm` codebase.
   Simplifies local Makefile. Renamed PKG_PYZ into PKG_ZIP,
   and added extra target rules to Packfile.
 * Remove remnant module .title/etc attributes, and .current category overwriting.
 * 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.
 * 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.
 * Tested fixed-width for pixbuf cellrenderer in stream lists; little effect.
   Set .module attribute for auxiliary windows (unused).
 * Mark PIL workaround as obsolete.
 * 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.)
 * Move preprocessing from Makefile to Packfile, just runs on channels/search.py
   instead of all *.py files now.
 * 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.)
 * Add old Compound★ example plugin, slightly updated for current meta data scheme.
 * 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.
 * Remove ancient dependency.
   (Whole favicon module needs refurbishment though.
   Might be feasible to turn it into a plugin meanwhile.)
 * Last tagged release (2.1.6)
 * Move NEWS->changelog.gz conversion into xpm Packfile.
 
- add a couple of patches to fix wrong paths and invalid .desktop file
- add python-pyquery to Requires, thanks to Hartmut for reporting
- new upstream version <2.0.8>
  * configuration files use prettified json
  * fixed double quotation for %%pls players and /local/file handling
  * (unused) channel .shutdown function introduced (late saving)
  * external plugin: basic file browser, no ID3 editing yet
  * allow interpolating of %%genre and other fields, streamripper wrapper
  * fixed pyQuery parsing for latest shoutcast change
    (strangely the regular expressions were still working)
- new upstream version <2.0.7>
  * json cache files are now stored .gz compressed
  * xiph channel .format() call fixed into .mime_fmt()
  * simplified __init__ and attributes of main window object
  * .play() is now a per-channel function
  * global_key now accepts multiple keys, updates gtk view
  * new musicgoal plugin with radios and podcasts
  * silenced channel initialization errors
  * double clicking tabs is functioning now (-> channel service homepage)
  * shoutcast finally became a real channel plugin
  * processing.py pseudo module removed
  
- new upstream version <2.0.5>
  * display logic now can extract homepage URLs from station titles
  * automated google search for missing station homepages
  * kept .m3u files are reused for playing (faster)
  * registration code for (stations) extension submenu
  * timer plugin for programming broadcast play/recordings, uses kronos
  * heuristic update of bookmarks when reloading station lists
  * general thread() wrapper function implemented, for worker pool
  * simple mygtk wrapper for adding menu entries
  * MyOggRadio plugin is now complete, can upload individual favourites
  * links plugin, which lists other radio directories in bookmarks tab
  * CLI mode implemented
  * two PHP wrapper scripts to generate YP.Shoutcast for Streamtuner1
  * GUI startup progress window added
  * one GtkWarning message fixed
  * the Shoutcast channel was plugin-ed out, but remains in the UI file
  * multiple additions to and restructuring of the help files, manpage
  
- new upstream version <2.0.4>
  * PyQuery parsing for InternetRadio.org.uk channel, and adapted PQ
    usage for shoutcast
  * utility function http.fix_url extended, common string parsing
    functions strip_tags, mime_fmt are now in channels.GenericChannel
  * http module reworked, visual feedback now for GET and AJAX methods,
    and CookieJar was enabled
  * channel/tab order can now be configured (instead of tab dragging)
  * fixed PyQuery wrapper module, packaged lxml modules in (evades
    extra support for Windows port, native modules will be used on Linux)
  * more Gtk.Widget mini help popups in the dialog windows
  
- update to 2.0.3:
  * new channel plugins for MyOggRadio and InternetRadio.org.uk
  * fixes the Live365 category parsing
  * adapts the regex parser for Shoutcast (the PyQuery parser was still functional, but homepage links are missing now)
  * the quick search box is now in the toolbar, as the new compound search has replaced it
  * category updates are now threaded too
  * disbanding of windows was fixed
  * Xiph and Live365 are now real channel plugins and can thus be disabled
  * a limited set of help files was added
  
- new upstream version <2.0.2>
  * more checks for initializing channel plugins
  * gtkrc theming support extended: apply and combobox in config dialog
  * PyQuery as new alternative parsing mechanism, as option for shoutcast
  * category tree gets loaded on first display of empty channels
  * windows port tested, new external project: python+gtk installer bundle
  * removal of .pyc bytecode files from generic .deb and .rpm packages
  * distribution includes gtkrc theme "MountainDew"
  * removed most debug print statements, introduced a config option for it
  
- new upstream version <2.0.0>
  * search function implemented, highlights results in current category list
  * right click context menu added
  * station data inspection/editor added
  * auto_save_appstate implemented
  * station delete implemented
  * clean up of internal application interfaces: new self.channel() instead
    of self.c[self.cc] kludges all around (all traces rm), and new self.row(),
    and some auxiliary windows now have handling code in separate classes
  * now real favicons for directory providers are displayed
  * removed directory service homepage button (still in menu), donated icon
    to stations instead; double-click on channel tab still resultless
  * load_favicon hook (for currently playing station) added
  * added channel switching to menu, and submenu view merged into edit
  * fixed initialisation of open channel tab (previously only default
    shoutcast was populated by .first_show method)
  * made a new logo for 2.0.0 release
  * fixed shoutcast category loading
  
  
- initial build for PackMan <1.9.9>
Eric Schirra's avatar Eric Schirra (ecsos) accepted request 452024 from Eric Schirra's avatar Eric Schirra (ecsos) (revision 2)
update to 2.2.0
Takashi Iwai's avatar Takashi Iwai (tiwai) accepted request 345491 from Eric Schirra's avatar Eric Schirra (ecsos) (revision 1)
new package. Please at me as maintainer.
Displaying all 4 revisions
openSUSE Build Service is sponsored by