-
Notifications
You must be signed in to change notification settings - Fork 1
/
mpd.go
86 lines (74 loc) · 2.38 KB
/
mpd.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// osop
// Copyright (C) 2014 Karol 'Kenji Takahashi' Woźniak
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package main
import (
"fmt"
"log"
"github.com/fhs/gompd/mpd"
)
type Mpd struct {
address string
password string
}
type mpdResponse struct {
Song map[string]string
Status map[string]string
}
func (m *Mpd) Get() (interface{}, error) {
// FIXME: This should go to constructor.
client, err := mpd.DialAuthenticated("tcp", m.address, m.password)
if err != nil {
return nil, fmt.Errorf("Connection error: `%s`", err)
}
return mpdResponse{
Song: m.getCurrentSong(client),
Status: m.getStatus(client),
}, nil
}
func (m *Mpd) getCurrentSong(client *mpd.Client) map[string]string {
current, err := client.CurrentSong()
if err != nil {
log.Printf("Error getting Mpd current song: `%s`", err)
return nil
}
return current
}
func (m *Mpd) getStatus(client *mpd.Client) map[string]string {
status, err := client.Status()
if err != nil {
log.Printf("Error getting Mpd status: `%s`", err)
return nil
}
return status
}
func (m *Mpd) Init(config config) error {
if config["address"] == nil {
return fmt.Errorf("Address parameter is required for Mpd receiver")
}
m.address = config["address"].(string)
if config["password"] != nil {
m.password = config["password"].(string)
}
return nil
}
func init() {
registry.AddReceiver("Mpd", &Mpd{}, mpdResponse{})
}