Index: NEWS ================================================================== --- NEWS +++ NEWS @@ -1,9 +1,30 @@ 2.1.5 (unreleased) -- Rewrite, cleanup, new PYZ package. -- Plugin meta data, embedded PNGs. -- Notebook tabs now on the left per default. +- This is a beta release, with lots of cleanups and various bugfixes. +- Adds a self-contained PYZ package, which Python can run directly. +- Now fully utilizes the plugin meta data scheme for default settings, + discovery, and to reduce internal complexity. +- A new channel plugin for "Radio-Browser.info" has been bundled. +- Another plugin for interfacing with "RadioTray" was introduced, to + share bookmarks via DBUS once RadioTray implements it. +- Notebook tabs are now on the left per default, and can be rearranged + directly in the GUI. +- Gtk properties are now utilized more over internal UI state vars. + And the GtkBuilder UI file is now compressed. +- The Gtk2 fallback file became redundant. +- The former channel icon PNGs are now embedded. +- Theme configuration was removed. +- Category retrieval became more resilient. +- HTTP timeouts have been added. +- The bookmarks tab, settings window, search dialog, stream inspector/editor + have been externalized into plugins; yet remain core features. +- The packaging layout has been slightly restructured - to support + relocatable installations (for PyZIP package). +- Minor fixes to youtube, internet_radio, punkcast, timer and other plugins. +- Help pages have been updated further, as well as CREDITS, README and + general PACKAGING infos, and most plugin short descriptions. +- The project fossil wiki now contains a more details on plugin APIs. 2.1.4 (2015-03-25) - Fixed Internet-Radio extraction. - Added basic TuneIn channel. - Removed Dirble and MusicGoal channels. Index: README ================================================================== --- README +++ README @@ -72,10 +72,15 @@ If you've checked out the source code repository, or did download the *.src.txz archive, then you can just run it right there: ./st2.py +The easy way: + + · Run `sudo make install` + which installs into the default location (/usr/share/streamtuner2). + To install it manually: · Create a /usr/share/streamtuner2/ · Copy all *.py files there. · Also copy the "gtk3.xml" file into /usr/share/streamtuner2/ @@ -97,10 +102,14 @@ Moreover you can also edit the user interface. You need glade installed, and open the "gtk3.xml" file. There it's easy to rename or rearrange things. +Note that newer releases expect a compressed version of that +ui description. Use `make glade` simply, or `make gtk3` to +update the compressed version from the plain gtk.xml afterwards. + Sources ------- You'll find the current source files under Index: logo.py ================================================================== --- logo.py +++ logo.py @@ -79,6 +79,36 @@ wV+LdZB86X3/VNA1/8+/qBReUzI15fmhADWIC0WJiBqRG0eItmd/gwv2Wvzr+buLRorecrdO5z3Z23GU44fIhMhLKMGJSBRFsf8yoRSKlEHhvf33+Nw+FFuK9FhHqP4EUKSp7qqeytY6nS8xjhanh1QKocEdUlCA9Unyn20UWEghhRIshKJSarTBeVJ/ZLZOm6SYVzn61fZ7gMfbjRLsjsVg/8++LrCQQgolWFj8ofEIMRexjnig+CV36o7lnEbJUEmab23fhyi//chgKgYXJkcXUsi/RYKFIrQzTBNaNrS1ooviN1PajkmIuYlR01nzd5HiRa5RSg8JEClGYi0sBhdSyL9GgoVQsRVz+byohdqtkdsRYX/he4chDmDCKEaTHGkE4Q/6VvrnQZWCaHL6I8gilGC7SPwryITuQgoppFCCnzSXkQZ9oNSd2LjYUcHlg/d61PO47tzK+bG+uf6Je0P3B961vX8LrBR4NTom+qhxeP95NEIMUpEkSg0t/1oB FlJIoQQLRWicW1mFfZSLYFRYjxK7saEjGZlNoOwm4XKkMeG7AW6TiI99zSeeL6SQQv61EizEONG8kPIWUYbeKLswFF8MQb0/cBkcHx/vRa9TTiOJszD6K6SQ/6IEC5NmSYZ8ivCoztAEPTeJ798X+RVSSCH/B8zRbOJfFK4KAAAAAElFTkSuQmCC """ -svg = """""" +svg = """ +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 +"""