ICN_PLAY = '0' * ICON_DIMS[0] * ICON_DIMS[1] import os, sys, time from dbus import Bus, DBusException message_pipe = os.path.join(os.environ["HOME"], ".g15_audacious_pipe") def get_aud(): try: return session_bus.get_object('org.atheme.audacious', '/org/atheme/audacious') except DBusException: return None def draw_state(icon): msg_handle.write('PO 0 0 %d %d "%s"\n' % (ICON_DIMS[0], ICON_DIMS[1], icon)) session_bus = Bus(Bus.TYPE_SESSION) if not os.path.exists(control_pipe) and not (os.path.isfile(control_pipe) and os.path.isdir(control_pipe)): print "ERROR: Not a g15composer control pipe: %s" % control_pipe sys.exit(1) if os.path.exists(message_pipe) and not (os.path.isfile(control_pipe) and os.path.isdir(control_pipe)): os.remove(message_pipe) try: file(control_pipe, 'w').write('SN "%s"\n' % message_pipe) time.sleep(0.5) msg_handle = file(message_pipe,'w') oldTitleString = '' while True:
#!/usr/bin/env python3 #coding=utf-8 import sys, os, tweepy, urllib from dbus import Bus, DBusException import gi gi.require_version('Notify', '0.7') from gi.repository import Notify from mastodon import Mastodon NS = 'org.mpris.MediaPlayer2.' bus = Bus(Bus.TYPE_SESSION) folder = os.path.dirname(__file__) + "/" # edit this if needed def try_player(name): try: return bus.get_object(NS + name, '/org/mpris/MediaPlayer2') except DBusException as e: return False def get_player(): players = ['quodlibet', 'clementine', 'spotify'] for p in players: player = try_player(p) if player: return player Exception('No player found')
def do_activate(self): config = ConfigParser() config.read(os.path.expanduser('~/.config/litome')) self.client = MPDClient() for milliseconds in range(100, 5100, 1000): self.client.timeout = milliseconds / 1000 for section in config.sections(): host = config.get(section, 'host') port = config.getint(section, 'port', fallback=6600) password = config.get(section, 'password', fallback=None) try: self.client.connect(host, port) except BaseException: continue else: if password: self.client.password(password) self.client.timeout = config.getint( section, 'timeout', fallback=self.client.timeout * 10) break else: continue break DBusGMainLoop(set_as_default=True) self.bus = Bus(Bus.TYPE_SESSION) self.bus_object = self.bus.get_object( 'org.gnome.SettingsDaemon.MediaKeys', '/org/gnome/SettingsDaemon/MediaKeys') self.bus_object.GrabMediaPlayerKeys( 'Litome', 0, dbus_interface='org.gnome.SettingsDaemon.MediaKeys') self.bus_object.connect_to_signal('MediaPlayerKeyPressed', self.media_key) self.window = Gtk.ApplicationWindow(application=self) self.window.set_title('Litome') self.window.set_icon_name('audio-x-generic') self.window.connect('destroy', lambda window: sys.exit()) self.header = Gtk.HeaderBar() self.header.set_title('Litome') self.header.set_show_close_button(True) self.window.set_titlebar(self.header) self.play_button = Gtk.Button() self.play_button.add( Gtk.Image.new_from_icon_name('media-playback-start-symbolic', 1)) self.play_button.connect('clicked', lambda button: self.play()) self.header.pack_start(self.play_button) self.pause_button = Gtk.Button() self.pause_button.add( Gtk.Image.new_from_icon_name('media-playback-pause-symbolic', 1)) self.pause_button.connect('clicked', lambda button: self.pause()) self.header.pack_start(self.pause_button) self.volume_button = Gtk.VolumeButton() self.volume_button.use_symbolic = True self.volume_connection = self.volume_button.connect( 'value-changed', lambda button, value: self.set_volume(value)) self.header.pack_start(self.volume_button) self.add_button = Gtk.ToggleButton() self.add_button.add( Gtk.Image.new_from_icon_name('list-add-symbolic', 1)) self.header.pack_end(self.add_button) self.search_entry = Gtk.Entry() self.search_entry.connect('activate', lambda entry: self.search(entry.get_text())) self.search_store = Gtk.ListStore(str, str, str) self.search_menu = Gtk.Popover() self.search_menu.set_relative_to(self.add_button) self.search_menu.set_modal(False) self.add_button.connect( 'toggled', lambda button: self.search_menu.show_all() if button.get_active() else self.search_menu.hide()) self.search_vbox = Gtk.VBox() self.search_vbox.add(self.search_entry) self.search_menu.add(self.search_vbox) self.list_view = Gtk.TreeView() self.list_store = Gtk.ListStore(str, str, str) self.list_view.set_model(self.list_store) self.list_view.set_headers_visible(False) self.list_view.connect( 'row-activated', lambda treeview, path, view: self.play_song(path)) self.list_view.connect( 'key-release-event', lambda treeview, event: self.remove_song(treeview.get_cursor()[0]) if event.keyval == 65535 else None) playing_column = Gtk.TreeViewColumn('') playing_cell = Gtk.CellRendererPixbuf() playing_column.pack_start(playing_cell, True) playing_column.add_attribute(playing_cell, 'icon-name', 1) self.list_view.append_column(playing_column) song_column = Gtk.TreeViewColumn('Song') song_cell = Gtk.CellRendererText() song_column.pack_start(song_cell, True) song_column.add_attribute(song_cell, 'text', 2) song_column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.list_view.append_column(song_column) scroll = Gtk.ScrolledWindow() scroll.add(self.list_view) scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.window.add(scroll) self.window.maximize() self.window.show_all() self.update() self.client.send_idle() GLib.io_add_watch(self.client, GLib.IO_IN, self.update_idle)