diff --git a/bin/mpdevil.py b/bin/mpdevil.py
index b40f2d1..97c4d32 100644
--- a/bin/mpdevil.py
+++ b/bin/mpdevil.py
@@ -25,7 +25,7 @@ gi.require_version('Gtk', '3.0')
gi.require_version('Notify', '0.7')
from gi.repository import Gtk, Gio, Gdk, GdkPixbuf, Pango, GObject, GLib, Notify
from mpd import MPDClient
-import requests #dev-python/requests
+import requests
from bs4 import BeautifulSoup, Comment
import threading
import locale
@@ -35,7 +35,7 @@ import os
import sys
import re
-#MPRIS modules
+# MPRIS modules
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
@@ -118,7 +118,7 @@ class Cover(object):
def get_pixbuf(self, size):
if self.path == None:
- self.path=Gtk.IconTheme.get_default().lookup_icon("mpdevil", size, Gtk.IconLookupFlags.FORCE_SVG).get_filename() #fallback cover
+ self.path=Gtk.IconTheme.get_default().lookup_icon("mpdevil", size, Gtk.IconLookupFlags.FORCE_SVG).get_filename() # fallback cover
return GdkPixbuf.Pixbuf.new_from_file_at_size(self.path, size, size)
class MpdEventEmitter(GObject.Object):
@@ -143,7 +143,7 @@ class MpdEventEmitter(GObject.Object):
def __init__(self):
super().__init__()
- #mpd signals
+ # mpd signals
def do_database(self):
pass
@@ -177,7 +177,7 @@ class MpdEventEmitter(GObject.Object):
def do_message(self):
pass
- #custom signals
+ # custom signals
def do_disconnected(self):
pass
@@ -191,14 +191,14 @@ class MpdEventEmitter(GObject.Object):
pass
class ClientHelper():
- def song_to_str_dict(song): #converts tags with multiple values to comma separated strings
+ def song_to_str_dict(song): # converts tags with multiple values to comma separated strings
return_song=song
for tag, value in return_song.items():
if type(value) == list:
return_song[tag]=(', '.join(value))
return return_song
- def song_to_first_str_dict(song): #extracts the first value of multiple value tags
+ def song_to_first_str_dict(song): # extracts the first value of multiple value tags
return_song=song
for tag, value in return_song.items():
if type(value) == list:
@@ -227,10 +227,10 @@ class Client(MPDClient):
self.settings=settings
self.settings.connect("changed::active-profile", self.on_settings_changed)
- #idle client
+ # idle client
self.idle_client=MPDClient()
- #adding vars
+ # adding vars
self.settings=settings
self.emitter=MpdEventEmitter()
@@ -267,7 +267,7 @@ class Client(MPDClient):
self.moveid(status["songid"], 0)
current_song_file=self.playlistinfo()[0]["file"]
try:
- self.delete((1,)) # delete all songs, but the first. #bad song index possible
+ self.delete((1,)) # delete all songs, but the first. bad song index possible
except:
pass
for f in files:
@@ -280,7 +280,7 @@ class Client(MPDClient):
songs=self.find("album", album, "date", year, self.settings.get_artist_type(), artist)
self.files_to_playlist([song['file'] for song in songs], append, force)
- def comp_list(self, *args): #simulates listing behavior of python-mpd2 1.0
+ def comp_list(self, *args): # simulates listing behavior of python-mpd2 1.0
if "group" in args:
raise ValueError("'group' is not supported")
native_list=self.list(*args)
@@ -293,7 +293,7 @@ class Client(MPDClient):
return([])
def loop(self, *args):
- #idle
+ # idle
try:
try:
idle_return=self.idle_client.noidle()
@@ -311,7 +311,7 @@ class Client(MPDClient):
except:
pass
self.idle_client.send_idle()
- #heartbeat
+ # heartbeat
status=self.status()
if status['state'] == "stop" or status['state'] == "pause":
self.ping()
@@ -351,7 +351,7 @@ class Client(MPDClient):
print("max clients could be too small")
self.diconnect()
return True
- #connect successful
+ # connect successful
self.main_timeout_id=GLib.timeout_add(100, self.loop)
self.emitter.emit("periodic_signal")
self.emitter.emit("playlist")
@@ -363,7 +363,7 @@ class Client(MPDClient):
self.emitter.emit("reconnected")
return False
-class MPRISInterface(dbus.service.Object): #TODO emit Seeked if needed
+class MPRISInterface(dbus.service.Object): # TODO emit Seeked if needed
__introspect_interface="org.freedesktop.DBus.Introspectable"
__prop_interface=dbus.PROPERTIES_IFACE
@@ -514,7 +514,7 @@ class MPRISInterface(dbus.service.Object): #TODO emit Seeked if needed
self.settings=settings
self.metadata={}
- #connect
+ # connect
self.client.emitter.connect("player", self.on_player_changed)
self.client.emitter.connect("playing_file_changed", self.on_file_changed)
self.client.emitter.connect("mixer", self.on_volume_changed)
@@ -536,7 +536,7 @@ class MPRISInterface(dbus.service.Object): #TODO emit Seeked if needed
self.update_property('org.mpris.MediaPlayer2.Player', 'LoopStatus')
self.update_property('org.mpris.MediaPlayer2.Player', 'Shuffle')
- def update_metadata(self): #TODO
+ def update_metadata(self): # TODO
"""
Translate metadata returned by MPD to the MPRIS v2 syntax.
http://www.freedesktop.org/wiki/Specifications/mpris-spec/metadata
@@ -824,7 +824,7 @@ class MPRISInterface(dbus.service.Object): #TODO emit Seeked if needed
return
@dbus.service.method(__player_interface, in_signature='x', out_signature='')
- def Seek(self, offset): #TODO
+ def Seek(self, offset): # TODO
status=self.client.status()
current, end=status['time'].split(':')
current=int(current)
@@ -866,17 +866,17 @@ class Settings(Gio.Settings):
if len(self.get_value("profiles")) < (self.get_int("active-profile")+1):
self.set_int("active-profile", 0)
- def array_append(self, vtype, key, value): #append to Gio.Settings (self.settings) array
+ def array_append(self, vtype, key, value): # append to Gio.Settings (self.settings) array
array=self.get_value(key).unpack()
array.append(value)
self.set_value(key, GLib.Variant(vtype, array))
- def array_delete(self, vtype, key, pos): #delete entry of Gio.Settings (self.settings) array
+ def array_delete(self, vtype, key, pos): # delete entry of Gio.Settings (self.settings) array
array=self.get_value(key).unpack()
array.pop(pos)
self.set_value(key, GLib.Variant(vtype, array))
- def array_modify(self, vtype, key, pos, value): #modify entry of Gio.Settings (self.settings) array
+ def array_modify(self, vtype, key, pos, value): # modify entry of Gio.Settings (self.settings) array
array=self.get_value(key).unpack()
array[pos]=value
self.set_value(key, GLib.Variant(vtype, array))
@@ -900,18 +900,18 @@ class SongPopover(Gtk.Popover):
Gtk.Popover.__init__(self)
rect=Gdk.Rectangle()
rect.x=x
- #Gtk places popovers 26px above the given position for no obvious reasons, so I move them 26px
+ # Gtk places popovers 26px above the given position for no obvious reasons, so I move them 26px
rect.y=y+26
rect.width = 1
rect.height = 1
self.set_pointing_to(rect)
self.set_relative_to(relative)
- #Store
- #(tag, display-value, tooltip)
+ # Store
+ # (tag, display-value, tooltip)
self.store=Gtk.ListStore(str, str, str)
- #TreeView
+ # TreeView
self.treeview=Gtk.TreeView(model=self.store)
self.treeview.set_can_focus(False)
self.treeview.set_search_column(-1)
@@ -924,7 +924,7 @@ class SongPopover(Gtk.Popover):
frame.add(self.treeview)
frame.set_property("border-width", 3)
- #Column
+ # Column
renderer_text=Gtk.CellRendererText(width_chars=50, ellipsize=Pango.EllipsizeMode.MIDDLE, ellipsize_set=True)
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
@@ -936,7 +936,7 @@ class SongPopover(Gtk.Popover):
self.column_value.set_property("resizable", False)
self.treeview.append_column(self.column_value)
- #packing
+ # packing
self.add(frame)
song=ClientHelper.song_to_str_dict(song)
@@ -950,8 +950,6 @@ class SongPopover(Gtk.Popover):
else:
self.store.append([tag+":", value, tooltip])
frame.show_all()
-# self.popup()
-# self.treeview.queue_resize()
class SongsView(Gtk.TreeView):
def __init__(self, client, store, file_column_id):
@@ -960,16 +958,16 @@ class SongsView(Gtk.TreeView):
self.set_search_column(-1)
self.columns_autosize()
- #add vars
+ # add vars
self.client=client
self.store=store
self.file_column_id=file_column_id
- #selection
+ # selection
self.selection=self.get_selection()
self.selection.set_mode(Gtk.SelectionMode.SINGLE)
- #connect
+ # connect
self.connect("row-activated", self.on_row_activated)
self.connect("button-press-event", self.on_button_press_event)
self.key_press_event=self.connect("key-press-event", self.on_key_press_event)
@@ -1002,15 +1000,15 @@ class SongsView(Gtk.TreeView):
def on_key_press_event(self, widget, event):
self.handler_block(self.key_press_event)
- if event.keyval == 112: #p
+ if event.keyval == 112: # p
treeview, treeiter=self.selection.get_selected()
if not treeiter == None:
self.client.files_to_playlist([self.store.get_value(treeiter, self.file_column_id)], False)
- elif event.keyval == 97: #a
+ elif event.keyval == 97: # a
treeview, treeiter=self.selection.get_selected()
if not treeiter == None:
self.client.files_to_playlist([self.store.get_value(treeiter, self.file_column_id)], True)
- elif event.keyval == 65383: #menu key
+ elif event.keyval == 65383: # menu key
treeview, treeiter=self.selection.get_selected()
if not treeiter == None:
path=self.store.get_path(treeiter)
@@ -1038,35 +1036,35 @@ class AlbumDialog(Gtk.Dialog):
Gtk.Dialog.__init__(self, transient_for=parent)
self.add_buttons(Gtk.STOCK_ADD, Gtk.ResponseType.ACCEPT, Gtk.STOCK_MEDIA_PLAY, Gtk.ResponseType.YES, Gtk.STOCK_OPEN, Gtk.ResponseType.OK, Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)
- #metadata
+ # metadata
self.album=album
self.artist=artist
self.year=year
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
songs=self.client.find("album", self.album, "date", self.year, self.settings.get_artist_type(), self.artist)
- #determine size
+ # determine size
size=parent.get_size()
diagonal=(size[0]**2+size[1]**2)**(0.5)
h=diagonal//4
w=h*5//4
self.set_default_size(w, h)
- #title
+ # title
album_duration=ClientHelper.calc_display_length(songs)
if year == "":
self.set_title(artist+" - "+album+" ("+album_duration+")")
else:
self.set_title(artist+" - "+album+" ("+year+") ("+album_duration+")")
- #store
- #(track, title (artist), duration, file)
+ # store
+ # (track, title (artist), duration, file)
self.store=Gtk.ListStore(int, str, str, str)
- #songs view
+ # songs view
self.songs_view=SongsView(self.client, self.store, 3)
for s in songs:
song=ClientHelper.extend_song_for_display(s)
@@ -1089,7 +1087,7 @@ class AlbumDialog(Gtk.Dialog):
title_artist=title_artist.replace("&", "&")
self.store.append([int(song["track"]), title_artist, song["human_duration"], song["file"]])
- #columns
+ # columns
renderer_text=Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END, ellipsize_set=True)
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
@@ -1109,13 +1107,13 @@ class AlbumDialog(Gtk.Dialog):
self.column_time.set_property("resizable", False)
self.songs_view.append_column(self.column_time)
- #scroll
+ # scroll
scroll=Gtk.ScrolledWindow()
scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scroll.add(self.songs_view)
- #packing
- self.vbox.pack_start(scroll, True, True, 0) #vbox default widget of dialogs
+ # packing
+ self.vbox.pack_start(scroll, True, True, 0) # vbox default widget of dialogs
self.vbox.set_spacing(3)
self.show_all()
@@ -1132,11 +1130,11 @@ class GenreSelect(Gtk.ComboBoxText):
def __init__(self, client, settings):
Gtk.ComboBoxText.__init__(self)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
- #connect
+ # connect
self.changed=self.connect("changed", self.on_changed)
self.update_signal=self.client.emitter.connect("update", self.refresh)
@@ -1172,26 +1170,26 @@ class ArtistView(FocusFrame):
def __init__(self, client, settings, genre_select):
FocusFrame.__init__(self)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.genre_select=genre_select
- #artistStore
- #(name, weight, initial-letter, weight-initials)
+ # artistStore
+ # (name, weight, initial-letter, weight-initials)
self.store=Gtk.ListStore(str, Pango.Weight, str, Pango.Weight)
- #TreeView
+ # TreeView
self.treeview=Gtk.TreeView(model=self.store)
self.treeview.set_search_column(0)
self.treeview.columns_autosize()
self.treeview.set_property("activate-on-single-click", True)
- #artistSelection
+ # artistSelection
self.selection=self.treeview.get_selection()
self.selection.set_mode(Gtk.SelectionMode.SINGLE)
- #Columns
+ # Columns
renderer_text_malign=Gtk.CellRendererText(xalign=0.5)
self.column_initials=Gtk.TreeViewColumn("", renderer_text_malign, text=2, weight=3)
self.column_initials.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
@@ -1205,12 +1203,12 @@ class ArtistView(FocusFrame):
self.column_name.set_property("resizable", False)
self.treeview.append_column(self.column_name)
- #scroll
+ # scroll
scroll=Gtk.ScrolledWindow()
scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scroll.add(self.treeview)
- #connect
+ # connect
self.treeview.connect("row-activated", self.on_row_activated)
self.settings.connect("changed::use-album-artist", self.refresh)
self.settings.connect("changed::show-initials", self.on_show_initials_settings_changed)
@@ -1271,7 +1269,7 @@ class ArtistView(FocusFrame):
break
def on_row_activated(self, widget, path, view_column):
- for row in self.store: #reset bold text
+ for row in self.store: # reset bold text
row[1]=Pango.Weight.BOOK
self.store[path][1]=Pango.Weight.BOLD
self.emit("artists_changed")
@@ -1283,7 +1281,7 @@ class AlbumIconView(Gtk.IconView):
def __init__(self, client, settings, genre_select, window):
Gtk.IconView.__init__(self)
- #adding vars
+ # adding vars
self.settings=settings
self.client=client
self.genre_select=genre_select
@@ -1291,18 +1289,18 @@ class AlbumIconView(Gtk.IconView):
self.stop_flag=True
self.button_event=(None, None)
- #cover, display_label, display_label_artist, tooltip(titles), album, year, artist
+ # cover, display_label, display_label_artist, tooltip(titles), album, year, artist
self.store=Gtk.ListStore(GdkPixbuf.Pixbuf, str, str, str, str, str, str)
self.sort_settings()
- #iconview
+ # iconview
self.set_model(self.store)
self.set_pixbuf_column(0)
self.set_markup_column(1)
self.set_item_width(0)
self.tooltip_settings()
- #connect
+ # connect
self.connect("item-activated", self.on_item_activated)
self.connect("button-release-event", self.on_button_release_event)
self.connect("button-press-event", self.on_button_press_event)
@@ -1335,7 +1333,7 @@ class AlbumIconView(Gtk.IconView):
def populate(self, artists):
self.stop_flag=False
- #prepare albmus list
+ # prepare albmus list
self.store.clear()
if len(artists) > 1:
self.set_markup_column(2)
@@ -1345,7 +1343,7 @@ class AlbumIconView(Gtk.IconView):
genre=self.genre_select.get_value()
artist_type=self.settings.get_artist_type()
for artist in artists:
- try: #client cloud meanwhile disconnect
+ try: # client cloud meanwhile disconnect
if not self.stop_flag:
if genre == None:
album_candidates=self.client.comp_list("album", artist_type, artist)
@@ -1364,7 +1362,7 @@ class AlbumIconView(Gtk.IconView):
except:
GLib.idle_add(self.emit, "done")
return
- #display albums
+ # display albums
if self.settings.get_boolean("sort-albums-by-year"):
albums=sorted(albums, key=lambda k: k['year'])
else:
@@ -1374,7 +1372,7 @@ class AlbumIconView(Gtk.IconView):
for i, album in enumerate(albums):
if not self.stop_flag:
cover=Cover(lib_path=music_lib, song_file=album["songs"][0]["file"])
- #tooltip
+ # tooltip
length_human_readable=ClientHelper.calc_display_length(album["songs"])
try:
discs=int(album["songs"][-1]["disc"])
@@ -1444,15 +1442,15 @@ class AlbumIconView(Gtk.IconView):
def on_key_press_event(self, widget, event):
self.handler_block(self.key_press_event)
- if event.keyval == 112: #p
+ if event.keyval == 112: # p
paths=self.get_selected_items()
if not len(paths) == 0:
self.path_to_playlist(paths[0], False)
- elif event.keyval == 97: #a
+ elif event.keyval == 97: # a
paths=self.get_selected_items()
if not len(paths) == 0:
self.path_to_playlist(paths[0], True)
- elif event.keyval == 65383: #menu key
+ elif event.keyval == 65383: # menu key
paths=self.get_selected_items()
if not len(paths) == 0:
self.open_album_dialog(paths[0])
@@ -1469,7 +1467,7 @@ class AlbumView(FocusFrame):
def __init__(self, client, settings, genre_select, window):
FocusFrame.__init__(self)
- #adding vars
+ # adding vars
self.settings=settings
self.client=client
self.genre_select=genre_select
@@ -1478,15 +1476,15 @@ class AlbumView(FocusFrame):
self.done=True
self.pending=[]
- #iconview
+ # iconview
self.iconview=AlbumIconView(self.client, self.settings, self.genre_select, self.window)
- #scroll
+ # scroll
scroll=Gtk.ScrolledWindow()
scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scroll.add(self.iconview)
- #connect
+ # connect
self.settings.connect("changed::album-cover", self.on_settings_changed)
self.iconview.connect("done", self.on_done)
self.client.emitter.connect("update", self.clear)
@@ -1537,33 +1535,33 @@ class AlbumView(FocusFrame):
class MainCover(Gtk.Frame):
def __init__(self, client, settings, window):
Gtk.Frame.__init__(self)
- #diable auto resize
+ # diable auto resize
self.set_halign(3)
self.set_valign(3)
- #css
+ # css
style_context=self.get_style_context()
provider=Gtk.CssProvider()
css=b"""* {background-color: @theme_base_color; border-radius: 6px;}"""
provider.load_from_data(css)
style_context.add_provider(provider, 800)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.window=window
- #event box
+ # event box
event_box=Gtk.EventBox()
event_box.set_property("border-width", 6)
- #cover
+ # cover
self.cover=Gtk.Image.new()
size=self.settings.get_int("track-cover")
- self.cover.set_from_pixbuf(Cover(lib_path=self.settings.get_value("paths")[self.settings.get_int("active-profile")], song_file=None).get_pixbuf(size)) #set to fallback cover
- #set default size
+ self.cover.set_from_pixbuf(Cover(lib_path=self.settings.get_value("paths")[self.settings.get_int("active-profile")], song_file=None).get_pixbuf(size)) # set to fallback cover
+ # set default size
self.cover.set_size_request(size, size)
- #connect
+ # connect
event_box.connect("button-press-event", self.on_button_press_event)
self.client.emitter.connect("playing_file_changed", self.refresh)
self.settings.connect("changed::track-cover", self.on_settings_changed)
@@ -1621,25 +1619,25 @@ class PlaylistView(Gtk.Box):
def __init__(self, client, settings):
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.playlist_version=None
- #Store
- #(track, disc, title, artist, album, duration, date, genre, file, weight)
+ # Store
+ # (track, disc, title, artist, album, duration, date, genre, file, weight)
self.store=Gtk.ListStore(str, str, str, str, str, str, str, str, str, Pango.Weight)
- #TreeView
+ # TreeView
self.treeview=Gtk.TreeView(model=self.store)
self.treeview.set_search_column(2)
self.treeview.set_property("activate-on-single-click", True)
- #selection
+ # selection
self.selection=self.treeview.get_selection()
self.selection.set_mode(Gtk.SelectionMode.SINGLE)
- #Column
+ # Column
renderer_text=Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END, ellipsize_set=True)
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
self.columns=[None, None, None, None, None, None, None, None]
@@ -1670,35 +1668,35 @@ class PlaylistView(Gtk.Box):
self.load_settings()
- #scroll
+ # scroll
scroll=Gtk.ScrolledWindow()
scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scroll.add(self.treeview)
- #frame
+ # frame
frame=FocusFrame()
frame.set_widget(self.treeview)
frame.add(scroll)
- #audio infos
+ # audio infos
audio=AudioType(self.client)
audio.set_margin_end(3)
audio.set_xalign(1)
audio.set_ellipsize(Pango.EllipsizeMode.END)
- #playlist info
+ # playlist info
self.playlist_info=Gtk.Label()
self.playlist_info.set_margin_start(3)
self.playlist_info.set_xalign(0)
self.playlist_info.set_ellipsize(Pango.EllipsizeMode.END)
- #status bar
+ # status bar
status_bar=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=12)
status_bar.set_property("border-width", 3)
status_bar.pack_start(self.playlist_info, True, True, 0)
status_bar.pack_end(audio, False, False, 0)
- #connect
+ # connect
self.treeview.connect("row-activated", self.on_row_activated)
self.key_press_event=self.treeview.connect("key-press-event", self.on_key_press_event)
self.treeview.connect("button-press-event", self.on_button_press_event)
@@ -1710,12 +1708,12 @@ class PlaylistView(Gtk.Box):
self.settings.connect("changed::column-visibilities", self.load_settings)
self.settings.connect("changed::column-permutation", self.load_settings)
- #packing
+ # packing
self.pack_start(frame, True, True, 0)
self.pack_start(Gtk.Separator.new(orientation=Gtk.Orientation.HORIZONTAL), False, False, 0)
self.pack_end(status_bar, False, False, 0)
- def save_settings(self): #only saves the column sizes
+ def save_settings(self): # only saves the column sizes
columns=self.treeview.get_columns()
permutation=self.settings.get_value("column-permutation").unpack()
sizes=[0] * len(permutation)
@@ -1749,9 +1747,9 @@ class PlaylistView(Gtk.Box):
else:
self.playlist_info.set_text("")
- def refresh_selection(self): #Gtk.TreePath(len(self.store) is used to generate an invalid TreePath (needed to unset cursor)
+ def refresh_selection(self): # Gtk.TreePath(len(self.store) is used to generate an invalid TreePath (needed to unset cursor)
self.treeview.set_cursor(Gtk.TreePath(len(self.store)), None, False)
- for row in self.store: #reset bold text
+ for row in self.store: # reset bold text
row[9]=Pango.Weight.BOOK
try:
song=self.client.status()["song"]
@@ -1768,13 +1766,13 @@ class PlaylistView(Gtk.Box):
self.playlist_version=None
def remove_song(self, path):
- self.client.delete(path) #bad song index possible
+ self.client.delete(path) # bad song index possible
self.store.remove(self.store.get_iter(path))
self.playlist_version=self.client.status()["playlist"]
def on_key_press_event(self, widget, event):
self.treeview.handler_block(self.key_press_event)
- if event.keyval == 65535: #entf
+ if event.keyval == 65535: # entf
treeview, treeiter=self.selection.get_selected()
if not treeiter == None:
path=self.store.get_path(treeiter)
@@ -1782,7 +1780,7 @@ class PlaylistView(Gtk.Box):
self.remove_song(path)
except:
pass
- elif event.keyval == 65383: #menu key
+ elif event.keyval == 65383: # menu key
treeview, treeiter=self.selection.get_selected()
if not treeiter == None:
path=self.store.get_path(treeiter)
@@ -1844,23 +1842,23 @@ class CoverLyricsOSD(Gtk.Overlay):
def __init__(self, client, settings, window):
Gtk.Overlay.__init__(self)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.window=window
- #cover
+ # cover
self.cover=MainCover(self.client, self.settings, self.window)
self.cover.set_property("border-width", 3)
- #lyrics button
+ # lyrics button
self.lyrics_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("media-view-subtitles-symbolic", Gtk.IconSize.BUTTON))
self.lyrics_button.set_tooltip_text(_("Show lyrics"))
style_context=self.lyrics_button.get_style_context()
style_context.add_class("circular")
- #revealer
- #workaround to get tooltips in overlay
+ # revealer
+ # workaround to get tooltips in overlay
self.revealer=Gtk.Revealer()
self.revealer.set_halign(2)
self.revealer.set_valign(1)
@@ -1868,21 +1866,21 @@ class CoverLyricsOSD(Gtk.Overlay):
self.revealer.set_margin_end(6)
self.revealer.add(self.lyrics_button)
- #event box
+ # event box
self.event_box=Gtk.EventBox()
self.event_box.add(self.cover)
- #packing
+ # packing
self.add(self.event_box)
self.add_overlay(self.revealer)
- #connect
+ # connect
self.lyrics_button.connect("clicked", self.on_lyrics_clicked)
self.client.emitter.connect("disconnected", self.on_disconnected)
self.client.emitter.connect("reconnected", self.on_reconnected)
self.settings.connect("changed::show-lyrics-button", self.on_settings_changed)
- self.on_settings_changed() #hide lyrics button
+ self.on_settings_changed() # hide lyrics button
def show_lyrics(self, *args):
if self.lyrics_button.get_sensitive():
@@ -1915,18 +1913,18 @@ class CoverLyricsOSD(Gtk.Overlay):
class CoverPlaylistView(Gtk.Paned):
def __init__(self, client, settings, window):
- Gtk.Paned.__init__(self) #paned0
+ Gtk.Paned.__init__(self) # paned0
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.window=window
- #widgets
+ # widgets
self.cover=CoverLyricsOSD(self.client, self.settings, self.window)
self.playlist_view=PlaylistView(self.client, self.settings)
- #packing
+ # packing
self.pack1(self.cover, False, False)
self.pack2(self.playlist_view, True, False)
@@ -1941,10 +1939,10 @@ class CoverPlaylistView(Gtk.Paned):
class Browser(Gtk.Paned):
def __init__(self, client, settings, window):
- Gtk.Paned.__init__(self) #paned1
+ Gtk.Paned.__init__(self) # paned1
self.set_orientation(Gtk.Orientation.HORIZONTAL)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.window=window
@@ -1955,7 +1953,7 @@ class Browser(Gtk.Paned):
else:
self.icon_size=self.settings.get_int("icon-size")
- #widgets
+ # widgets
self.icons={}
icons_data=["go-previous-symbolic", "system-search-symbolic"]
for data in icons_data:
@@ -1970,7 +1968,7 @@ class Browser(Gtk.Paned):
self.search=SearchWindow(self.client)
self.album_view=AlbumView(self.client, self.settings, self.genre_select, self.window)
- #connect
+ # connect
self.back_to_album_button.connect("clicked", self.back_to_album)
self.search_button.connect("toggled", self.on_search_toggled)
self.artist_view.connect("artists_changed", self.on_artists_changed)
@@ -1979,7 +1977,7 @@ class Browser(Gtk.Paned):
self.client.emitter.connect("disconnected", self.on_disconnected)
self.client.emitter.connect("reconnected", self.on_reconnected)
- #packing
+ # packing
self.stack=Gtk.Stack()
self.stack.set_transition_type(1)
self.stack.add_named(self.album_view, "albums")
@@ -2015,7 +2013,7 @@ class Browser(Gtk.Paned):
return self.search.started()
def back_to_album(self, *args):
- try: #since this can still be running when the connection is lost, various exceptions can occur
+ try: # since this can still be running when the connection is lost, various exceptions can occur
song=ClientHelper.song_to_first_str_dict(self.client.currentsong())
try:
artist=song[self.settings.get_artist_type()]
@@ -2026,9 +2024,9 @@ class Browser(Gtk.Paned):
artist=""
try:
if not song['genre'] == self.genre_select.get_value():
- self.genre_select.deactivate() #deactivate genre filter to show all artists
+ self.genre_select.deactivate() # deactivate genre filter to show all artists
except:
- self.genre_select.deactivate() #deactivate genre filter to show all artists
+ self.genre_select.deactivate() # deactivate genre filter to show all artists
if len(self.artist_view.get_selected_artists()) <= 1:
row_num=len(self.artist_view.store)
for i in range(0, row_num):
@@ -2043,7 +2041,7 @@ class Browser(Gtk.Paned):
break
else:
self.search_button.set_active(False)
- self.artist_view.treeview.set_cursor(Gtk.TreePath(0), None, False) #set cursor to 'all artists'
+ self.artist_view.treeview.set_cursor(Gtk.TreePath(0), None, False) # set cursor to 'all artists'
self.album_view.scroll_to_selected_album()
except:
pass
@@ -2084,11 +2082,11 @@ class ProfileSettings(Gtk.Grid):
self.set_column_spacing(12)
self.set_property("border-width", 18)
- #adding vars
+ # adding vars
self.settings=settings
- self.gui_modification=False #indicates whether the settings where changed from the settings dialog
+ self.gui_modification=False # indicates whether the settings where changed from the settings dialog
- #widgets
+ # widgets
self.profiles_combo=Gtk.ComboBoxText()
self.profiles_combo.set_entry_text_column(0)
@@ -2124,7 +2122,7 @@ class ProfileSettings(Gtk.Grid):
path_label=Gtk.Label(label=_("Music lib:"))
path_label.set_xalign(1)
- #connect
+ # connect
add_button.connect("clicked", self.on_add_button_clicked)
delete_button.connect("clicked", self.on_delete_button_clicked)
self.path_select_button.connect("clicked", self.on_path_select_button_clicked, parent)
@@ -2146,7 +2144,7 @@ class ProfileSettings(Gtk.Grid):
self.profiles_combo_reload()
self.profiles_combo.set_active(0)
- #packing
+ # packing
self.add(profiles_label)
self.attach_next_to(profile_label, profiles_label, Gtk.PositionType.BOTTOM, 1, 1)
self.attach_next_to(host_label, profile_label, Gtk.PositionType.BOTTOM, 1, 1)
@@ -2263,11 +2261,11 @@ class GeneralSettings(Gtk.Box):
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.set_property("border-width", 18)
- #adding vars
+ # adding vars
self.settings=settings
self.settings_handlers=[]
- #int_settings
+ # int_settings
int_settings={}
int_settings_data=[(_("Main cover size:"), (100, 1200, 10), "track-cover"),\
(_("Album view cover size:"), (50, 600, 10), "album-cover"),\
@@ -2279,7 +2277,7 @@ class GeneralSettings(Gtk.Box):
int_settings[data[2]][1].connect("value-changed", self.on_int_changed, data[2])
self.settings_handlers.append(self.settings.connect("changed::"+data[2], self.on_int_settings_changed, int_settings[data[2]][1]))
- #combo_settings
+ # combo_settings
combo_settings={}
combo_settings_data=[(_("Sort albums by:"), _("name"), _("year"), "sort-albums-by-year"), \
(_("Position of playlist:"), _("bottom"), _("right"), "playlist-right")]
@@ -2297,7 +2295,7 @@ class GeneralSettings(Gtk.Box):
combo_settings[data[3]][1].connect("changed", self.on_combo_changed, data[3])
self.settings_handlers.append(self.settings.connect("changed::"+data[3], self.on_combo_settings_changed, combo_settings[data[3]][1]))
- #check buttons
+ # check buttons
check_buttons={}
check_buttons_data=[(_("Use Client-side decoration"), "use-csd"), \
(_("Show stop button"), "show-stop"), \
@@ -2316,7 +2314,7 @@ class GeneralSettings(Gtk.Box):
check_buttons[data[1]].connect("toggled", self.on_toggled, data[1])
self.settings_handlers.append(self.settings.connect("changed::"+data[1], self.on_check_settings_changed, check_buttons[data[1]]))
- #headings
+ # headings
view_heading=Gtk.Label()
view_heading.set_markup(_("View"))
view_heading.set_xalign(0)
@@ -2324,7 +2322,7 @@ class GeneralSettings(Gtk.Box):
behavior_heading.set_markup(_("Behavior"))
behavior_heading.set_xalign(0)
- #view grid
+ # view grid
view_grid=Gtk.Grid()
view_grid.set_row_spacing(6)
view_grid.set_column_spacing(12)
@@ -2338,7 +2336,7 @@ class GeneralSettings(Gtk.Box):
view_grid.attach_next_to(int_settings["icon-size"][1], int_settings["icon-size"][0], Gtk.PositionType.RIGHT, 1, 1)
view_grid.attach_next_to(combo_settings["playlist-right"][1], combo_settings["playlist-right"][0], Gtk.PositionType.RIGHT, 1, 1)
- #behavior grid
+ # behavior grid
behavior_grid=Gtk.Grid()
behavior_grid.set_row_spacing(6)
behavior_grid.set_column_spacing(12)
@@ -2346,10 +2344,10 @@ class GeneralSettings(Gtk.Box):
behavior_grid.add(combo_settings["sort-albums-by-year"][0])
behavior_grid.attach_next_to(combo_settings["sort-albums-by-year"][1], combo_settings["sort-albums-by-year"][0], Gtk.PositionType.RIGHT, 1, 1)
- #connect
+ # connect
self.connect("destroy", self.remove_handlers)
- #packing
+ # packing
box=Gtk.Box(spacing=12)
box.pack_start(check_buttons["use-csd"], False, False, 0)
box.pack_start(Gtk.Label(label=_("(restart required)"), sensitive=False), False, False, 0)
@@ -2401,28 +2399,28 @@ class PlaylistSettings(Gtk.Box):
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.set_property("border-width", 18)
- #adding vars
+ # adding vars
self.settings=settings
- #label
+ # label
label=Gtk.Label(label=_("Choose the order of information to appear in the playlist:"))
label.set_line_wrap(True)
label.set_xalign(0)
- #Store
- #(toggle, header, actual_index)
+ # Store
+ # (toggle, header, actual_index)
self.store=Gtk.ListStore(bool, str, int)
- #TreeView
+ # TreeView
self.treeview=Gtk.TreeView(model=self.store)
self.treeview.set_search_column(-1)
self.treeview.set_reorderable(True)
self.treeview.set_headers_visible(False)
- #selection
+ # selection
self.selection=self.treeview.get_selection()
- #Column
+ # Column
renderer_text=Gtk.CellRendererText()
renderer_toggle=Gtk.CellRendererToggle()
@@ -2432,18 +2430,18 @@ class PlaylistSettings(Gtk.Box):
column_text=Gtk.TreeViewColumn("", renderer_text, text=1)
self.treeview.append_column(column_text)
- #fill store
+ # fill store
self.headers=[_("No"), _("Disc"), _("Title"), _("Artist"), _("Album"), _("Length"), _("Year"), _("Genre")]
self.fill()
- #scroll
+ # scroll
scroll=Gtk.ScrolledWindow()
scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scroll.add(self.treeview)
frame=Gtk.Frame()
frame.add(scroll)
- #Toolbar
+ # Toolbar
toolbar=Gtk.Toolbar()
style_context=toolbar.get_style_context()
style_context.add_class("inline-toolbar")
@@ -2454,12 +2452,12 @@ class PlaylistSettings(Gtk.Box):
toolbar.insert(self.up_button, 0)
toolbar.insert(self.down_button, 1)
- #column chooser
+ # column chooser
column_chooser=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
column_chooser.pack_start(frame, True, True, 0)
column_chooser.pack_start(toolbar, False, False, 0)
- #connect
+ # connect
self.row_deleted=self.store.connect("row-deleted", self.save_permutation)
renderer_toggle.connect("toggled", self.on_cell_toggled)
self.up_button.connect("clicked", self.on_up_button_clicked)
@@ -2470,7 +2468,7 @@ class PlaylistSettings(Gtk.Box):
self.settings_handlers.append(self.settings.connect("changed::column-permutation", self.on_permutation_changed))
self.connect("destroy", self.remove_handlers)
- #packing
+ # packing
self.pack_start(label, False, False, 0)
self.pack_start(column_chooser, True, True, 0)
@@ -2551,20 +2549,20 @@ class SettingsDialog(Gtk.Dialog):
self.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK)
self.set_default_size(500, 400)
- #adding vars
+ # adding vars
self.settings=settings
- #widgets
+ # widgets
general=GeneralSettings(self.settings)
profiles=ProfileSettings(parent, self.settings)
playlist=PlaylistSettings(self.settings)
- #packing
+ # packing
tabs=Gtk.Notebook()
tabs.append_page(general, Gtk.Label(label=_("General")))
tabs.append_page(profiles, Gtk.Label(label=_("Profiles")))
tabs.append_page(playlist, Gtk.Label(label=_("Playlist")))
- self.vbox.pack_start(tabs, True, True, 0) #vbox default widget of dialogs
+ self.vbox.pack_start(tabs, True, True, 0) # vbox default widget of dialogs
self.vbox.set_spacing(3)
self.show_all()
@@ -2574,12 +2572,12 @@ class ClientControl(Gtk.ButtonBox):
Gtk.ButtonBox.__init__(self, spacing=6)
self.set_property("layout-style", Gtk.ButtonBoxStyle.EXPAND)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.icon_size=self.settings.get_int("icon-size")
- #widgets
+ # widgets
self.icons={}
icons_data=["media-playback-start-symbolic", "media-playback-stop-symbolic", "media-playback-pause-symbolic", \
"media-skip-backward-symbolic", "media-skip-forward-symbolic"]
@@ -2591,7 +2589,7 @@ class ClientControl(Gtk.ButtonBox):
self.prev_button=Gtk.Button(image=self.icons["media-skip-backward-symbolic"])
self.next_button=Gtk.Button(image=self.icons["media-skip-forward-symbolic"])
- #connect
+ # connect
self.play_button.connect("clicked", self.on_play_clicked)
self.stop_button.connect("clicked", self.on_stop_clicked)
self.prev_button.connect("clicked", self.on_prev_clicked)
@@ -2600,7 +2598,7 @@ class ClientControl(Gtk.ButtonBox):
self.settings.connect("changed::icon-size", self.on_icon_size_changed)
self.client.emitter.connect("player", self.refresh)
- #packing
+ # packing
self.pack_start(self.prev_button, True, True, 0)
self.pack_start(self.play_button, True, True, 0)
if self.settings.get_boolean("show-stop"):
@@ -2668,48 +2666,48 @@ class SeekBar(Gtk.Box):
Gtk.Box.__init__(self)
self.set_hexpand(True)
- #adding vars
+ # adding vars
self.client=client
- self.seek_time="10" #seek increment in seconds
+ self.seek_time="10" # seek increment in seconds
self.update=True
self.jumped=False
- #labels
+ # labels
self.elapsed=Gtk.Label()
self.elapsed.set_width_chars(5)
self.rest=Gtk.Label()
self.rest.set_width_chars(6)
- #progress bar
+ # progress bar
self.scale=Gtk.Scale.new_with_range(orientation=Gtk.Orientation.HORIZONTAL, min=0, max=100, step=0.001)
self.scale.set_show_fill_level(True)
self.scale.set_restrict_to_fill_level(False)
self.scale.set_draw_value(False)
- #css (scale)
+ # css (scale)
style_context=self.scale.get_style_context()
provider=Gtk.CssProvider()
css=b"""scale fill { background-color: @theme_selected_bg_color; }"""
provider.load_from_data(css)
style_context.add_provider(provider, 800)
- #event boxes
+ # event boxes
self.elapsed_event_box=Gtk.EventBox()
self.rest_event_box=Gtk.EventBox()
- #connect
+ # connect
self.elapsed_event_box.connect("button-press-event", self.on_elapsed_button_press_event)
self.rest_event_box.connect("button-press-event", self.on_rest_button_press_event)
self.scale.connect("change-value", self.on_change_value)
- self.scale.connect("scroll-event", self.dummy) #disable mouse wheel
+ self.scale.connect("scroll-event", self.dummy) # disable mouse wheel
self.scale.connect("button-press-event", self.on_scale_button_press_event)
self.scale.connect("button-release-event", self.on_scale_button_release_event)
self.client.emitter.connect("disconnected", self.disable)
self.client.emitter.connect("player", self.on_player)
- #periodic_signal
+ # periodic_signal
self.periodic_signal=self.client.emitter.connect("periodic_signal", self.refresh)
- #packing
+ # packing
self.elapsed_event_box.add(self.elapsed)
self.rest_event_box.add(self.rest)
self.pack_start(self.elapsed_event_box, False, False, 0)
@@ -2730,7 +2728,7 @@ class SeekBar(Gtk.Box):
def on_scale_button_release_event(self, widget, event):
if event.button == 1:
- if self.jumped: #actual seek
+ if self.jumped: # actual seek
status=self.client.status()
duration=float(status["duration"])
factor=(self.scale.get_value()/100)
@@ -2741,7 +2739,7 @@ class SeekBar(Gtk.Box):
self.update=True
self.refresh()
- def on_change_value(self, range, scroll, value): #value is inaccurate
+ def on_change_value(self, range, scroll, value): # value is inaccurate
if scroll == Gtk.ScrollType.STEP_BACKWARD:
self.seek_backward()
elif scroll == Gtk.ScrollType.STEP_FORWARD:
@@ -2750,7 +2748,7 @@ class SeekBar(Gtk.Box):
status=self.client.status()
duration=float(status["duration"])
factor=(value/100)
- if factor > 1: #fix display error
+ if factor > 1: # fix display error
factor=1
elapsed=(factor*duration)
self.elapsed.set_text(str(datetime.timedelta(seconds=int(elapsed))).lstrip("0").lstrip(":"))
@@ -2793,7 +2791,7 @@ class SeekBar(Gtk.Box):
status=self.client.status()
if status['state'] == "stop":
self.disable()
- elif status['state'] == "pause": #needed for seeking in paused state
+ elif status['state'] == "pause": # needed for seeking in paused state
self.enable()
self.refresh()
else:
@@ -2804,7 +2802,7 @@ class SeekBar(Gtk.Box):
status=self.client.status()
duration=float(status["duration"])
elapsed=float(status["elapsed"])
- if elapsed > duration: #fix display error
+ if elapsed > duration: # fix display error
elapsed=duration
fraction=(elapsed/duration)*100
if self.update:
@@ -2819,12 +2817,12 @@ class PlaybackOptions(Gtk.Box):
def __init__(self, client, settings):
Gtk.Box.__init__(self, spacing=6)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
self.icon_size=self.settings.get_int("icon-size")
- #widgets
+ # widgets
self.icons={}
icons_data=["media-playlist-shuffle-symbolic", "media-playlist-repeat-symbolic", "zoom-original-symbolic", "edit-cut-symbolic"]
for data in icons_data:
@@ -2842,7 +2840,7 @@ class PlaybackOptions(Gtk.Box):
self.volume.set_property("use-symbolic", True)
self.volume.set_property("size", self.settings.get_gtk_icon_size("icon-size"))
- #connect
+ # connect
self.random_toggled=self.random.connect("toggled", self.set_random)
self.repeat_toggled=self.repeat.connect("toggled", self.set_repeat)
self.single_toggled=self.single.connect("toggled", self.set_single)
@@ -2852,7 +2850,7 @@ class PlaybackOptions(Gtk.Box):
self.mixer_changed=self.client.emitter.connect("mixer", self.mixer_refresh)
self.settings.connect("changed::icon-size", self.on_icon_size_changed)
- #packing
+ # packing
ButtonBox=Gtk.ButtonBox()
ButtonBox.set_property("layout-style", Gtk.ButtonBoxStyle.EXPAND)
ButtonBox.pack_start(self.repeat, True, True, 0)
@@ -2935,10 +2933,10 @@ class AudioType(Gtk.Label):
def __init__(self, client):
Gtk.Label.__init__(self)
- #adding vars
+ # adding vars
self.client=client
- #connect
+ # connect
self.client.emitter.connect("periodic_signal", self.refresh) # periodic_signal
self.client.emitter.connect("disconnected", self.clear)
self.client.emitter.connect("player", self.on_player)
@@ -2967,11 +2965,11 @@ class ProfileSelect(Gtk.ComboBoxText):
def __init__(self, client, settings):
Gtk.ComboBoxText.__init__(self)
- #adding vars
+ # adding vars
self.client=client
self.settings=settings
- #connect
+ # connect
self.changed=self.connect("changed", self.on_changed)
self.settings.connect("changed::profiles", self.refresh)
self.settings.connect("changed::hosts", self.refresh)
@@ -2998,24 +2996,24 @@ class ServerStats(Gtk.Dialog):
Gtk.Dialog.__init__(self, title=_("Stats"), transient_for=parent)
self.add_buttons(Gtk.STOCK_OK, Gtk.ResponseType.OK)
- #adding vars
+ # adding vars
self.client=client
- #Store
- #(tag, value)
+ # Store
+ # (tag, value)
self.store=Gtk.ListStore(str, str)
- #TreeView
+ # TreeView
self.treeview=Gtk.TreeView(model=self.store)
self.treeview.set_can_focus(False)
self.treeview.set_search_column(-1)
self.treeview.set_headers_visible(False)
- #selection
+ # selection
sel=self.treeview.get_selection()
sel.set_mode(Gtk.SelectionMode.NONE)
- #Column
+ # Column
renderer_text=Gtk.CellRendererText()
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
@@ -3047,28 +3045,28 @@ class SearchWindow(Gtk.Box):
def __init__(self, client):
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
- #adding vars
+ # adding vars
self.client=client
- #tag switcher
+ # tag switcher
self.tags=Gtk.ComboBoxText()
- #search entry
+ # search entry
self.search_entry=Gtk.SearchEntry()
- #label
+ # label
self.label=Gtk.Label()
self.label.set_xalign(1)
self.label.set_margin_end(6)
- #store
- #(track, title, artist, album, duration, file)
+ # store
+ # (track, title, artist, album, duration, file)
self.store=Gtk.ListStore(int, str, str, str, str, str)
- #songs view
+ # songs view
self.songs_view=SongsView(self.client, self.store, 5)
- #columns
+ # columns
renderer_text=Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END, ellipsize_set=True)
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
@@ -3106,12 +3104,12 @@ class SearchWindow(Gtk.Box):
self.column_album.set_sort_column_id(3)
self.column_time.set_sort_column_id(4)
- #scroll
+ # scroll
scroll=Gtk.ScrolledWindow()
scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scroll.add(self.songs_view)
- #buttons
+ # buttons
self.add_button=Gtk.Button(image=Gtk.Image(stock=Gtk.STOCK_ADD), label=_("Add"))
self.add_button.set_sensitive(False)
self.add_button.set_relief(Gtk.ReliefStyle.NONE)
@@ -3122,7 +3120,7 @@ class SearchWindow(Gtk.Box):
self.open_button.set_sensitive(False)
self.open_button.set_relief(Gtk.ReliefStyle.NONE)
- #connect
+ # connect
self.search_entry.connect("search-changed", self.on_search_changed)
self.tags.connect("changed", self.on_search_changed)
self.add_button.connect("clicked", self.on_add_clicked)
@@ -3130,7 +3128,7 @@ class SearchWindow(Gtk.Box):
self.open_button.connect("clicked", self.on_open_clicked)
self.client.emitter.connect("reconnected", self.on_reconnected)
- #packing
+ # packing
vbox=Gtk.Box(spacing=6)
vbox.set_property("border-width", 6)
vbox.pack_start(self.search_entry, True, True, 0)
@@ -3201,11 +3199,11 @@ class LyricsWindow(Gtk.Overlay):
def __init__(self, client, settings):
Gtk.Overlay.__init__(self)
- #adding vars
+ # adding vars
self.settings=settings
self.client=client
- #widgets
+ # widgets
self.text_view=Gtk.TextView()
self.text_view.set_editable(False)
self.text_view.set_left_margin(5)
@@ -3215,12 +3213,12 @@ class LyricsWindow(Gtk.Overlay):
self.text_view.set_justification(Gtk.Justification.CENTER)
self.text_buffer=self.text_view.get_buffer()
- #scroll
+ # scroll
self.scroll=Gtk.ScrolledWindow()
self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.scroll.add(self.text_view)
- #frame
+ # frame
frame=FocusFrame()
frame.set_widget(self.text_view)
style_context=frame.get_style_context()
@@ -3229,7 +3227,7 @@ class LyricsWindow(Gtk.Overlay):
provider.load_from_data(css)
style_context.add_provider(provider, 800)
- #close button
+ # close button
close_button=Gtk.ToggleButton(image=Gtk.Image.new_from_icon_name("window-close-symbolic", Gtk.IconSize.BUTTON))
close_button.set_margin_top(6)
close_button.set_margin_end(6)
@@ -3239,12 +3237,12 @@ class LyricsWindow(Gtk.Overlay):
close_button.set_halign(2)
close_button.set_valign(1)
- #connect
+ # connect
self.file_changed=self.client.emitter.connect("playing_file_changed", self.refresh)
self.connect("destroy", self.remove_handlers)
close_button.connect("clicked", self.on_close_button_clicked)
- #packing
+ # packing
frame.add(self.scroll)
self.add(frame)
self.add_overlay(close_button)
@@ -3268,30 +3266,30 @@ class LyricsWindow(Gtk.Overlay):
update_thread=threading.Thread(target=self.display_lyrics, kwargs={"current_song": ClientHelper.song_to_first_str_dict(self.client.currentsong())}, daemon=True)
update_thread.start()
- def getLyrics(self, singer, song): #partially copied from PyLyrics 1.1.0
- #Replace spaces with _
+ def getLyrics(self, singer, song): # partially copied from PyLyrics 1.1.0
+ # Replace spaces with _
singer=singer.replace(' ', '_')
song=song.replace(' ', '_')
r=requests.get('http://lyrics.wikia.com/{0}:{1}'.format(singer,song))
s=BeautifulSoup(r.text)
- #Get main lyrics holder
+ # Get main lyrics holder
lyrics=s.find("div",{'class':'lyricbox'})
if lyrics is None:
raise ValueError("Song or Singer does not exist or the API does not have Lyrics")
return None
- #Remove Scripts
+ # Remove Scripts
[s.extract() for s in lyrics('script')]
- #Remove Comments
+ # Remove Comments
comments=lyrics.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]
- #Remove span tag (Needed for instrumantal)
+ # Remove span tag (Needed for instrumantal)
if not lyrics.span == None:
lyrics.span.extract()
- #Remove unecessary tags
+ # Remove unecessary tags
for tag in ['div','i','b','a']:
for match in lyrics.findAll(tag):
match.replaceWithChildren()
- #Get output as a string and remove non unicode characters and replace
with newlines
+ # Get output as a string and remove non unicode characters and replace
with newlines
output=str(lyrics).encode('utf-8', errors='replace')[22:-6:].decode("utf-8").replace('\n','').replace('
','\n')
try:
return output
@@ -3309,7 +3307,7 @@ class MainWindow(Gtk.ApplicationWindow):
self.settings=settings
self.set_default_size(self.settings.get_int("width"), self.settings.get_int("height"))
- #adding vars
+ # adding vars
self.app=app
self.client=client
self.use_csd=self.settings.get_boolean("use-csd")
@@ -3318,11 +3316,11 @@ class MainWindow(Gtk.ApplicationWindow):
else:
self.icon_size=self.settings.get_int("icon-size")
- #MPRIS
+ # MPRIS
DBusGMainLoop(set_as_default=True)
self.dbus_service=MPRISInterface(self, self.client, self.settings)
- #actions
+ # actions
save_action=Gio.SimpleAction.new("save", None)
save_action.connect("activate", self.on_save)
self.add_action(save_action)
@@ -3343,7 +3341,7 @@ class MainWindow(Gtk.ApplicationWindow):
self.help_action.connect("activate", self.on_help)
self.add_action(self.help_action)
- #widgets
+ # widgets
self.icons={}
icons_data=["open-menu-symbolic"]
for data in icons_data:
@@ -3357,7 +3355,7 @@ class MainWindow(Gtk.ApplicationWindow):
self.progress=SeekBar(self.client)
self.play_opts=PlaybackOptions(self.client, self.settings)
- #menu
+ # menu
subsection=Gio.Menu()
subsection.append(_("Settings"), "win.settings")
subsection.append(_("Help"), "win.help")
@@ -3376,7 +3374,7 @@ class MainWindow(Gtk.ApplicationWindow):
menu_button.set_tooltip_text(_("Menu"))
menu_button.set_image(image=self.icons["open-menu-symbolic"])
- #connect
+ # connect
self.settings.connect("changed::profiles", self.on_settings_changed)
self.settings.connect("changed::playlist-right", self.on_playlist_pos_settings_changed)
if not self.use_csd:
@@ -3384,16 +3382,16 @@ class MainWindow(Gtk.ApplicationWindow):
self.client.emitter.connect("playing_file_changed", self.on_file_changed)
self.client.emitter.connect("disconnected", self.on_disconnected)
self.client.emitter.connect("reconnected", self.on_reconnected)
- #unmap space
+ # unmap space
binding_set=Gtk.binding_set_find('GtkTreeView')
Gtk.binding_entry_remove(binding_set, 32, Gdk.ModifierType.MOD2_MASK)
- #map space play/pause
+ # map space play/pause
self.connect("key-press-event", self.on_key_press_event)
- #packing
+ # packing
self.paned2=Gtk.Paned()
self.paned2.set_position(self.settings.get_int("paned2"))
- self.on_playlist_pos_settings_changed() #set orientation
+ self.on_playlist_pos_settings_changed() # set orientation
self.paned2.pack1(self.browser, True, False)
self.paned2.pack2(self.cover_playlist_view, False, False)
self.vbox=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
@@ -3424,8 +3422,8 @@ class MainWindow(Gtk.ApplicationWindow):
self.show_all()
if self.settings.get_boolean("maximize"):
self.maximize()
- self.on_settings_changed() #hide profiles button
- self.client.start() #connect client
+ self.on_settings_changed() # hide profiles button
+ self.client.start() # connect client
def on_file_changed(self, *args):
try:
@@ -3477,42 +3475,42 @@ class MainWindow(Gtk.ApplicationWindow):
def on_key_press_event(self, widget, event):
ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
if ctrl:
- if event.keyval == 108: #ctrl + l
+ if event.keyval == 108: # ctrl + l
self.cover_playlist_view.show_lyrics()
else:
- if event.keyval == 32: #space
+ if event.keyval == 32: # space
if not self.browser.search_started():
self.control.play_button.grab_focus()
- elif event.keyval == 269025044: #AudioPlay
+ elif event.keyval == 269025044: # AudioPlay
self.control.play_button.grab_focus()
self.control.play_button.emit("clicked")
- elif event.keyval == 269025047: #AudioNext
+ elif event.keyval == 269025047: # AudioNext
self.control.next_button.grab_focus()
self.control.next_button.emit("clicked")
- elif event.keyval == 43 or event.keyval == 65451: #+
+ elif event.keyval == 43 or event.keyval == 65451: # +
if not self.browser.search_started():
self.control.next_button.grab_focus()
self.control.next_button.emit("clicked")
- elif event.keyval == 269025046: #AudioPrev
+ elif event.keyval == 269025046: # AudioPrev
self.control.prev_button.grab_focus()
self.control.prev_button.emit("clicked")
- elif event.keyval == 45 or event.keyval == 65453: #-
+ elif event.keyval == 45 or event.keyval == 65453: # -
if not self.browser.search_started():
self.control.prev_button.grab_focus()
self.control.prev_button.emit("clicked")
- elif event.keyval == 65307: #esc
+ elif event.keyval == 65307: # esc
self.browser.back_to_album()
- elif event.keyval == 65450: #*
+ elif event.keyval == 65450: # *
if not self.browser.search_started():
self.progress.scale.grab_focus()
self.progress.seek_forward()
- elif event.keyval == 65455: #/
+ elif event.keyval == 65455: # /
if not self.browser.search_started():
self.progress.scale.grab_focus()
self.progress.seek_backward()
- elif event.keyval == 65474: #F5
+ elif event.keyval == 65474: # F5
self.update_action.emit("activate", None)
- elif event.keyval == 65470: #F1
+ elif event.keyval == 65470: # F1
self.help_action.emit("activate", None)
def on_save(self, action, param):
@@ -3568,7 +3566,7 @@ class mpdevil(Gtk.Application):
self.window=None
def do_activate(self):
- if not self.window: #allow just one instance
+ if not self.window: # allow just one instance
self.window=MainWindow(self, self.client, self.settings)
self.window.connect("delete-event", self.on_delete_event)
self.window.present()