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

⌈⌋ ⎇ branch:  streamtuner2


Check-in [57e4b7c323]

Overview
Comment:Mention `make glade`, as gtk3.xml is now compressed per gzip after all.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 57e4b7c323f2985a433f7481258caf654ee48776
User & Date: mario on 2015-04-05 14:06:18
Other Links: manifest | tags
Context
2015-04-05
14:07
Use os.path.expand* for env vars and `~` homedir placeholder. check-in: 7aafeff157 user: mario tags: trunk
14:06
Mention `make glade`, as gtk3.xml is now compressed per gzip after all. check-in: 57e4b7c323 user: mario tags: trunk
14:04
Document Makefile requirements (version, xpm/fpm), prepare manual `install` target. check-in: ff249e30f0 user: mario tags: trunk
Changes

Makefile became executable with contents [cf2c20dc2e].

whitespace changes only

Modified NEWS from [57a25343a1] to [a94565f8b0].

1

2
3




4
















5
6
7
8
9
10
11
2.1.5 (unreleased)

- Rewrite, cleanup, new PYZ package.
- Plugin meta data, embedded PNGs.




- Notebook tabs now on the left per default.

















2.1.4 (2015-03-25)
- Fixed Internet-Radio extraction.
- Added basic TuneIn channel.
- Removed Dirble and MusicGoal channels.
- Fix desktop and packaging infos according to Debian guidelines.
- Switch to fpm/xml for package building.

>
|
|
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
2.1.5 (unreleased)
- 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.
- Fix desktop and packaging infos according to Debian guidelines.
- Switch to fpm/xml for package building.

Modified README from [6755f4a074] to [170fdd7788].

70
71
72
73
74
75
76





77
78
79
80
81
82
83
-------------------

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






To install it manually:

  · Create a /usr/share/streamtuner2/
  · Copy all *.py files there.
  · Also copy the "gtk3.xml" file into /usr/share/streamtuner2/
  · Copy the channels/ subdir into /usr/share/streamtuner2/channels/
  · Install "bin" as /usr/bin/streamtuner2.







>
>
>
>
>







70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
-------------------

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/
  · Copy the channels/ subdir into /usr/share/streamtuner2/channels/
  · Install "bin" as /usr/bin/streamtuner2.
95
96
97
98
99
100
101




102
103
104
105
106
107
108
If you want to edit a channel plugin, just have a look into the
channels/*.py files. It's often rather easy to adapt things.

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.






Sources
-------

You'll find the current source files under 
http://fossil.include-once.org/streamtuner2/








>
>
>
>







100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
If you want to edit a channel plugin, just have a look into the
channels/*.py files. It's often rather easy to adapt things.

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 
http://fossil.include-once.org/streamtuner2/

Modified logo.py from [353ff3eb50] to [764b7e427f].

77
78
79
80
81
82
83
84






























vM4j1AKdXwnu+VL8Y85GDEF2pljmjAEHy3y6OkH2sQmxToya6Rv61vLdpGmjuSvvJv9bOFiY7jDUAUiMosGidFkfWao6Sf3Kt6bvvaiiUedQejtwv2k0MTxKJITSYUaNGlVgIqGWWpylaydX6/THJnvre+pfGuswa9JwXv9cUbgQqusTtRR1E7YSHhY3E59jgmI6K/lC8hV++YOZ0TiJkEZwVsYovxC2E56xHWz7hjeKB0xshtt8ELQX/KYoq1iC0U4F4xh8ekEHwXpRC9EJ5nlEzUWnHCs7TjRNvi5sK5yO13TM/HqELYVH9YH6yrlN8i6rIYvC69qJxz1tfj/SOtKV5uMR0rEoGZiG3Ne56xJkdWRz8Bq+5ffh/2kz0iaN9yUPmNC92few/wPfm9OYtzgQ7y+BemPQe2TeyClqKqonaiM6gNHzWTz/ORP4HpySV5InsyeYW1daPDROejcrrUVs4FxuTDMhyhMpg6Rv8R+F5//qP7UA31w9CqEkLnug
4GbHxMWkhJUKOxQZH3nYWN+3E1/fjMvFyAikKT6Pp77BNP9JQUdSJEH5IPl4ttZp68TIHTXiMGLp4WXCf8R7mExJ0gXVq6UQ7oiCokH6glMkYw7lhiFillw5W2oxxh+/N0V4qkRVN3l5+XhFecVEdYy6H8qkAe4fT8el7ehHS6IhWeD2Psxz0KCeJANjFGVPjQqUcGx+LbQOUViaA4Og47hk/PmZH4OSviny43ovaF8qbtO+lE+Iy4oo3iY4aGwPp3icQClC28nF1aUu3TONAEO5gHQ8jiRxG3rvEA86t/k94346ihbz+7l1q6Me2LiC8z5kf74pbx01Smi/ps/uf1ZkIelQNEfFYyQOBVEJF41QEm2pxZceU19gFGRx40CtWnwupv1o/3/ih6PpoWmQ/7Qd7mRvtw5uz/E+duI9Naf7+OeLwoUwE5tZsLG4n1EcNJ8G/UgomqLiKuXW0Q/c/POzfB72bay9HuvPY/W+9iQxvD9HyntEgTrRknFvdohN
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 = """"""





































|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
vM4j1AKdXwnu+VL8Y85GDEF2pljmjAEHy3y6OkH2sQmxToya6Rv61vLdpGmjuSvvJv9bOFiY7jDUAUiMosGidFkfWao6Sf3Kt6bvvaiiUedQejtwv2k0MTxKJITSYUaNGlVgIqGWWpylaydX6/THJnvre+pfGuswa9JwXv9cUbgQqusTtRR1E7YSHhY3E59jgmI6K/lC8hV++YOZ0TiJkEZwVsYovxC2E56xHWz7hjeKB0xshtt8ELQX/KYoq1iC0U4F4xh8ekEHwXpRC9EJ5nlEzUWnHCs7TjRNvi5sK5yO13TM/HqELYVH9YH6yrlN8i6rIYvC69qJxz1tfj/SOtKV5uMR0rEoGZiG3Ne56xJkdWRz8Bq+5ffh/2kz0iaN9yUPmNC92few/wPfm9OYtzgQ7y+BemPQe2TeyClqKqonaiM6gNHzWTz/ORP4HpySV5InsyeYW1daPDROejcrrUVs4FxuTDMhyhMpg6Rv8R+F5//qP7UA31w9CqEkLnug
4GbHxMWkhJUKOxQZH3nYWN+3E1/fjMvFyAikKT6Pp77BNP9JQUdSJEH5IPl4ttZp68TIHTXiMGLp4WXCf8R7mExJ0gXVq6UQ7oiCokH6glMkYw7lhiFillw5W2oxxh+/N0V4qkRVN3l5+XhFecVEdYy6H8qkAe4fT8el7ehHS6IhWeD2Psxz0KCeJANjFGVPjQqUcGx+LbQOUViaA4Og47hk/PmZH4OSviny43ovaF8qbtO+lE+Iy4oo3iY4aGwPp3icQClC28nF1aUu3TONAEO5gHQ8jiRxG3rvEA86t/k94346ihbz+7l1q6Me2LiC8z5kf74pbx01Smi/ps/uf1ZkIelQNEfFYyQOBVEJF41QEm2pxZceU19gFGRx40CtWnwupv1o/3/ih6PpoWmQ/7Qd7mRvtw5uz/E+duI9Naf7+OeLwoUwE5tZsLG4n1EcNJ8G/UgomqLiKuXW0Q/c/POzfB72bay9HuvPY/W+9iQxvD9HyntEgTrRknFvdohN
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 = """
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
"""