PINE64
basic and ugly mpc-python-GTK3 mpd remote - Printable Version

+- PINE64 (https://forum.pine64.org)
+-- Forum: PinePhone (https://forum.pine64.org/forumdisplay.php?fid=120)
+--- Forum: PinePhone Software (https://forum.pine64.org/forumdisplay.php?fid=121)
+--- Thread: basic and ugly mpc-python-GTK3 mpd remote (/showthread.php?tid=14729)



basic and ugly mpc-python-GTK3 mpd remote - alexandre - 08-22-2021

I could not find any mpd remote for phosh (some GTK desktop client do the job, but they're not appropriate to a mobile device), so here is a simple python file to perform basic actions (play, stop, pause, next, previous, enable/disable outputs). It relies on mpc to act with the server. One has to change the login string of the script with the right passwd and IP (let a space at the end). If you know about a real app that does the job, tell me. If you ever write one, i would try it Wink. At home, the outputs i want to control are numbered 2 and 3 : change that according to your wishes…


#!/bin/python3

import gi, os

gi.require_version("Gtk", "3.0")

from gi.repository import Gtk

login="mpc -h  your_password@ip_of_the_server "

class ButtonWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="MPD Remote")
        self.set_border_width(10)

        vbox = Gtk.VBox(spacing=6)
        self.add(vbox)

        button = Gtk.Button.new_with_label("Stop")
        button.connect("clicked", self.on_stop_clicked)
        vbox.pack_start(button, True, True, 0)

        button = Gtk.Button.new_with_mnemonic("Play")
        button.connect("clicked", self.on_play_clicked)
        vbox.pack_start(button, True, True, 0)

        button = Gtk.Button.new_with_mnemonic("Pause")
        button.connect("clicked", self.on_pause_clicked)
        vbox.pack_start(button, True, True, 0)
       
        button = Gtk.Button.new_with_mnemonic("Précédente")
        button.connect("clicked", self.on_prec_clicked)
        vbox.pack_start(button, True, True, 0)
       
        button = Gtk.Button.new_with_mnemonic("Suivante")
        button.connect("clicked", self.on_suiv_clicked)
        vbox.pack_start(button, True, True, 0)
       
        switch = Gtk.Switch()
        switch.connect("notify::active", self.on_switch_activated)
        switch.set_active(True)
        vbox.pack_start(switch, True, True, 0)
       
        switch2 = Gtk.Switch()
        switch2.connect("notify::active", self.on_switch2_activated)
        switch2.set_active(True)
        vbox.pack_start(switch2, True, True, 0)

    def on_switch_activated(self, switch, gparam):
        if switch.get_active():
            state = "on"
            os.system(login+"enable 3")
        else:
            state = "off"
            os.system(login+"disable 3")
       
    def on_switch2_activated(self, switch, gparam):
        if switch.get_active():
            state = "on"
            os.system(login+"enable 2")
        else:
            state = "off"
            os.system(login+"disable 2")

    def on_stop_clicked(self, button):
        os.system(login+"stop")

    def on_play_clicked(self, button):
        os.system(login+"play")

    def on_pause_clicked(self, button):
        os.system(login+"pause")
   
    def on_suiv_clicked(self, button):
        os.system(login+"next")

    def on_prec_clicked(self, button):
        os.system(login+"prev")


win = ButtonWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()