2 * Copyright (c) 2011, Florian Zeitz <florob@babelmonkeys.de>
4 * http://cgit.babelmonkeys.de/cgit.cgi/mpdbot/
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice is present in all copies.
10 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
11 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
12 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
13 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
14 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
15 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
16 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
17 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
18 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
20 * POSSIBILITY OF SUCH DAMAGE.
23 #import <ObjFW/ObjFW.h>
24 #import <ObjXMPP/ObjXMPP.h>
28 #define NS_PUBSUB @"http://jabber.org/protocol/pubsub"
29 #define NS_TUNE @"http://jabber.org/protocol/tune"
31 @implementation PEPThread: OFThread
43 OFDictionary *environment = [OFApplication environment];
44 OFString *mpd_port_string;
45 mpd_host = [environment objectForKey: @"MPD_HOST"];
47 mpd_host = @"localhost";
48 mpd_port_string = [environment objectForKey: @"MPD_PORT"];
49 if (mpd_port_string && [mpd_port_string decimalValue] <= UINT16_MAX)
50 mpd_port = (uint16_t) [mpd_port_string decimalValue];
53 conn = [[MPDConnection alloc] initWithHost: mpd_host
57 OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
59 OFMutableDictionary *response;
62 OFXMLElement *pubsub, *publish, *item, *tune;
64 tuneIQ = [XMPPIQ IQWithType: @"set"
65 ID: [object generateStanzaID]];
66 pubsub = [OFXMLElement elementWithName: @"pubsub"
67 namespace: NS_PUBSUB];
68 [tuneIQ addChild: pubsub];
69 publish = [OFXMLElement elementWithName: @"publish"
70 namespace: NS_PUBSUB];
71 [publish addAttributeWithName: @"node"
72 stringValue: NS_TUNE];
73 [pubsub addChild: publish];
74 item = [OFXMLElement elementWithName: @"item"
75 namespace: NS_PUBSUB];
76 [publish addChild: item];
77 tune = [OFXMLElement elementWithName: @"tune"
79 [item addChild: tune];
81 [conn send: @"command_list_begin"];
82 [conn send: @"status"];
83 [conn send: @"currentsong"];
84 [conn send: @"command_list_end"];
85 response = [conn response];
87 if ([[response objectForKey: @"state"]
90 [response objectForKey: @"Artist"]))
91 [tune addChild: [OFXMLElement
92 elementWithName: @"artist"
94 stringValue: answer]];
95 if ((answer = [response objectForKey: @"Time"]))
96 [tune addChild: [OFXMLElement
97 elementWithName: @"length"
99 stringValue: answer]];
101 [response objectForKey: @"Album"]))
102 [tune addChild: [OFXMLElement
103 elementWithName: @"source"
105 stringValue: answer]];
107 [response objectForKey: @"Title"]))
108 [tune addChild: [OFXMLElement
109 elementWithName: @"title"
111 stringValue: answer]];
113 [response objectForKey: @"file"]))
114 [tune addChild: [OFXMLElement
115 elementWithName: @"title"
117 stringValue: answer]];
119 [response objectForKey: @"Track"]))
120 [tune addChild: [OFXMLElement
121 elementWithName: @"track"
123 stringValue: answer]];
125 [object sendStanza: tuneIQ];