Skip to content

Commit

Permalink
Add Unix domain socket connectivity (resolves #10)
Browse files Browse the repository at this point in the history
  • Loading branch information
yktoo committed Jul 21, 2020
1 parent 445de58 commit e4827d9
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 28 deletions.
17 changes: 12 additions & 5 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,10 @@ type StreamSpec struct {

// Config represents (storable) application configuration
type Config struct {
MpdHost string // MPD's IP address or hostname
MpdPort int // MPD's port number
MpdNetwork string // Network to use to connect to MPD, either 'tcp' or 'unix'
MpdSocketPath string // Path to the MPD's Unix socket (only if MpdNetwork == 'unix')
MpdHost string // MPD's IP address or hostname (only if MpdNetwork == 'tcp')
MpdPort int // MPD's port number (only if MpdNetwork == 'tcp')
MpdPassword string // MPD's password (optional)
MpdAutoConnect bool // Whether to automatically connect to MPD on startup
MpdAutoReconnect bool // Whether to automatically reconnect to MPD after connection is lost
Expand Down Expand Up @@ -112,6 +114,8 @@ func GetConfig() *Config {
// newConfig initialises and returns a config instance with all the defaults
func newConfig() *Config {
return &Config{
MpdNetwork: "tcp",
MpdSocketPath: os.Getenv("XDG_RUNTIME_DIR") + "/mpd/socket",
MpdHost: os.Getenv("MPD_HOST"),
MpdPort: util.AtoiDef(os.Getenv("MPD_PORT"), 6600),
MpdPassword: "",
Expand Down Expand Up @@ -167,9 +171,12 @@ func (c *Config) Load() {
log.Debugf("Loaded configuration from %s", file)
}

// MpdAddress returns the MPD address string constructed from host and port
func (c *Config) MpdAddress() string {
return fmt.Sprintf("%s:%d", c.MpdHost, c.MpdPort)
// MpdNetworkAddress returns the MPD network and the address string
func (c *Config) MpdNetworkAddress() (string, string) {
if c.MpdNetwork == "unix" {
return "unix", c.MpdSocketPath
}
return "tcp", fmt.Sprintf("%s:%d", c.MpdHost, c.MpdPort)
}

// Save writes out the config to the default file
Expand Down
10 changes: 6 additions & 4 deletions internal/player/connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (

// Connector encapsulates functionality for connecting to MPD and watch for its changes
type Connector struct {
mpdNetwork string // MPD network
mpdAddress string // MPD address
mpdPassword string // MPD password
stayConnected bool // Whether a connection is supposed to be kept alive
Expand Down Expand Up @@ -62,7 +63,8 @@ func NewConnector(onStatusChange func(), onHeartbeat func(), onSubsystemChange f

// Start initialises the connector
// stayConnected: whether the connection must be automatically re-established when lost
func (c *Connector) Start(mpdAddress, mpdPassword string, stayConnected bool) {
func (c *Connector) Start(mpdNetwork, mpdAddress, mpdPassword string, stayConnected bool) {
c.mpdNetwork = mpdNetwork
c.mpdAddress = mpdAddress
c.mpdPassword = mpdPassword
c.stayConnected = stayConnected
Expand Down Expand Up @@ -201,8 +203,8 @@ func (c *Connector) doConnect(connect, heartbeat bool) {
c.onStatusChange()

// Try to connect
log.Debug("Connecting to MPD")
if client, err = mpd.DialAuthenticated("tcp", c.mpdAddress, c.mpdPassword); err == nil {
log.Debugf("Connecting to MPD (network=%v, address=%v)", c.mpdNetwork, c.mpdAddress)
if client, err = mpd.DialAuthenticated(c.mpdNetwork, c.mpdAddress, c.mpdPassword); err == nil {
connected = true
} else {
err = errors.Errorf("DialAuthenticated() failed: %v", err)
Expand Down Expand Up @@ -299,7 +301,7 @@ func (c *Connector) watch() {

// If no watcher yet
if mpdWatcher == nil {
watcher, err := mpd.NewWatcher("tcp", c.mpdAddress, c.mpdPassword)
watcher, err := mpd.NewWatcher(c.mpdNetwork, c.mpdAddress, c.mpdPassword)
// Failed to connect
if err != nil {
log.Warning("Failed to watch MPD", err)
Expand Down
3 changes: 2 additions & 1 deletion internal/player/main-window.go
Original file line number Diff line number Diff line change
Expand Up @@ -749,7 +749,8 @@ func (w *MainWindow) connect() {

// Start connecting
cfg := config.GetConfig()
w.connector.Start(cfg.MpdAddress(), cfg.MpdPassword, cfg.MpdAutoReconnect)
network, addr := cfg.MpdNetworkAddress()
w.connector.Start(network, addr, cfg.MpdPassword, cfg.MpdAutoReconnect)
}

// disconnect starts disconnecting from MPD
Expand Down
30 changes: 27 additions & 3 deletions internal/player/prefs.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,14 @@ type queueCol struct {
type PrefsDialog struct {
PreferencesDialog *gtk.Dialog
// General page widgets
MpdNetworkComboBox *gtk.ComboBoxText
MpdPathEntry *gtk.Entry
MpdPathLabel *gtk.Label
MpdHostEntry *gtk.Entry
MpdHostLabel *gtk.Label
MpdHostLabelRemark *gtk.Label
MpdPortSpinButton *gtk.SpinButton
MpdPortLabel *gtk.Label
MpdPortAdjustment *gtk.Adjustment
MpdPasswordEntry *gtk.Entry
MpdAutoConnectCheckButton *gtk.CheckButton
Expand Down Expand Up @@ -107,11 +114,14 @@ func (d *PrefsDialog) onMap() {
// Initialise widgets
cfg := config.GetConfig()
// General page
d.MpdNetworkComboBox.SetActiveID(cfg.MpdNetwork)
d.MpdPathEntry.SetText(cfg.MpdSocketPath)
d.MpdHostEntry.SetText(cfg.MpdHost)
d.MpdPortAdjustment.SetValue(float64(cfg.MpdPort))
d.MpdPasswordEntry.SetText(cfg.MpdPassword)
d.MpdAutoConnectCheckButton.SetActive(cfg.MpdAutoConnect)
d.MpdAutoReconnectCheckButton.SetActive(cfg.MpdAutoReconnect)
d.updateGeneralWidgets()
// Interface page
d.LibraryDefaultReplaceRadioButton.SetActive(cfg.TrackDefaultReplace)
d.LibraryDefaultAppendRadioButton.SetActive(!cfg.TrackDefaultReplace)
Expand Down Expand Up @@ -262,15 +272,16 @@ func (d *PrefsDialog) onSettingChange() {
// Collect settings
cfg := config.GetConfig()
// General page
if s, err := d.MpdHostEntry.GetText(); !errCheck(err, "MpdHostEntry.GetText() failed") {
cfg.MpdHost = s
}
cfg.MpdNetwork = d.MpdNetworkComboBox.GetActiveID()
cfg.MpdSocketPath = util.EntryText(d.MpdPathEntry, "")
cfg.MpdHost = util.EntryText(d.MpdHostEntry, "")
cfg.MpdPort = int(d.MpdPortAdjustment.GetValue())
if s, err := d.MpdPasswordEntry.GetText(); !errCheck(err, "MpdPasswordEntry.GetText() failed") {
cfg.MpdPassword = s
}
cfg.MpdAutoConnect = d.MpdAutoConnectCheckButton.GetActive()
cfg.MpdAutoReconnect = d.MpdAutoReconnectCheckButton.GetActive()
d.updateGeneralWidgets()
// Interface page
cfg.TrackDefaultReplace = d.LibraryDefaultReplaceRadioButton.GetActive()
cfg.PlaylistDefaultReplace = d.PlaylistsDefaultReplaceRadioButton.GetActive()
Expand Down Expand Up @@ -309,3 +320,16 @@ func (d *PrefsDialog) populateColumns() {
}
d.ColumnsListBox.ShowAll()
}

// updateGeneralWidgets updates widget states on the General tab
func (d *PrefsDialog) updateGeneralWidgets() {
network := d.MpdNetworkComboBox.GetActiveID()
unix, tcp := network == "unix", network == "tcp"
d.MpdPathEntry.SetVisible(unix)
d.MpdPathLabel.SetVisible(unix)
d.MpdHostEntry.SetVisible(tcp)
d.MpdHostLabel.SetVisible(tcp)
d.MpdHostLabelRemark.SetVisible(tcp)
d.MpdPortSpinButton.SetVisible(tcp)
d.MpdPortLabel.SetVisible(tcp)
}
14 changes: 13 additions & 1 deletion resources/i18n/nl.po
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-25 12:11+0200\n"
"PO-Revision-Date: 2020-06-23 10:45+0200\n"
"PO-Revision-Date: 2020-07-21 10:59+0200\n"
"Last-Translator: Dmitry Kann <yktooo@gmail.com>\n"
"Language-Team: \n"
"Language: nl\n"
Expand Down Expand Up @@ -398,6 +398,9 @@ msgstr "MPD Informatie"
msgid "Name"
msgstr "Naam"

msgid "Network:"
msgstr "Netwerk:"

msgid "New playlist name"
msgstr "Nieuwe afspeellijst naam"

Expand Down Expand Up @@ -452,6 +455,9 @@ msgstr "Wachtwoord:"
msgid "Path"
msgstr "Pad"

msgid "Path:"
msgstr "Pad:"

msgid "Pause or resume playback"
msgstr "Afspelen pauzeren of hervatten"

Expand Down Expand Up @@ -605,6 +611,9 @@ msgstr "Naar het Wachtrij tabblad"
msgid "Switch to Streams tab"
msgstr "Naar het Streams tabblad"

msgid "TCP"
msgstr "TCP"

msgid "Template error"
msgstr "Sjabloonfout"

Expand Down Expand Up @@ -644,6 +653,9 @@ msgstr "Tracktitel"
msgid "Track"
msgstr "Track"

msgid "Unix socket"
msgstr "Unix socket"

msgid "Unnamed"
msgstr "Zonder naam"

Expand Down
14 changes: 13 additions & 1 deletion resources/i18n/ru.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Ymuse\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-25 12:11+0200\n"
"PO-Revision-Date: 2020-06-23 10:41+0200\n"
"PO-Revision-Date: 2020-07-21 10:57+0200\n"
"Last-Translator: Dmitry Kann <yktooo@gmail.com>\n"
"Language-Team: \n"
"Language: ru\n"
Expand Down Expand Up @@ -402,6 +402,9 @@ msgstr "Информация об MPD"
msgid "Name"
msgstr "Наименование"

msgid "Network:"
msgstr "Сеть:"

msgid "New playlist name"
msgstr "Название нового плейлиста"

Expand Down Expand Up @@ -458,6 +461,9 @@ msgstr "Пароль:"
msgid "Path"
msgstr "Путь"

msgid "Path:"
msgstr "Путь:"

msgid "Pause or resume playback"
msgstr "Приостановить или возобновить воспроизведение"

Expand Down Expand Up @@ -611,6 +617,9 @@ msgstr "Переключиться во вкладку «Очередь»"
msgid "Switch to Streams tab"
msgstr "Переключиться во вкладку «Потоки»"

msgid "TCP"
msgstr "TCP"

msgid "Template error"
msgstr "Ошибка в шаблоне"

Expand Down Expand Up @@ -650,6 +659,9 @@ msgstr "Название трека"
msgid "Track"
msgstr "Трек"

msgid "Unix socket"
msgstr "Unix-сокет"

msgid "Unnamed"
msgstr "Безымянный"

Expand Down
12 changes: 12 additions & 0 deletions resources/i18n/ymuse.pot
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,9 @@ msgstr ""
msgid "Name"
msgstr ""

msgid "Network:"
msgstr ""

msgid "New playlist name"
msgstr ""

Expand Down Expand Up @@ -438,6 +441,9 @@ msgstr ""
msgid "Path"
msgstr ""

msgid "Path:"
msgstr ""

msgid "Pause or resume playback"
msgstr ""

Expand Down Expand Up @@ -591,6 +597,9 @@ msgstr ""
msgid "Switch to Streams tab"
msgstr ""

msgid "TCP"
msgstr ""

msgid "Template error"
msgstr ""

Expand Down Expand Up @@ -630,6 +639,9 @@ msgstr ""
msgid "Track"
msgstr ""

msgid "Unix socket"
msgstr ""

msgid "Unnamed"
msgstr ""

Expand Down
Loading

0 comments on commit e4827d9

Please sign in to comment.