Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding Support for MPD #23

Merged
merged 1 commit into from
Apr 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions lyrics/lyrics.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ source=google
interval=1500
player=spotify
autoswitch=on
mpd_host=127.0.0.1
mpd_port=6600
mpd_pass=
#colors
#offset=1

Expand Down
6 changes: 3 additions & 3 deletions lyrics/lyrics_in_terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ def start(stdscr):

interval = defaults['interval']
source = defaults['source']

player = Player(player_name, source, autoswitch, align=align)
mpd_connect = [defaults['mpd_host'],defaults['mpd_port'],defaults['mpd_pass']]

player = Player(player_name, source, autoswitch, mpd_connect, align=align)
win = Window(stdscr, player, timeout=interval)

win.main()


if __name__ == '__main__':
if len(sys.argv) >= 2:
if sys.argv[1] == '-t':
Expand Down
44 changes: 39 additions & 5 deletions lyrics/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

import dbus
import re

from mpd import MPDClient as mpd

class Player:
def __init__(self, name, source, autoswitch, **kwargs):
def __init__(self, name, source, autoswitch, mpd_connect, **kwargs):
self.player_name = name
self.default_source = source

Expand All @@ -17,7 +17,9 @@ def __init__(self, name, source, autoswitch, **kwargs):
self.track = Track(**kwargs)

self.player_interface = None

self.mpd_host = mpd_connect[0] or '127.0.0.1'
self.mpd_port = mpd_connect[1] or 6600
self.mpd_pass = mpd_connect[2] or ''
self.update()

def check_playing(self):
Expand Down Expand Up @@ -57,6 +59,33 @@ def get_active_player(self):
return


def mpd_active(self):
""" Check if mpd is active and get metadata """
client = mpd()
try: client.connect(self.mpd_host,self.mpd_port)
except Exception as e:
print(e)
if self.mpd_pass != '':
client.password(self.mpd_pass)
if client.status()['state'] == 'play':
self.player_name = "mpd"
self.running2 = True
currentsong = client.currentsong()
if 'album' in currentsong: album = currentsong['album']
else: album = ''
title = currentsong['title']
title2 = currentsong['title']
artist = currentsong['artist']
album = album
trackid = currentsong['id']
if self.track.title != title:
self.track.update(artist, title, album, trackid)
self.refresh()
return True
else:
self.running2 = False
return False

def get_bus(self):
''' gets dbus session bus and player interface
'''
Expand Down Expand Up @@ -90,7 +119,8 @@ def update(self):
except Exception as e:
self.running = False
self.player_interface = None



if self.running:
try:
title = metadata['xesam:title']
Expand Down Expand Up @@ -126,7 +156,11 @@ def update(self):
self.track.update(artist, title, album, trackid)
self.refresh()
return True


if not self.running:
if self.mpd_active():
return True

return False

def refresh(self, source=None, cache=True):
Expand Down
16 changes: 14 additions & 2 deletions lyrics/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,13 +150,19 @@ def set_up(self):
self.stdscr.clear()
curses.curs_set(0)
self.current_pos = 0

if self.player.running:
self.update_track()
self.set_titlebar()
self.stdscr.refresh()
self.scroll_pad.refresh(self.current_pos, 0, 4,
self.pad_offset, self.height - 2, self.width - 1)
elif self.player.running2:
self.update_track()
self.set_titlebar()
self.stdscr.refresh()
self.scroll_pad.refresh(self.current_pos, 0, 4,
self.pad_offset, self.height - 2, self.width - 1)
else:
self.stdscr.addstr(0, 1, f'{self.player.player_name} is not running!')
self.stdscr.refresh()
Expand Down Expand Up @@ -229,7 +235,13 @@ def main(self):
self.stdscr.refresh()
self.scroll_pad.refresh(self.current_pos, 0, 4,
self.pad_offset, self.height - 2, self.width - 1)
elif self.player.running2:
self.keys.input(self, key)
self.set_titlebar()
self.stdscr.refresh()
self.scroll_pad.refresh(self.current_pos, 0, 4,
self.pad_offset, self.height - 2, self.width - 1)
else:
self.stdscr.clear()
self.stdscr.addstr(0, 1, f'{self.player.player_name} player is not running.')
self.stdscr.refresh()
self.stdscr.refresh()
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ def updateConfigFile(self):
"Operating System :: POSIX :: Linux",
],
install_requires=[
'dbus-python'
'dbus-python',
'python-mpd2'
],
python_requires='>=3.6',
cmdclass={
Expand Down