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

⌈⌋ ⎇ branch:  streamtuner2


History of channels/__init__.py of f1a357a60d13ca90

History of the file that is called channels/__init__.py at checkin f1a357a60d13ca90

2020-05-10
15:17
Adapt Xiph plugin for BETA/dir-test.xoph.org rollout. It's fairly terrible: homepages gone, bitrate unavailable, case-sensitive category segregration. On the upside: direct streaming server urls.

The 'cache' mode is likely broken soon, since the experimental JSON API is gone.

For now using `.title()` on /genre/{} search. Adapted guess_format to recognize AAC. Subtitle is used in lieu of On Air: text for playing= file: [ab1b538656] check-in: [f9c725e90b] user: mario, branch: trunk, size: 32629 [annotate] [blame] [check-ins using] [diff]

2017-01-05
21:33
Fix `links` plugin format: attribute; make it understood by channel.play() that a homepage-only row triggers the web browser. file: [e9d8c94f99] check-in: [f48ad79aa1] user: mario, branch: trunk, size: 32611 [annotate] [blame] [check-ins using] [diff]
21:23
Introduce FeaturePlugin as new base class for channels and all other plugins. Pre-defines the meta, module attributes and calls init2(). file: [4a4e01489e] check-in: [ea924e3c27] user: mario, branch: trunk, size: 32496 [annotate] [blame] [check-ins using] [diff]
2017-01-03
20:11
Introduce statusbar_img and GenericChannel.warn() function; albeit it allows any stock icon to be used. (May introduce a generalized background/foreground color wrapping.) file: [c58402c723] check-in: [8b13ba0189] user: mario, branch: trunk, size: 31601 [annotate] [blame] [check-ins using] [diff]
2017-01-01
15:25
Prevent .row() - row["url"]/urn_resolve from crashing for homepage-only entries (from e.g. links channel). file: [76451770e4] check-in: [4fb2d74c67] user: mario, branch: trunk, size: 31508 [annotate] [blame] [check-ins using] [diff]
14:59
Update to #pack: specified of channels/*.py file: [a524c74978] check-in: [8599474f19] user: mario, branch: trunk, size: 31489 [annotate] [blame] [check-ins using] [diff]
2016-12-18
14:04
Add more .progress() indication file: [296d8f3610] check-in: [0c7040e314] user: mario, branch: trunk, size: 31967 [annotate] [blame] [check-ins using] [diff]
2016-12-17
11:01
Adapt urn_resolve() invocation. Most handlers update the dict in place. A few will return a new row however. (This can be utilized to return a copy, instead of changing station entries → menat for user "script stations" plugin.) file: [96d271c529] check-in: [0a425cfb5d] user: mario, branch: trunk, size: 31431 [annotate] [blame] [check-ins using] [diff]
2016-11-11
22:58
Adapt GenericChannel to use state icon for multi-URL stations. Fix RadioSure slightly to use spaces instead of TABs for `url` lists. file: [55add89636] check-in: [4ebb6babed] user: mario, branch: trunk, size: 31287 [annotate] [blame] [check-ins using] [diff]
2016-11-06
18:51
Add unichr() function alias for Python3. file: [a62aaaa5c0] check-in: [049c5a6edd] user: mario, branch: trunk, size: 31188 [annotate] [blame] [check-ins using] [diff]
12:13
Implement a status message for URN: resolving, shorten code back (- row[] object gets implicitly updated.) file: [b27eefc5db] check-in: [199ac60b55] user: mario, branch: trunk, size: 31162 [annotate] [blame] [check-ins using] [diff]
11:40
Also perform an action.resolve_urn() right when accessing a row. Thus the stremaing lsits get updated on any .row() acccess (= now centrally covered). file: [0838ff195b] check-in: [2859a51985] user: mario, branch: trunk, size: 31056 [annotate] [blame] [check-ins using] [diff]
2015-05-24
16:58
Undo {expand:False} attribute for CellRendererPixbuf file: [7b1d9a7374] check-in: [a4d0e74658] user: mario, branch: trunk, size: 30636 [annotate] [blame] [check-ins using] [diff]
10:02
Move channel.save() after column updating. file: [308143373d] check-in: [3072c80d83] user: mario, branch: trunk, size: 30634 [annotate] [blame] [check-ins using] [diff]
08:52
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. file: [9cd47dabe0] check-in: [39304eb90b] user: mario, branch: trunk, size: 30567 [annotate] [blame] [check-ins using] [diff]
2015-05-23
15:28
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. file: [54759d6b53] check-in: [867c9f9f94] user: mario, branch: trunk, size: 30451 [annotate] [blame] [check-ins using] [diff]
2015-05-22
22:00
Use gtk-info/-error/-no for placeholder entries. file: [e059e8f474] check-in: [55408c97f8] user: mario, branch: trunk, size: 30388 [annotate] [blame] [check-ins using] [diff]
2015-05-21
20:08
Remove config.find_in_dirs(), which is unused now. file: [d0e1f694ba] check-in: [11f270a726] user: mario, branch: trunk, size: 30380 [annotate] [blame] [check-ins using] [diff]
2015-05-18
22:21
Allow Exif-wrapped JPEGs as well (not just JFIF regexp check). Comment on merging row["favourite"] merge via prepare_filters list. file: [00c8218319] check-in: [6d03cb84d3] user: mario, branch: trunk, size: 30364 [annotate] [blame] [check-ins using] [diff]
2015-05-15
17:49
Add `filter_bitrate` to default pack: list. file: [13cd81f0c1] check-in: [9a5cee5ac7] user: mario, branch: trunk, size: 30216 [annotate] [blame] [check-ins using] [diff]
14:19
Add 2.1.8-dev as 0install option; depend on Py 2.7 for now. file: [0b4e192682] check-in: [c19b7669f4] user: mario, branch: trunk, size: 30197 [annotate] [blame] [check-ins using] [diff]
2015-05-14
18:41
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. file: [f444708642] check-in: [8c7b4f2662] user: mario, branch: trunk, size: 30185 [annotate] [blame] [check-ins using] [diff]
00:05
Resize logo together with toolbar buttons. file: [ef7bb71538] check-in: [edc282b52b] user: mario, branch: trunk, size: 30130 [annotate] [blame] [check-ins using] [diff]
2015-05-13
00:00
Move mime_fmt() into regular function. Fix live365 ahttp feedback= bug. Regroup functions and update a few comments in channels/__init__ file: [5f327fb17e] check-in: [2335ea7a46] user: mario, branch: trunk, size: 30156 [annotate] [blame] [check-ins using] [diff]
2015-05-12
22:18
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.) file: [51e13176b4] check-in: [ae2f48310a] user: mario, branch: trunk, size: 30044 [annotate] [blame] [check-ins using] [diff]
20:01
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. file: [8b2d122cbc] check-in: [475f736d5d] user: mario, branch: trunk, size: 29871 [annotate] [blame] [check-ins using] [diff]
2015-05-11
20:29
Remove _ prefix from ls, rowmap, pix_entry, as features/search was already depending on literal rowmap. file: [f638d3bd60] check-in: [6d1bd944fb] user: mario, branch: trunk, size: 30004 [annotate] [blame] [check-ins using] [diff]
12:21
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. file: [4f19df3b1a] check-in: [494088b7d1] user: mario, branch: trunk, size: 30036 [annotate] [blame] [check-ins using] [diff]
2015-05-10
19:20
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. file: [50c58e1601] check-in: [bd1a9cba05] user: mario, branch: trunk, size: 30042 [annotate] [blame] [check-ins using] [diff]
2015-05-09
21:37
Use custom GenericChannel.columns() wrapper to simplify passing TreeView widget and keeping returned liststore/rowmap/pix_entry. file: [33bbfd495e] check-in: [5d8d7fd191] user: mario, branch: trunk, size: 30202 [annotate] [blame] [check-ins using] [diff]
2015-05-06
00:21
Remove default ["empty",] category. file: [824048913b] check-in: [d958ddb71e] user: mario, branch: trunk, size: 30076 [annotate] [blame] [check-ins using] [diff]
00:05
Inline copy&paste HTML entity definitions, because they seemingly were also sacrificed at the Python 3 altar. file: [d8b2e80536] check-in: [6cb923861a] user: mario, branch: trunk, size: 30085 [annotate] [blame] [check-ins using] [diff]
2015-05-05
14:27
Moved `file` and `punkcast` into contrib/ group. file: [34653ed3ce] check-in: [d91ab221b3] user: mario, branch: trunk, size: 26531 [annotate] [blame] [check-ins using] [diff]
10:56
Update documentation and notes for new channel/feature plugins. file: [f231100a42] check-in: [222113231f] user: mario, branch: trunk, size: 26479 [annotate] [blame] [check-ins using] [diff]
2015-05-04
15:20
Hopefully fix Gtk3 error by wrapping second set_current() call in uikit.do file: [704d24e7cb] check-in: [b5a787d470] user: mario, branch: trunk, size: 26468 [annotate] [blame] [check-ins using] [diff]
2015-05-03
20:26
Add some version: bumps and add a few versions to depends: references. file: [fcabfb47c7] check-in: [beebec9c76] user: mario, branch: trunk, size: 26333 [annotate] [blame] [check-ins using] [diff]
2015-05-02
20:03
Add combined unhtml() utility function for raw page extractors. file: [4aa8b6efaf] check-in: [6f314952b9] user: mario, branch: trunk, size: 26296 [annotate] [blame] [check-ins using] [diff]
19:52
Move strip_tags(), entity_decode(), and nl() out of class into normal functions. file: [90231f2619] check-in: [41c3273da9] user: mario, branch: trunk, size: 26234 [annotate] [blame] [check-ins using] [diff]
05:41
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. file: [0f18034c13] check-in: [5588baf6dd] user: mario, branch: trunk, size: 26133 [annotate] [blame] [check-ins using] [diff]

2015-04-30
20:33
Temporarily remove iCast plugin from packaging, but add dirble and filtermusic. file: [5eb841253c] check-in: [9b4d29f9f7] user: mario, branch: trunk, size: 25322 [annotate] [blame] [check-ins using] [diff]
20:31
Manually replace `nbsp;` in entity_decode file: [0fa6fed575] check-in: [82e9e14f3b] user: mario, branch: trunk, size: 25301 [annotate] [blame] [check-ins using] [diff]
2015-04-29
22:55
Exchanged all "import ahttp as http" for plain `ahttp` module usage. file: [3d68982aa3] check-in: [493be36226] user: mario, branch: trunk, size: 25278 [annotate] [blame] [check-ins using] [diff]
05:37
Also scroll to last category after .select_current (didn't automatically happen for current notebook.) file: [162b9d0f3b] check-in: [53bfeeff06] user: mario, branch: trunk, size: 25285 [annotate] [blame] [check-ins using] [diff]
2015-04-28
17:35
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(). file: [cafb75235c] check-in: [ffaf262c43] user: mario, branch: trunk, size: 25213 [annotate] [blame] [check-ins using] [diff]
2015-04-27
16:33
TreePath restoration +1 for drag and drop. file: [ace9b7e5ae] check-in: [9185cd29e6] user: mario, branch: trunk, size: 24086 [annotate] [blame] [check-ins using] [diff]
2015-04-26
22:22
Disable "Format" column again. file: [c777f5bb8f] check-in: [781f57ecdc] user: mario, branch: trunk, size: 23951 [annotate] [blame] [check-ins using] [diff]
15:35
Cover most catched exceptions with log messages. file: [5fc4a7eeff] check-in: [363dce5eb9] user: mario, branch: trunk, size: 23953 [annotate] [blame] [check-ins using] [diff]
2015-04-24
04:59
Disable update_streams_partially_done() for Gtk3, as that's the main cause of memory corruption (despite being run in idle loop). file: [b129e11a0f] check-in: [1edde401ce] user: mario, branch: trunk, size: 23900 [annotate] [blame] [check-ins using] [diff]
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.) file: [7050519949] check-in: [ce0e9149db] user: mario, branch: trunk, size: 23761 [annotate] [blame] [check-ins using] [diff]
2015-04-23
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. file: [bddc9139b6] check-in: [f1a357a60d] user: mario, branch: trunk, size: 23755 [annotate] [blame] [check-ins using] [diff]
01:09
Remove some print statements, and switch to log.FUNC where necessary. file: [6ef5fada5c] check-in: [ecc88e5d3e] user: mario, branch: trunk, size: 23767 [annotate] [blame] [check-ins using] [diff]
2015-04-22
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.) file: [eada7c8200] check-in: [a5893e591c] user: mario, branch: trunk, size: 23764 [annotate] [blame] [check-ins using] [diff]
2015-04-21
06:05
Replace old __print__/dbg.XYZ references with new log.XYZ() wrapper. file: [5cecf16359] check-in: [ebae9e51ac] user: mario, branch: trunk, size: 22822 [annotate] [blame] [check-ins using] [diff]
2015-04-20
16:21
Remove some obsolete comments/code snippets. file: [f6644128e5] check-in: [dd605f1352] user: mario, branch: trunk, size: 22943 [annotate] [blame] [check-ins using] [diff]
2015-04-19
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.) file: [b9ead90d77] check-in: [1cfacd1296] user: mario, branch: trunk, size: 24195 [annotate] [blame] [check-ins using] [diff]
2015-04-17
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. file: [9a39b12b72] check-in: [99ee6c4ef4] user: mario, branch: trunk, size: 23937 [annotate] [blame] [check-ins using] [diff]
2015-04-12
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. file: [ac1734feec] check-in: [5ab206cedc] user: mario, branch: trunk, size: 23544 [annotate] [blame] [check-ins using] [diff]
2015-04-11
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. file: [f719a01f46] check-in: [e663445700] user: mario, branch: trunk, size: 23534 [annotate] [blame] [check-ins using] [diff]
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.) file: [08c3ab8bab] check-in: [6109a1a671] user: mario, branch: trunk, size: 23766 [annotate] [blame] [check-ins using] [diff]
2015-04-10
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. file: [9cf8287e24] check-in: [e136a78c73] user: mario, branch: action-mapfmts, size: 23706 [annotate] [blame] [check-ins using] [diff]
10:54
Sync with trunk changes. file: [b6c3442f9b] check-in: [801ad7fd98] user: mario, branch: action-mapfmts, size: 23704 [annotate] [blame] [check-ins using] [diff]
10:49
Move concrete row(), rowno(), selected(), model_iter() and play(), record() implementations from main into channels.GenericModule. file: [e46cdc65d0] check-in: [65a0b18268] user: mario, branch: trunk, size: 23714 [annotate] [blame] [check-ins using] [diff]
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. file: [f28fdd4cc1] check-in: [85313637a3] user: mario, branch: action-mapfmts, size: 21718 [annotate] [blame] [check-ins using] [diff]
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. file: [ae8e7ee1ba] check-in: [ea628d6426] user: mario, branch: trunk, size: 21728 [annotate] [blame] [check-ins using] [diff]
2015-04-07
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. file: [11f92592f3] check-in: [a7c3f7336a] user: mario, branch: trunk, size: 21742 [annotate] [blame] [check-ins using] [diff]
2015-04-05
20:27
Recategorized some dbg.ERR messages, but make them displayed now regardless of conf.debug setting. file: [292484f13c] check-in: [2b63a42675] user: mario, branch: trunk, size: 21284 [annotate] [blame] [check-ins using] [diff]
2015-04-04
01:48
Catch HTTP errors for reload_categories(). Provide a descriptive .placeholder[] and .empty_stub[] stream list for channels reloading. file: [f281706365] check-in: [9d6c4e81f8] user: mario, branch: trunk, size: 21224 [annotate] [blame] [check-ins using] [diff]
2015-04-03
20:43
Made channel tabs reorderable. Now kept in config/window.json as `tab_order` and current page saved as `tab_current` instead of pageno. Disabled progressbar changes for ahttp, made search_server search run in a thread so status can be shown. file: [98bda28d4c] check-in: [6fab0e7170] user: mario, branch: trunk, size: 20476 [annotate] [blame] [check-ins using] [diff]
17:35
Got rid of static main.channel_names[] list. Instead now querying Gtk notebook_channels widget for current page name ordering. More plugin defaults added to ConfigDict.defaults(), as workaround for not preparsing inactive plugins on startup. file: [af174af9c9] check-in: [18b4da567f] user: mario, branch: trunk, size: 20411 [annotate] [blame] [check-ins using] [diff]
2015-04-02
18:40
Fix incorrent indendation. file: [4b9f08e907] check-in: [85b88fac15] user: mario, branch: trunk, size: 20414 [annotate] [blame] [check-ins using] [diff]
17:38
Compact plugin comments to be more user-targetted. file: [6af40f336b] check-in: [f5a59de6b8] user: mario, branch: trunk, size: 20639 [annotate] [blame] [check-ins using] [diff]
15:28
Changed plugin config: options default registration to use full .meta[] now instead of just config[] list. Thus plugins can be enabled/disabled right away based on priority: field. (On first startup all channels will show up however.) file: [2254b1cf48] check-in: [a05da9d33d] user: mario, branch: trunk, size: 20922 [annotate] [blame] [check-ins using] [diff]
2015-04-01
17:39
Add conf.get_data() alias, which automatically fetches resource relative to config module (that is, works on the global path, or within pyzip archive). Move module_list() from channels. into config, as it combines plugins and config management anyway. file: [3382badfa2] check-in: [07d2a291cd] user: mario, branch: trunk, size: 20932 [annotate] [blame] [check-ins using] [diff]
15:47
Moved add_plugin_defaults from main into GenericChannel constructor. Check for percentage>=0 in progress indicator of statusbar. file: [ed3951c050] check-in: [9a4aa0b793] user: mario, branch: trunk, size: 21550 [annotate] [blame] [check-ins using] [diff]
11:18
Remove manual gtk visibility setting (show_all used now). Use fallback stock icon in case .png or png: are missing for plugins. file: [d3c6459236] check-in: [7edad1d952] user: mario, branch: trunk, size: 21444 [annotate] [blame] [check-ins using] [diff]
2015-03-31
16:21
Remove @title and @module getters, add notebook channel menu_label (unstyled variant of tab_label). Support reading `png:` descriptor field instead of literal .png files along plugins. file: [a58ebaa107] check-in: [b2d68b4b77] user: mario, branch: trunk, size: 21593 [annotate] [blame] [check-ins using] [diff]
2015-03-30
17:42
Use absolute path (conf.share) for plugin lookup with pkgutil. file: [04ae180339] check-in: [665f4b36ad] user: mario, branch: trunk, size: 21697 [annotate] [blame] [check-ins using] [diff]
2015-03-29
14:41
Less indentation, update pack: list. file: [01af7f840e] check-in: [3c07d74bb6] user: mario, branch: trunk, size: 21660 [annotate] [blame] [check-ins using] [diff]
03:03
Removed static .title and .module properties. Plugin discovery now realized through pkgutil.iter_modules(). file: [14b4644be4] check-in: [2b3b50b6ad] user: mario, branch: trunk, size: 23548 [annotate] [blame] [check-ins using] [diff]
2015-03-28
18:50
Merged _generic into channels/__init__. file: [da5f3b55c8] check-in: [817010842c] user: mario, branch: trunk, size: 23414 [annotate] [blame] [check-ins using] [diff]
07:29
Remove channels.module_meta(), wich is now config.plugin_meta() and closer to plugin meta data spec. file: [9432295735] check-in: [6106a0bcdd] user: mario, branch: trunk, size: 1314 [annotate] [blame] [check-ins using] [diff]
2015-03-25
01:16
Remove musicgoal from pack: list, add tunein. file: [720f2889ce] check-in: [47e25b02c0] user: mario, branch: trunk, size: 1631 [annotate] [blame] [check-ins using] [diff]
2015-02-06
18:10
Change main fpm/xpm pack: line to select channel modules individually, use default prefix path /usr/share/streamtuner2 and absolute paths alternatively. Remove dirble module from default channels/__init__: packaging list. file: [f76574b70e] check-in: [088a836b02] user: mario, branch: trunk, size: 1648 [annotate] [blame] [check-ins using] [diff]
2014-05-13
16:23
Completer plugin meta data blocks, now utilized in channel settings dialog for nicer descriptions. file: [1d725c2e92] check-in: [fff3b62827] user: mario, branch: trunk, size: 1360 [annotate] [blame] [check-ins using] [diff]
2014-04-07
00:33
Move __print__ into config, add unified dbg.COLOR codes file: [92d73c2e69] check-in: [7ef1553f61] user: mario, branch: trunk, size: 80 [annotate] [blame] [check-ins using] [diff]
2012-01-09
03:45
Added: 2.0.8.5 file: [f76e54fd21] check-in: [ea81d1ad5d] user: mario, branch: trunk, size: 120 [annotate] [blame] [check-ins using]