Check-in [9057171155]
Overview
Comment: | Use `ui_xml` instead of local filename. (Read via pkgutil.get_data, so should work independently of installation path.) Add logo/banner from `logo.py` → `logo.png`. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
905717115588ba632609a5c568dec878 |
User & Date: | mario on 2015-03-31 16:19:26 |
Other Links: | manifest | tags |
Context
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. check-in: b2d68b4b77 user: mario tags: trunk | |
16:19 | Use `ui_xml` instead of local filename. (Read via pkgutil.get_data, so should work independently of installation path.) Add logo/banner from `logo.py` → `logo.png`. check-in: 9057171155 user: mario tags: trunk | |
16:17 | Added pixbuf() creation method (from base64 stringified PNG to gdk.Pixbuf) check-in: 7b1ee3b5a6 user: mario tags: trunk | |
Changes
Added logo.py version [33142539e4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 | # type: binary # api: gtk # title: streamtuner2 logo # description: encoded PNG # # Allows to be packaged within PYZ archive. png = """ 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 """ |
Modified st2.py from [a25ff9d0d3] to [1a108a0e92].
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 | #!/usr/bin/env python # # encoding: UTF-8 # api: python # type: application # title: streamtuner2 # description: Directory browser for internet radio, audio and video streams # version: 2.1.5 # author: Mario Salzer <mario@include-once.org> # license: Public Domain # url: http://freshcode.club/projects/streamtuner2 # config: # { type: env, name: http_proxy, description: proxy for HTTP access } # { type: env, name: XDG_CONFIG_HOME, description: relocates user .config subdirectory } # category: sound # depends: pygtk | gi, threading, requests, pyquery, lxml # id: streamtuner2 # pack: *.py, gtk*.xml, st2.py=/usr/bin/streamtuner2, channels/__init__.py, bundle/*.py, # streamtuner2.desktop=/usr/share/applications/, README=/usr/share/doc/streamtuner2/, # NEWS.gz=/usr/share/doc/streamtuner2/changelog.gz, help/streamtuner2.1=/usr/share/man/man1/, # help/*page=/usr/share/doc/streamtuner2/help/, help/img/*=/usr/share/doc/streamtuner2/help/img/, # streamtuner2.png, logo.png=/usr/share/pixmaps/streamtuner2.png, # architecture: all # # Streamtuner2 is a GUI for browsing internet radio directories, music # collections, and video services - grouped by genres or categories. | > | | 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 33 34 35 | #!/usr/bin/env python # # encoding: UTF-8 # api: python # type: application # title: streamtuner2 # description: Directory browser for internet radio, audio and video streams # version: 2.1.5 # state: beta # author: Mario Salzer <mario@include-once.org> # license: Public Domain # url: http://freshcode.club/projects/streamtuner2 # config: # { type: env, name: http_proxy, description: proxy for HTTP access } # { type: env, name: XDG_CONFIG_HOME, description: relocates user .config subdirectory } # category: sound # depends: pygtk | gi, threading, requests, pyquery, lxml # id: streamtuner2 # pack: *.py, gtk*.xml, st2.py=/usr/bin/streamtuner2, channels/__init__.py, bundle/*.py, # streamtuner2.desktop=/usr/share/applications/, README=/usr/share/doc/streamtuner2/, # NEWS.gz=/usr/share/doc/streamtuner2/changelog.gz, help/streamtuner2.1=/usr/share/man/man1/, # help/*page=/usr/share/doc/streamtuner2/help/, help/img/*=/usr/share/doc/streamtuner2/help/img/, # streamtuner2.png, logo.png=/usr/share/pixmaps/streamtuner2.png, # architecture: all # # Streamtuner2 is a GUI for browsing internet radio directories, music # collections, and video services - grouped by genres or categories. # It runs your preferred audio player, and streamripper for recording. # # It's an independent rewrite of streamtuner1. Being written in Python, # can be more easily extended and fixed. The mix of JSON APIs, regex # or PyQuery extraction makes list generation simpler and more robust. # # Primarily radio stations are displayed, some channels however are music # collections. Commercial and sign-up services are not an objective. |
︙ | ︙ | |||
46 47 48 49 50 51 52 | from threading import Thread # add library path sys.path.insert(0, "/usr/share/streamtuner2") # pre-defined directory for modules sys.path.insert(0, ".") # development module path # gtk modules | | > | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | from threading import Thread # add library path sys.path.insert(0, "/usr/share/streamtuner2") # pre-defined directory for modules sys.path.insert(0, ".") # development module path # gtk modules from uikit import pygtk, gtk, gobject, uikit, ui_xml, gui_startup, AboutStreamtuner2 # custom modules from config import * # initializes itself, so all conf.vars are available right away import ahttp import action import logo import favicon import channels import channels.bookmarks import channels.configwin import channels.streamedit import channels.search |
︙ | ︙ | |||
88 89 90 91 92 93 94 | channel_names = ["bookmarks"] # order of channel notebook tabs current_channel = "bookmarks" # currently selected channel name (as index in self.channels{}) # constructor def __init__(self): | | | < < | | < | > | | 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 115 116 117 118 119 120 121 | channel_names = ["bookmarks"] # order of channel notebook tabs current_channel = "bookmarks" # currently selected channel name (as index in self.channels{}) # constructor def __init__(self): # Load stylesheet, instantiate GtkBuilder in self, menu and logo hooks gui_startup(0/20.0), self.load_theme() gui_startup(1/20.0), gtk.Builder.__init__(self) gui_startup(1/20.0), gtk.Builder.add_from_string(self, ui_xml) gui_startup(3/20.0), self.extensionsCTM.set_submenu(self.extensions) # duplicates Station>Extension menu into stream context menu self.img_logo.set_from_pixbuf(uikit.pixbuf(logo.png)) # initialize built-in plugins self.channels = { "bookmarks": channels.bookmarks.bookmarks(parent=self), # this the remaining built-in channel } # dialogs that are connected to main self.features = { "search": channels.search.search(self), "configwin": channels.configwin.configwin(self), "streamedit": channels.streamedit.streamedit(self), } gui_startup(4/20.0) # append other channel modules and plugins self.load_plugin_channels() # load application state (widget sizes, selections, etc.) try: winlayout = conf.load("window") |
︙ | ︙ | |||
138 139 140 141 142 143 144 | gui_startup(18/20.0) self.current_channel = self.current_channel_gtk() try: self.channel().first_show() except: __print__(dbg.INIT, "main.__init__: current_channel.first_show() initialization error") # bind gtk/glade event names to functions | | | 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | gui_startup(18/20.0) self.current_channel = self.current_channel_gtk() try: self.channel().first_show() except: __print__(dbg.INIT, "main.__init__: current_channel.first_show() initialization error") # bind gtk/glade event names to functions gui_startup(19.75/20.0) self.connect_signals(dict({ "gtk_main_quit" : self.gtk_main_quit, # close window # treeviews / notebook "on_stream_row_activated" : self.on_play_clicked, # double click in a streams list "on_category_clicked": self.on_category_clicked, # new selection in category list "on_notebook_channels_switch_page": self.channel_switch, # channel notebook tab changed "station_context_menu": lambda tv,ev: self.station_context_menu(tv,ev), |
︙ | ︙ | |||
202 203 204 205 206 207 208 | "streamedit_open": self.streamedit.open, "streamedit_save": self.streamedit.save, "streamedit_new": self.streamedit.new, "streamedit_cancel": self.streamedit.cancel, }, **self.add_signals)) # actually display main window | < > | 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | "streamedit_open": self.streamedit.open, "streamedit_save": self.streamedit.save, "streamedit_new": self.streamedit.new, "streamedit_cancel": self.streamedit.cancel, }, **self.add_signals)) # actually display main window self.win_streamtuner2.show() gui_startup(1.0) #-- Shortcut for glade.get_widget() # Allows access to widgets as direct attributes instead of using .get_widget() # Also looks in self.channels[] for the named channel plugins def __getattr__(self, name): if (name in self.channels): |
︙ | ︙ | |||
402 403 404 405 406 407 408 | # load plugins from /usr/share/streamtuner2/channels/ def load_plugin_channels(self): # initialize plugin modules (pre-ordered) ls = channels.module_list() for module in ls: | | | 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 | # load plugins from /usr/share/streamtuner2/channels/ def load_plugin_channels(self): # initialize plugin modules (pre-ordered) ls = channels.module_list() for module in ls: gui_startup(4/20.0 + 13.5/20.0 * float(ls.index(module))/len(ls), "loading module "+module) # skip module if disabled if conf.plugins.get(module, 1) == False: __print__(dbg.STAT, "disabled plugin:", module) continue # or if it's a built-in (already imported) elif module in self.features or module in self.channels: |
︙ | ︙ | |||
498 499 500 501 502 503 504 | #-- run main if __name__ == "__main__": | < < < | 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 | #-- run main if __name__ == "__main__": # graphical if len(sys.argv) < 2 or "--gtk3" in sys.argv: # prepare for threading in Gtk+ callbacks gobject.threads_init() # prepare main window main = StreamTunerTwo() # module coupling action.main = main # action (play/record) module needs a reference to main window for gtk interaction and some URL/URI callbacks action = action.action # shorter name ahttp.feedback = main.status # http module gives status feedbacks too # first invocation if (conf.get("firstrun")): main.configwin.open(None) del conf.firstrun # run gtk.main() __print__(dbg.PROC, r"[31m gtk_main_quit [0m") # invoke command-line interface else: import cli cli.StreamTunerCLI() |