mpd-client
author Fabien Ninoles <fabien@tzone.org>
Mon, 19 May 2008 01:28:56 -0400
changeset 0 77136249e5ee
permissions -rw-r--r--
First import of mpd-client.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     1
diff -r 171db9560cb5 clients/mpd/immsmpd.cc
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     3
+++ b/clients/mpd/immsmpd.cc	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     4
@@ -0,0 +1,282 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     5
+#include "immsutil.h"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     6
+#include "clientstub.h"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     7
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     8
+#include <glib.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
     9
+#include <signal.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    10
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    11
+#include "mpdinterface.h"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    12
+#include <list>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    13
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    14
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    15
+using std::endl;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    16
+using std::list;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    17
+using namespace mpd_interface;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    18
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    19
+// interface for communication with IMMS server
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    20
+// comes from clientstub.h
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    21
+struct MPDOps;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    22
+typedef IMMSClient<MPDOps> MPDClient;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    23
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    24
+int poll_time = 250; // miliseconds
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    25
+const double reconnect_interval = 1.0; // seconds
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    26
+GMainLoop *loop = nullptr;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    27
+GSource* ts;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    28
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    29
+MPDClient imms;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    30
+Player mpd;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    31
+list<int> playqueue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    32
+const list<int>::size_type pq_capacity = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    33
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    34
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    35
+// that's the main function - it's called regularly and handles all the
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    36
+// IMMS and MPD communication and decides what to do when anything happens
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    37
+gboolean do_events(void *unused);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    38
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    39
+// determines whether the currently playing song has been selected
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    40
+// specifically by the user
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    41
+bool next_jumped(); 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    42
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    43
+void notify_song_ended(const Song& song, double elapsed_time, bool jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    44
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    45
+// resets the elapsed_timer and sets the jumped flag, too
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    46
+void notify_song_started(const Song& song, double& elapsed_time,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    47
+    bool& jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    48
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    49
+void update_playqueue();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    50
+bool playqueue_contains(int song);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    51
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    52
+void quit(int signum);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    53
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    54
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    55
+struct MPDOps
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    56
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    57
+    // IMMS server's suggestion of the next song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    58
+    static void set_next(int next)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    59
+    {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    60
+      if(playqueue.size() < pq_capacity) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    61
+	if(mpd.song(current).path() == mpd.song(next).path() ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    62
+	    mpd.song(previous).path() == mpd.song(next).path() ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    63
+	    playqueue_contains(next) || next >= mpd.playlist_length()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    64
+          update_playqueue();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    65
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    66
+	else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    67
+	  playqueue.push_back(next);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    68
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    69
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    70
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    71
+    // no idea, works just peach as it is
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    72
+    // asked mag about it, waiting for an answer
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    73
+    // TODO if he doesn't answer, dig it out
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    74
+    static void reset_selection() { }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    75
+    // path of the song at the given pos for IMMS server
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    76
+    static string get_item(int index) {return mpd.song(index).path(); }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    77
+    // size of the playlist for the IMMS server
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    78
+    static int get_length() { return mpd.playlist_length(); }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    79
+}; 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    80
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    81
+int main(int argc, char **argv)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    82
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    83
+  // glib initialization
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    84
+  loop = g_main_loop_new(nullptr, FALSE);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    85
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    86
+  signal(SIGINT,  quit);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    87
+  signal(SIGTERM, quit);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    88
+  signal(SIGPIPE, SIG_IGN);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    89
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    90
+  ts = g_timeout_source_new(poll_time);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    91
+  g_source_attach(ts, nullptr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    92
+  g_source_set_callback(ts, (GSourceFunc)do_events, nullptr, nullptr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    93
+  // end of glib init
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    94
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    95
+  g_main_loop_run(loop);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    96
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    97
+  LOG(INFO) << "Exitting." << endl;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    98
+  return 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
    99
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   100
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   101
+gboolean do_events(void *unused)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   102
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   103
+  static const double time_inc = double(poll_time)/1000.0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   104
+    // the time that ACTUALLY elapsed when playing the song (in seconds)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   105
+  static double elapsed_time = 0; 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   106
+  static bool jumped = false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   107
+  static double reconnect_timeout = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   108
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   109
+  try {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   110
+    if(!mpd.connected()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   111
+      if(reconnect_timeout < time_inc) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   112
+	LOG(INFO) << "Not connected to MPD. Attempting to connect..."
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   113
+	  << endl;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   114
+	reconnect_timeout = reconnect_interval;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   115
+	mpd.connect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   116
+	LOG(INFO) << "Connected to MPD." << endl;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   117
+	reconnect_timeout = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   118
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   119
+      else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   120
+	reconnect_timeout -= time_inc;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   121
+	return TRUE;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   122
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   123
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   124
+    if(imms.check_connection()) imms.setup(0);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   125
+    if(!imms.isok()) return TRUE;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   126
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   127
+    mpd.refresh();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   128
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   129
+    if(mpd.playlist_changed()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   130
+      imms.playlist_changed(mpd.playlist_length());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   131
+      playqueue.clear();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   132
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   133
+    if(mpd.radnom()) update_playqueue();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   134
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   135
+    if(mpd.status_changed()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   136
+      if(mpd.status(current) == stopped) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   137
+	notify_song_ended(mpd.song(current), elapsed_time, jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   138
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   139
+      else if(mpd.status(previous) == stopped &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   140
+	  mpd.status(current)==playing) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   141
+	notify_song_started(mpd.song(current), elapsed_time, jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   142
+	
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   143
+	// clear the song_changed() flag
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   144
+	if(mpd.song_changed()) mpd.refresh(); 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   145
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   146
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   147
+    if(mpd.status(current) == playing) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   148
+      elapsed_time += time_inc;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   149
+      if(mpd.song_changed()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   150
+	notify_song_ended(mpd.song(previous), elapsed_time, jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   151
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   152
+	if(!mpd.radnom() || playqueue.empty()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   153
+	  notify_song_started(mpd.song(current), elapsed_time, jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   154
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   155
+	else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   156
+	  mpd.play_song(playqueue.front());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   157
+	  notify_song_started(mpd.song(playqueue.front()), elapsed_time,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   158
+	      jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   159
+	  playqueue.erase(playqueue.begin());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   160
+	  update_playqueue();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   161
+	  // this could otherwise incorrectly set song_changed() flag
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   162
+	  mpd.refresh(); 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   163
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   164
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   165
+      else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   166
+	// fix the real timer if it's inconsistent with what player
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   167
+	// says is the elapsed time of the current song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   168
+	if(elapsed_time - double(mpd.song(current).elapsed()) >= 3.0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   169
+	  if(mpd.song(current).elapsed() == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   170
+	    Song tmp_ended = mpd.song(current);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   171
+	    tmp_ended.set_length(int(elapsed_time) * 2);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   172
+	    notify_song_ended(tmp_ended, elapsed_time, jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   173
+	    notify_song_started(mpd.song(current), elapsed_time, jumped);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   174
+	    jumped = false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   175
+	  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   176
+	  elapsed_time = mpd.song(current).elapsed();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   177
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   178
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   179
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   180
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   181
+  catch (connection_err) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   182
+    if(reconnect_timeout >= reconnect_interval) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   183
+	  LOG(INFO) << "Connecting to MPD was unsuccessful. "
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   184
+	    "Next attempt in " << reconnect_interval << " second"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   185
+	    << (reconnect_interval == 1.0 ? "":"s") << "." << endl;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   186
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   187
+    else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   188
+      LOG(INFO) << "Disconnected from MPD." << endl;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   189
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   190
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   191
+  catch (mpd_err ex) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   192
+    LOG(ERROR) << "Error: " << ex.message() << endl;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   193
+    g_main_quit(loop);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   194
+    loop = nullptr;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   195
+    exit(1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   196
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   197
+  return TRUE;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   198
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   199
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   200
+// determines whether the song has been played whole
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   201
+bool played_whole(double elapsed_time, int length)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   202
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   203
+  static const double abs_limit = 20.0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   204
+  static const double coeficient = 0.08;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   205
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   206
+  double rel_limit = double(length) * coeficient;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   207
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   208
+  double limit = (abs_limit < rel_limit) ? abs_limit : rel_limit;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   209
+  return double(length)-elapsed_time < limit; 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   210
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   211
+// determines whether the song has been skipped early
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   212
+// (thus being set as not a prefed one)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   213
+bool bad(double elapsed_time, int length)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   214
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   215
+  static const double abs_limit = 30.0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   216
+  static const double coeficient = 0.13;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   217
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   218
+  double rel_limit = double(length) * coeficient;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   219
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   220
+  double limit = (rel_limit < abs_limit) ? rel_limit : abs_limit;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   221
+  return elapsed_time < limit;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   222
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   223
+bool next_jumped()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   224
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   225
+  if(mpd.radnom()) return false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   226
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   227
+  if(mpd.song(current).pos() == mpd.song(previous).pos()+1)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   228
+    return false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   229
+  if(mpd.song(current).pos() == 0 &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   230
+      mpd.song(previous).pos() == mpd.playlist_length()-1)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   231
+    return false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   232
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   233
+  return true;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   234
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   235
+void notify_song_ended(const Song& song, double elapsed_time, bool jumped)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   236
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   237
+  if(song.length() == Song::invalid_time) return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   238
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   239
+  imms.end_song(played_whole(elapsed_time, song.length()), jumped,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   240
+      bad(elapsed_time, song.length()) );
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   241
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   242
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   243
+void notify_song_started(const Song& song, double& elapsed_timer,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   244
+    bool& jumped)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   245
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   246
+  imms.start_song(song.pos(), song.path());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   247
+  elapsed_timer = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   248
+  jumped = next_jumped();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   249
+  mpd.song_changed(); // clear the change notification
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   250
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   251
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   252
+void update_playqueue()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   253
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   254
+  static const int timeout_value = 3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   255
+  static int timeout = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   256
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   257
+  if(timeout == 0)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   258
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   259
+    if(playqueue.size() < pq_capacity) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   260
+      list<int>::size_type i;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   261
+      for(i = pq_capacity - playqueue.size(); i!=0; i--) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   262
+	imms.select_next();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   263
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   264
+      timeout = timeout_value;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   265
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   266
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   267
+  else --timeout;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   268
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   269
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   270
+bool playqueue_contains(int song)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   271
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   272
+  list<int>::const_iterator i;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   273
+  for(i = playqueue.begin(); i!= playqueue.end(); i++) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   274
+    if (*i == song) return true;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   275
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   276
+  return false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   277
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   278
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   279
+void quit(int signum)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   280
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   281
+  if (loop) g_main_quit(loop);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   282
+  loop = nullptr;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   283
+  signal(signum, SIG_DFL);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   284
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   285
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   286
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   287
diff -r 171db9560cb5 clients/mpd/libmpdclient.c
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   288
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   289
+++ b/clients/mpd/libmpdclient.c	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   290
@@ -0,0 +1,1955 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   291
+/* libmpdclient
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   292
+   (c)2003-2006 by Warren Dukes (warren.dukes@gmail.com)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   293
+   This project's homepage is: http://www.musicpd.org
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   294
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   295
+   Redistribution and use in source and binary forms, with or without
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   296
+   modification, are permitted provided that the following conditions
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   297
+   are met:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   298
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   299
+   - Redistributions of source code must retain the above copyright
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   300
+   notice, this list of conditions and the following disclaimer.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   301
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   302
+   - Redistributions in binary form must reproduce the above copyright
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   303
+   notice, this list of conditions and the following disclaimer in the
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   304
+   documentation and/or other materials provided with the distribution.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   305
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   306
+   - Neither the name of the Music Player Daemon nor the names of its
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   307
+   contributors may be used to endorse or promote products derived from
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   308
+   this software without specific prior written permission.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   309
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   310
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   311
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   312
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   313
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   314
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   315
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   316
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   317
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   318
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   319
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   320
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   321
+*/
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   322
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   323
+#include "libmpdclient.h"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   324
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   325
+#include <errno.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   326
+#include <ctype.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   327
+#include <sys/types.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   328
+#include <stdio.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   329
+#include <sys/param.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   330
+#include <string.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   331
+#include <unistd.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   332
+#include <stdlib.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   333
+#include <fcntl.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   334
+#include <limits.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   335
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   336
+#ifdef WIN32
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   337
+#  include <ws2tcpip.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   338
+#  include <winsock.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   339
+#else
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   340
+#  include <netinet/in.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   341
+#  include <arpa/inet.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   342
+#  include <sys/socket.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   343
+#  include <netdb.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   344
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   345
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   346
+/* (bits+1)/3 (plus the sign character) */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   347
+#define INTLEN      ((sizeof(int)       * CHAR_BIT + 1) / 3 + 1)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   348
+#define LONGLONGLEN ((sizeof(long long) * CHAR_BIT + 1) / 3 + 1)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   349
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   350
+#define COMMAND_LIST    1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   351
+#define COMMAND_LIST_OK 2
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   352
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   353
+#ifndef MPD_NO_GAI
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   354
+#  ifdef AI_ADDRCONFIG
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   355
+#    define MPD_HAVE_GAI
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   356
+#  endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   357
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   358
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   359
+#ifndef MSG_DONTWAIT
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   360
+#  define MSG_DONTWAIT 0
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   361
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   362
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   363
+#ifdef WIN32
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   364
+#  define SELECT_ERRNO_IGNORE   (errno == WSAEINTR || errno == WSAEINPROGRESS)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   365
+#  define SENDRECV_ERRNO_IGNORE SELECT_ERRNO_IGNORE
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   366
+#else
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   367
+#  define SELECT_ERRNO_IGNORE   (errno == EINTR)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   368
+#  define SENDRECV_ERRNO_IGNORE (errno == EINTR || errno == EAGAIN)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   369
+#  define winsock_dll_error(c)  0
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   370
+#  define closesocket(s)        close(s)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   371
+#  define WSACleanup()          do { /* nothing */ } while (0)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   372
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   373
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   374
+#ifdef WIN32
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   375
+static int winsock_dll_error(mpd_Connection *connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   376
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   377
+	WSADATA wsaData;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   378
+	if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0 ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   379
+			LOBYTE(wsaData.wVersion) != 2 ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   380
+			HIBYTE(wsaData.wVersion) != 2 ) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   381
+		strcpy(connection->errorStr,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   382
+		       "Could not find usable WinSock DLL.");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   383
+		connection->error = MPD_ERROR_SYSTEM;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   384
+		return 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   385
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   386
+	return 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   387
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   388
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   389
+static int do_connect_fail(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   390
+                           const struct sockaddr *serv_addr, int addrlen)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   391
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   392
+	int iMode = 1; /* 0 = blocking, else non-blocking */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   393
+	ioctlsocket(connection->sock, FIONBIO, (u_long FAR*) &iMode);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   394
+	return (connect(connection->sock,serv_addr,addrlen) == SOCKET_ERROR
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   395
+			&& WSAGetLastError() != WSAEWOULDBLOCK);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   396
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   397
+#else /* !WIN32 (sane operating systems) */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   398
+static int do_connect_fail(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   399
+                           const struct sockaddr *serv_addr, int addrlen)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   400
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   401
+	int flags = fcntl(connection->sock, F_GETFL, 0);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   402
+	fcntl(connection->sock, F_SETFL, flags | O_NONBLOCK);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   403
+	return (connect(connection->sock,serv_addr,addrlen)<0 &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   404
+				errno!=EINPROGRESS);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   405
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   406
+#endif /* !WIN32 */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   407
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   408
+#ifdef MPD_HAVE_GAI
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   409
+static int mpd_connect(mpd_Connection * connection, const char * host, int port,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   410
+                       float timeout)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   411
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   412
+	int error;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   413
+	char service[INTLEN+1];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   414
+	struct addrinfo hints;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   415
+	struct addrinfo *res = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   416
+	struct addrinfo *addrinfo = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   417
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   418
+	/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   419
+	 * Setup hints
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   420
+	 */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   421
+	hints.ai_flags     = AI_ADDRCONFIG;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   422
+	hints.ai_family    = PF_UNSPEC;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   423
+	hints.ai_socktype  = SOCK_STREAM;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   424
+	hints.ai_protocol  = IPPROTO_TCP;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   425
+	hints.ai_addrlen   = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   426
+	hints.ai_addr      = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   427
+	hints.ai_canonname = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   428
+	hints.ai_next      = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   429
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   430
+	snprintf(service, sizeof(service), "%i", port);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   431
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   432
+	error = getaddrinfo(host, service, &hints, &addrinfo);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   433
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   434
+	if (error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   435
+		snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   436
+		         "host \"%s\" not found: %s",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   437
+		         host, gai_strerror(error));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   438
+		connection->error = MPD_ERROR_UNKHOST;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   439
+		return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   440
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   441
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   442
+	for (res = addrinfo; res; res = res->ai_next) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   443
+		/* create socket */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   444
+		connection->sock = socket(res->ai_family, SOCK_STREAM,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   445
+		                          res->ai_protocol);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   446
+		if (connection->sock < 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   447
+			snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   448
+			         "problems creating socket: %s",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   449
+			         strerror(errno));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   450
+			connection->error = MPD_ERROR_SYSTEM;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   451
+			freeaddrinfo(addrinfo);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   452
+			return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   453
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   454
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   455
+		mpd_setConnectionTimeout(connection, timeout);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   456
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   457
+		/* connect stuff */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   458
+ 		if (do_connect_fail(connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   459
+		                    res->ai_addr, res->ai_addrlen)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   460
+ 			/* try the next address family */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   461
+ 			closesocket(connection->sock);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   462
+ 			connection->sock = -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   463
+ 			continue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   464
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   465
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   466
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   467
+	freeaddrinfo(addrinfo);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   468
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   469
+	if (connection->sock < 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   470
+		snprintf(connection->errorStr, MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   471
+		         "problems connecting to \"%s\" on port %i: %s",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   472
+		         host, port, strerror(errno));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   473
+		connection->error = MPD_ERROR_CONNPORT;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   474
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   475
+		return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   476
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   477
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   478
+	return 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   479
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   480
+#else /* !MPD_HAVE_GAI */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   481
+static int mpd_connect(mpd_Connection * connection, const char * host, int port,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   482
+                       float timeout)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   483
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   484
+	struct hostent * he;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   485
+	struct sockaddr * dest;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   486
+	int destlen;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   487
+	struct sockaddr_in sin;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   488
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   489
+	if(!(he=gethostbyname(host))) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   490
+		snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   491
+				"host \"%s\" not found",host);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   492
+		connection->error = MPD_ERROR_UNKHOST;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   493
+		return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   494
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   495
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   496
+	memset(&sin,0,sizeof(struct sockaddr_in));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   497
+	/*dest.sin_family = he->h_addrtype;*/
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   498
+	sin.sin_family = AF_INET;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   499
+	sin.sin_port = htons(port);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   500
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   501
+	switch(he->h_addrtype) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   502
+	case AF_INET:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   503
+		memcpy((char *)&sin.sin_addr.s_addr,(char *)he->h_addr,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   504
+				he->h_length);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   505
+		dest = (struct sockaddr *)&sin;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   506
+		destlen = sizeof(struct sockaddr_in);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   507
+		break;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   508
+	default:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   509
+		strcpy(connection->errorStr,"address type is not IPv4");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   510
+		connection->error = MPD_ERROR_SYSTEM;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   511
+		return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   512
+		break;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   513
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   514
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   515
+	if((connection->sock = socket(dest->sa_family,SOCK_STREAM,0))<0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   516
+		strcpy(connection->errorStr,"problems creating socket");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   517
+		connection->error = MPD_ERROR_SYSTEM;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   518
+		return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   519
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   520
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   521
+	mpd_setConnectionTimeout(connection,timeout);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   522
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   523
+	/* connect stuff */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   524
+	if (do_connect_fail(connection, dest, destlen)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   525
+		snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   526
+				"problems connecting to \"%s\" on port"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   527
+				" %i",host,port);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   528
+		connection->error = MPD_ERROR_CONNPORT;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   529
+		return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   530
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   531
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   532
+	return 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   533
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   534
+#endif /* !MPD_HAVE_GAI */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   535
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   536
+char * mpdTagItemKeys[MPD_TAG_NUM_OF_ITEM_TYPES] =
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   537
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   538
+	"Artist",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   539
+	"Album",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   540
+	"Title",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   541
+	"Track",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   542
+	"Name",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   543
+	"Genre",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   544
+	"Date",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   545
+	"Composer",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   546
+	"Performer",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   547
+	"Comment",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   548
+	"Disc",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   549
+	"Filename",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   550
+	"Any"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   551
+};
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   552
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   553
+static char * mpd_sanitizeArg(const char * arg) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   554
+	size_t i;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   555
+	char * ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   556
+	register const char *c;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   557
+	register char *rc;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   558
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   559
+	/* instead of counting in that loop above, just
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   560
+	 * use a bit more memory and half running time
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   561
+	 */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   562
+	ret = (char *)malloc(strlen(arg) * 2 + 1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   563
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   564
+	c = arg;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   565
+	rc = ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   566
+	for(i = strlen(arg)+1; i != 0; --i) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   567
+		if(*c=='"' || *c=='\\')
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   568
+			*rc++ = '\\';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   569
+		*(rc++) = *(c++);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   570
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   571
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   572
+	return ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   573
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   574
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   575
+static mpd_ReturnElement * mpd_newReturnElement(const char * name, const char * value)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   576
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   577
+	mpd_ReturnElement * ret = (mpd_ReturnElement *)malloc(sizeof(mpd_ReturnElement));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   578
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   579
+	ret->name = strdup(name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   580
+	ret->value = strdup(value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   581
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   582
+	return ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   583
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   584
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   585
+static void mpd_freeReturnElement(mpd_ReturnElement * re) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   586
+	free(re->name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   587
+	free(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   588
+	free(re);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   589
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   590
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   591
+void mpd_setConnectionTimeout(mpd_Connection * connection, float timeout) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   592
+	connection->timeout.tv_sec = (int)timeout;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   593
+	connection->timeout.tv_usec = (int)(timeout*1e6 -
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   594
+	                                    connection->timeout.tv_sec*1000000 +
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   595
+					    0.5);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   596
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   597
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   598
+static int mpd_parseWelcome(mpd_Connection * connection, const char * host, int port,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   599
+                            char * rt, char * output) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   600
+	char * tmp;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   601
+	char * test;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   602
+	int i;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   603
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   604
+	if(strncmp(output,MPD_WELCOME_MESSAGE,strlen(MPD_WELCOME_MESSAGE))) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   605
+		snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   606
+				"mpd not running on port %i on host \"%s\"",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   607
+				port,host);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   608
+		connection->error = MPD_ERROR_NOTMPD;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   609
+		return 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   610
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   611
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   612
+	tmp = &output[strlen(MPD_WELCOME_MESSAGE)];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   613
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   614
+	for(i=0;i<3;i++) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   615
+		if(tmp) connection->version[i] = strtol(tmp,&test,10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   616
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   617
+		if (!tmp || (test[0] != '.' && test[0] != '\0')) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   618
+			snprintf(connection->errorStr,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   619
+			         MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   620
+			         "error parsing version number at "
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   621
+			         "\"%s\"",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   622
+			         &output[strlen(MPD_WELCOME_MESSAGE)]);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   623
+			connection->error = MPD_ERROR_NOTMPD;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   624
+			return 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   625
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   626
+		tmp = ++test;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   627
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   628
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   629
+	return 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   630
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   631
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   632
+mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   633
+	int err;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   634
+	char * rt;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   635
+	char * output =  NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   636
+	mpd_Connection * connection = (mpd_Connection *)malloc(sizeof(mpd_Connection));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   637
+	struct timeval tv;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   638
+	fd_set fds;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   639
+	strcpy(connection->buffer,"");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   640
+	connection->buflen = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   641
+	connection->bufstart = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   642
+	strcpy(connection->errorStr,"");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   643
+	connection->error = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   644
+	connection->doneProcessing = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   645
+	connection->commandList = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   646
+	connection->listOks = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   647
+	connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   648
+	connection->returnElement = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   649
+	connection->request = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   650
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   651
+	if (winsock_dll_error(connection))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   652
+		return connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   653
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   654
+	if (mpd_connect(connection, host, port, timeout) < 0)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   655
+		return connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   656
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   657
+	while(!(rt = strstr(connection->buffer,"\n"))) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   658
+		tv.tv_sec = connection->timeout.tv_sec;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   659
+		tv.tv_usec = connection->timeout.tv_usec;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   660
+		FD_ZERO(&fds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   661
+		FD_SET(connection->sock,&fds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   662
+		if((err = select(connection->sock+1,&fds,NULL,NULL,&tv)) == 1) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   663
+			int readed;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   664
+			readed = recv(connection->sock,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   665
+					&(connection->buffer[connection->buflen]),
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   666
+					MPD_BUFFER_MAX_LENGTH-connection->buflen,0);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   667
+			if(readed<=0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   668
+				snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   669
+						"problems getting a response from"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   670
+						" \"%s\" on port %i : %s",host,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   671
+						port, strerror(errno));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   672
+				connection->error = MPD_ERROR_NORESPONSE;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   673
+				return connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   674
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   675
+			connection->buflen+=readed;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   676
+			connection->buffer[connection->buflen] = '\0';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   677
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   678
+		else if(err<0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   679
+ 			if (SELECT_ERRNO_IGNORE)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   680
+				continue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   681
+			snprintf(connection->errorStr,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   682
+					MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   683
+					"problems connecting to \"%s\" on port"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   684
+					" %i",host,port);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   685
+			connection->error = MPD_ERROR_CONNPORT;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   686
+			return connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   687
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   688
+		else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   689
+			snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   690
+					"timeout in attempting to get a response from"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   691
+					" \"%s\" on port %i",host,port);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   692
+			connection->error = MPD_ERROR_NORESPONSE;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   693
+			return connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   694
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   695
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   696
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   697
+	*rt = '\0';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   698
+	output = strdup(connection->buffer);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   699
+	strcpy(connection->buffer,rt+1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   700
+	connection->buflen = strlen(connection->buffer);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   701
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   702
+	if(mpd_parseWelcome(connection,host,port,rt,output) == 0) connection->doneProcessing = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   703
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   704
+	free(output);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   705
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   706
+	return connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   707
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   708
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   709
+void mpd_clearError(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   710
+	connection->error = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   711
+	connection->errorStr[0] = '\0';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   712
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   713
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   714
+void mpd_closeConnection(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   715
+	closesocket(connection->sock);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   716
+	if(connection->returnElement) free(connection->returnElement);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   717
+	if(connection->request) free(connection->request);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   718
+	free(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   719
+	WSACleanup();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   720
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   721
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   722
+static void mpd_executeCommand(mpd_Connection * connection, char * command) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   723
+	int ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   724
+	struct timeval tv;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   725
+	fd_set fds;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   726
+	char * commandPtr = command;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   727
+	int commandLen = strlen(command);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   728
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   729
+	if(!connection->doneProcessing && !connection->commandList) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   730
+		strcpy(connection->errorStr,"not done processing current command");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   731
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   732
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   733
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   734
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   735
+	mpd_clearError(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   736
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   737
+	FD_ZERO(&fds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   738
+	FD_SET(connection->sock,&fds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   739
+	tv.tv_sec = connection->timeout.tv_sec;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   740
+	tv.tv_usec = connection->timeout.tv_usec;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   741
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   742
+	while((ret = select(connection->sock+1,NULL,&fds,NULL,&tv)==1) ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   743
+			(ret==-1 && SELECT_ERRNO_IGNORE)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   744
+		ret = send(connection->sock,commandPtr,commandLen,MSG_DONTWAIT);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   745
+		if(ret<=0)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   746
+		{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   747
+			if (SENDRECV_ERRNO_IGNORE) continue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   748
+			snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   749
+			         "problems giving command \"%s\"",command);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   750
+			connection->error = MPD_ERROR_SENDING;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   751
+			return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   752
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   753
+		else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   754
+			commandPtr+=ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   755
+			commandLen-=ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   756
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   757
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   758
+		if(commandLen<=0) break;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   759
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   760
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   761
+	if(commandLen>0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   762
+		perror("");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   763
+		snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   764
+		         "timeout sending command \"%s\"",command);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   765
+		connection->error = MPD_ERROR_TIMEOUT;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   766
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   767
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   768
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   769
+	if(!connection->commandList) connection->doneProcessing = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   770
+	else if(connection->commandList == COMMAND_LIST_OK) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   771
+		connection->listOks++;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   772
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   773
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   774
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   775
+static void mpd_getNextReturnElement(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   776
+	char * output = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   777
+	char * rt = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   778
+	char * name = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   779
+	char * value = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   780
+	fd_set fds;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   781
+	struct timeval tv;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   782
+	char * tok = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   783
+	int readed;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   784
+	char * bufferCheck = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   785
+	int err;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   786
+	int pos;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   787
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   788
+	if(connection->returnElement) mpd_freeReturnElement(connection->returnElement);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   789
+	connection->returnElement = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   790
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   791
+	if(connection->doneProcessing || (connection->listOks &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   792
+	   connection->doneListOk))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   793
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   794
+		strcpy(connection->errorStr,"already done processing current command");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   795
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   796
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   797
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   798
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   799
+	bufferCheck = connection->buffer+connection->bufstart;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   800
+	while(connection->bufstart>=connection->buflen ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   801
+			!(rt = strchr(bufferCheck,'\n'))) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   802
+		if(connection->buflen>=MPD_BUFFER_MAX_LENGTH) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   803
+			memmove(connection->buffer,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   804
+					connection->buffer+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   805
+					connection->bufstart,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   806
+					connection->buflen-
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   807
+					connection->bufstart+1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   808
+			connection->buflen-=connection->bufstart;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   809
+			connection->bufstart = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   810
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   811
+		if(connection->buflen>=MPD_BUFFER_MAX_LENGTH) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   812
+			strcpy(connection->errorStr,"buffer overrun");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   813
+			connection->error = MPD_ERROR_BUFFEROVERRUN;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   814
+			connection->doneProcessing = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   815
+			connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   816
+			return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   817
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   818
+		bufferCheck = connection->buffer+connection->buflen;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   819
+		tv.tv_sec = connection->timeout.tv_sec;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   820
+		tv.tv_usec = connection->timeout.tv_usec;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   821
+		FD_ZERO(&fds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   822
+		FD_SET(connection->sock,&fds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   823
+		if((err = select(connection->sock+1,&fds,NULL,NULL,&tv) == 1)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   824
+			readed = recv(connection->sock,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   825
+					connection->buffer+connection->buflen,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   826
+					MPD_BUFFER_MAX_LENGTH-connection->buflen,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   827
+					MSG_DONTWAIT);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   828
+			if(readed<0 && SENDRECV_ERRNO_IGNORE) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   829
+				continue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   830
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   831
+			if(readed<=0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   832
+				strcpy(connection->errorStr,"connection"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   833
+				       " closed");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   834
+				connection->error = MPD_ERROR_CONNCLOSED;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   835
+				connection->doneProcessing = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   836
+				connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   837
+				return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   838
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   839
+			connection->buflen+=readed;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   840
+			connection->buffer[connection->buflen] = '\0';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   841
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   842
+		else if(err<0 && SELECT_ERRNO_IGNORE) continue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   843
+		else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   844
+			strcpy(connection->errorStr,"connection timeout");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   845
+			connection->error = MPD_ERROR_TIMEOUT;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   846
+			connection->doneProcessing = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   847
+			connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   848
+			return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   849
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   850
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   851
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   852
+	*rt = '\0';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   853
+	output = connection->buffer+connection->bufstart;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   854
+	connection->bufstart = rt - connection->buffer + 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   855
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   856
+	if(strcmp(output,"OK")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   857
+		if(connection->listOks > 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   858
+			strcpy(connection->errorStr, "expected more list_OK's");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   859
+			connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   860
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   861
+		connection->listOks = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   862
+		connection->doneProcessing = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   863
+		connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   864
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   865
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   866
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   867
+	if(strcmp(output, "list_OK") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   868
+		if(!connection->listOks) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   869
+			strcpy(connection->errorStr,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   870
+					"got an unexpected list_OK");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   871
+			connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   872
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   873
+		else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   874
+			connection->doneListOk = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   875
+			connection->listOks--;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   876
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   877
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   878
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   879
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   880
+	if(strncmp(output,"ACK",strlen("ACK"))==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   881
+		char * test;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   882
+		char * needle;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   883
+		int val;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   884
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   885
+		strcpy(connection->errorStr, output);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   886
+		connection->error = MPD_ERROR_ACK;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   887
+		connection->errorCode = MPD_ACK_ERROR_UNK;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   888
+		connection->errorAt = MPD_ERROR_AT_UNK;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   889
+		connection->doneProcessing = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   890
+		connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   891
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   892
+		needle = strchr(output, '[');
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   893
+		if(!needle) return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   894
+		val = strtol(needle+1, &test, 10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   895
+		if(*test != '@') return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   896
+		connection->errorCode = val;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   897
+		val = strtol(test+1, &test, 10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   898
+		if(*test != ']') return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   899
+		connection->errorAt = val;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   900
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   901
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   902
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   903
+	tok = strchr(output, ':');
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   904
+	if (!tok) return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   905
+	pos = tok - output;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   906
+	value = ++tok;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   907
+	name = output;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   908
+	name[pos] = '\0';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   909
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   910
+	if(value[0]==' ') {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   911
+		connection->returnElement = mpd_newReturnElement(name,&(value[1]));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   912
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   913
+	else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   914
+		snprintf(connection->errorStr,MPD_ERRORSTR_MAX_LENGTH,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   915
+					"error parsing: %s:%s",name,value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   916
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   917
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   918
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   919
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   920
+void mpd_finishCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   921
+	while(!connection->doneProcessing) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   922
+		if(connection->doneListOk) connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   923
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   924
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   925
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   926
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   927
+static void mpd_finishListOkCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   928
+	while(!connection->doneProcessing && connection->listOks &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   929
+			!connection->doneListOk)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   930
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   931
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   932
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   933
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   934
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   935
+int mpd_nextListOkCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   936
+	mpd_finishListOkCommand(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   937
+	if(!connection->doneProcessing) connection->doneListOk = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   938
+	if(connection->listOks == 0 || connection->doneProcessing) return -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   939
+	return 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   940
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   941
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   942
+void mpd_sendStatusCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   943
+	mpd_executeCommand(connection,"status\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   944
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   945
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   946
+mpd_Status * mpd_getStatus(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   947
+	mpd_Status * status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   948
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   949
+	/*mpd_executeCommand(connection,"status\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   950
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   951
+	if(connection->error) return NULL;*/
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   952
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   953
+	if(connection->doneProcessing || (connection->listOks &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   954
+	   connection->doneListOk))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   955
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   956
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   957
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   958
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   959
+	if(!connection->returnElement) mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   960
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   961
+	status = (mpd_Status *)malloc(sizeof(mpd_Status));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   962
+	status->volume = -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   963
+	status->repeat = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   964
+	status->random = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   965
+	status->playlist = -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   966
+	status->playlistLength = -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   967
+	status->state = -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   968
+	status->song = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   969
+	status->songid = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   970
+	status->elapsedTime = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   971
+	status->totalTime = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   972
+	status->bitRate = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   973
+	status->sampleRate = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   974
+	status->bits = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   975
+	status->channels = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   976
+	status->crossfade = -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   977
+	status->error = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   978
+	status->updatingDb = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   979
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   980
+	if(connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   981
+		free(status);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   982
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   983
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   984
+	while(connection->returnElement) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   985
+		mpd_ReturnElement * re = connection->returnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   986
+		if(strcmp(re->name,"volume")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   987
+			status->volume = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   988
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   989
+		else if(strcmp(re->name,"repeat")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   990
+			status->repeat = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   991
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   992
+		else if(strcmp(re->name,"random")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   993
+			status->random = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   994
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   995
+		else if(strcmp(re->name,"playlist")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   996
+			status->playlist = strtol(re->value,NULL,10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   997
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   998
+		else if(strcmp(re->name,"playlistlength")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
   999
+			status->playlistLength = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1000
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1001
+		else if(strcmp(re->name,"bitrate")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1002
+			status->bitRate = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1003
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1004
+		else if(strcmp(re->name,"state")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1005
+			if(strcmp(re->value,"play")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1006
+				status->state = MPD_STATUS_STATE_PLAY;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1007
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1008
+			else if(strcmp(re->value,"stop")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1009
+				status->state = MPD_STATUS_STATE_STOP;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1010
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1011
+			else if(strcmp(re->value,"pause")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1012
+				status->state = MPD_STATUS_STATE_PAUSE;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1013
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1014
+			else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1015
+				status->state = MPD_STATUS_STATE_UNKNOWN;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1016
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1017
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1018
+		else if(strcmp(re->name,"song")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1019
+			status->song = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1020
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1021
+		else if(strcmp(re->name,"songid")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1022
+			status->songid = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1023
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1024
+		else if(strcmp(re->name,"time")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1025
+			char * tok = strchr(re->value,':');
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1026
+			/* the second strchr below is a safety check */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1027
+			if (tok && (strchr(tok,0) > (tok+1))) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1028
+				/* atoi stops at the first non-[0-9] char: */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1029
+				status->elapsedTime = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1030
+				status->totalTime = atoi(tok+1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1031
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1032
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1033
+		else if(strcmp(re->name,"error")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1034
+			status->error = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1035
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1036
+		else if(strcmp(re->name,"xfade")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1037
+			status->crossfade = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1038
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1039
+		else if(strcmp(re->name,"updating_db")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1040
+			status->updatingDb = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1041
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1042
+		else if(strcmp(re->name,"audio")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1043
+			char * tok = strchr(re->value,':');
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1044
+			if (tok && (strchr(tok,0) > (tok+1))) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1045
+				status->sampleRate = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1046
+				status->bits = atoi(++tok);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1047
+				tok = strchr(tok,':');
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1048
+				if (tok && (strchr(tok,0) > (tok+1)))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1049
+					status->channels = atoi(tok+1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1050
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1051
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1052
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1053
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1054
+		if(connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1055
+			free(status);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1056
+			return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1057
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1058
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1059
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1060
+	if(connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1061
+		free(status);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1062
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1063
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1064
+	else if(status->state<0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1065
+		strcpy(connection->errorStr,"state not found");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1066
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1067
+		free(status);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1068
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1069
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1070
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1071
+	return status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1072
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1073
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1074
+void mpd_freeStatus(mpd_Status * status) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1075
+	if(status->error) free(status->error);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1076
+	free(status);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1077
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1078
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1079
+void mpd_sendStatsCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1080
+	mpd_executeCommand(connection,"stats\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1081
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1082
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1083
+mpd_Stats * mpd_getStats(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1084
+	mpd_Stats * stats;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1085
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1086
+	/*mpd_executeCommand(connection,"stats\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1087
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1088
+	if(connection->error) return NULL;*/
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1089
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1090
+	if(connection->doneProcessing || (connection->listOks &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1091
+	   connection->doneListOk))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1092
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1093
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1094
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1095
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1096
+	if(!connection->returnElement) mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1097
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1098
+	stats = (mpd_Stats *)malloc(sizeof(mpd_Stats));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1099
+	stats->numberOfArtists = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1100
+	stats->numberOfAlbums = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1101
+	stats->numberOfSongs = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1102
+	stats->uptime = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1103
+	stats->dbUpdateTime = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1104
+	stats->playTime = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1105
+	stats->dbPlayTime = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1106
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1107
+	if(connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1108
+		free(stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1109
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1110
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1111
+	while(connection->returnElement) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1112
+		mpd_ReturnElement * re = connection->returnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1113
+		if(strcmp(re->name,"artists")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1114
+			stats->numberOfArtists = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1115
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1116
+		else if(strcmp(re->name,"albums")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1117
+			stats->numberOfAlbums = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1118
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1119
+		else if(strcmp(re->name,"songs")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1120
+			stats->numberOfSongs = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1121
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1122
+		else if(strcmp(re->name,"uptime")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1123
+			stats->uptime = strtol(re->value,NULL,10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1124
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1125
+		else if(strcmp(re->name,"db_update")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1126
+			stats->dbUpdateTime = strtol(re->value,NULL,10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1127
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1128
+		else if(strcmp(re->name,"playtime")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1129
+			stats->playTime = strtol(re->value,NULL,10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1130
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1131
+		else if(strcmp(re->name,"db_playtime")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1132
+			stats->dbPlayTime = strtol(re->value,NULL,10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1133
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1134
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1135
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1136
+		if(connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1137
+			free(stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1138
+			return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1139
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1140
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1141
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1142
+	if(connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1143
+		free(stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1144
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1145
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1146
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1147
+	return stats;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1148
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1149
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1150
+void mpd_freeStats(mpd_Stats * stats) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1151
+	free(stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1152
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1153
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1154
+mpd_SearchStats * mpd_getSearchStats(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1155
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1156
+	mpd_SearchStats * stats;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1157
+	mpd_ReturnElement * re;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1158
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1159
+	if (connection->doneProcessing ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1160
+	    (connection->listOks && connection->doneListOk)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1161
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1162
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1163
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1164
+	if (!connection->returnElement) mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1165
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1166
+	if (connection->error)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1167
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1168
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1169
+	stats = (mpd_SearchStats *)malloc(sizeof(mpd_SearchStats));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1170
+	stats->numberOfSongs = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1171
+	stats->playTime = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1172
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1173
+	while (connection->returnElement) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1174
+		re = connection->returnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1175
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1176
+		if (strcmp(re->name, "songs") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1177
+			stats->numberOfSongs = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1178
+		} else if (strcmp(re->name, "playtime") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1179
+			stats->playTime = strtol(re->value, NULL, 10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1180
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1181
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1182
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1183
+		if (connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1184
+			free(stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1185
+			return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1186
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1187
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1188
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1189
+	if (connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1190
+		free(stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1191
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1192
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1193
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1194
+	return stats;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1195
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1196
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1197
+void mpd_freeSearchStats(mpd_SearchStats * stats)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1198
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1199
+	free(stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1200
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1201
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1202
+static void mpd_initSong(mpd_Song * song) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1203
+	song->file = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1204
+	song->artist = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1205
+	song->album = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1206
+	song->track = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1207
+	song->title = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1208
+	song->name = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1209
+	song->date = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1210
+	/* added by Qball */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1211
+	song->genre = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1212
+	song->composer = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1213
+	song->performer = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1214
+	song->disc = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1215
+	song->comment = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1216
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1217
+	song->time = MPD_SONG_NO_TIME;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1218
+	song->pos = MPD_SONG_NO_NUM;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1219
+	song->id = MPD_SONG_NO_ID;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1220
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1221
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1222
+static void mpd_finishSong(mpd_Song * song) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1223
+	if(song->file) free(song->file);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1224
+	if(song->artist) free(song->artist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1225
+	if(song->album) free(song->album);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1226
+	if(song->title) free(song->title);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1227
+	if(song->track) free(song->track);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1228
+	if(song->name) free(song->name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1229
+	if(song->date) free(song->date);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1230
+	if(song->genre) free(song->genre);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1231
+	if(song->composer) free(song->composer);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1232
+	if(song->disc) free(song->disc);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1233
+	if(song->comment) free(song->comment);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1234
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1235
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1236
+mpd_Song * mpd_newSong(void) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1237
+	mpd_Song * ret = (mpd_Song *)malloc(sizeof(mpd_Song));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1238
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1239
+	mpd_initSong(ret);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1240
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1241
+	return ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1242
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1243
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1244
+void mpd_freeSong(mpd_Song * song) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1245
+	mpd_finishSong(song);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1246
+	free(song);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1247
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1248
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1249
+mpd_Song * mpd_songDup(mpd_Song * song) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1250
+	mpd_Song * ret = mpd_newSong();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1251
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1252
+	if(song->file) ret->file = strdup(song->file);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1253
+	if(song->artist) ret->artist = strdup(song->artist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1254
+	if(song->album) ret->album = strdup(song->album);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1255
+	if(song->title) ret->title = strdup(song->title);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1256
+	if(song->track) ret->track = strdup(song->track);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1257
+	if(song->name) ret->name = strdup(song->name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1258
+	if(song->date) ret->date = strdup(song->date);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1259
+	if(song->genre) ret->genre= strdup(song->genre);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1260
+	if(song->composer) ret->composer= strdup(song->composer);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1261
+	if(song->disc) ret->disc = strdup(song->disc);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1262
+	if(song->comment) ret->comment = strdup(song->comment);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1263
+	ret->time = song->time;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1264
+	ret->pos = song->pos;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1265
+	ret->id = song->id;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1266
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1267
+	return ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1268
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1269
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1270
+static void mpd_initDirectory(mpd_Directory * directory) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1271
+	directory->path = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1272
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1273
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1274
+static void mpd_finishDirectory(mpd_Directory * directory) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1275
+	if(directory->path) free(directory->path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1276
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1277
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1278
+mpd_Directory * mpd_newDirectory(void) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1279
+	mpd_Directory * directory = (mpd_Directory *)malloc(sizeof(mpd_Directory));;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1280
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1281
+	mpd_initDirectory(directory);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1282
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1283
+	return directory;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1284
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1285
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1286
+void mpd_freeDirectory(mpd_Directory * directory) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1287
+	mpd_finishDirectory(directory);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1288
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1289
+	free(directory);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1290
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1291
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1292
+mpd_Directory * mpd_directoryDup(mpd_Directory * directory) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1293
+	mpd_Directory * ret = mpd_newDirectory();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1294
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1295
+	if(directory->path) ret->path = strdup(directory->path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1296
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1297
+	return ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1298
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1299
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1300
+static void mpd_initPlaylistFile(mpd_PlaylistFile * playlist) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1301
+	playlist->path = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1302
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1303
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1304
+static void mpd_finishPlaylistFile(mpd_PlaylistFile * playlist) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1305
+	if(playlist->path) free(playlist->path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1306
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1307
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1308
+mpd_PlaylistFile * mpd_newPlaylistFile(void) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1309
+	mpd_PlaylistFile * playlist = (mpd_PlaylistFile *)malloc(sizeof(mpd_PlaylistFile));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1310
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1311
+	mpd_initPlaylistFile(playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1312
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1313
+	return playlist;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1314
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1315
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1316
+void mpd_freePlaylistFile(mpd_PlaylistFile * playlist) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1317
+	mpd_finishPlaylistFile(playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1318
+	free(playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1319
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1320
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1321
+mpd_PlaylistFile * mpd_playlistFileDup(mpd_PlaylistFile * playlist) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1322
+	mpd_PlaylistFile * ret = mpd_newPlaylistFile();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1323
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1324
+	if(playlist->path) ret->path = strdup(playlist->path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1325
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1326
+	return ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1327
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1328
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1329
+static void mpd_initInfoEntity(mpd_InfoEntity * entity) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1330
+	entity->info.directory = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1331
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1332
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1333
+static void mpd_finishInfoEntity(mpd_InfoEntity * entity) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1334
+	if(entity->info.directory) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1335
+		if(entity->type == MPD_INFO_ENTITY_TYPE_DIRECTORY) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1336
+			mpd_freeDirectory(entity->info.directory);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1337
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1338
+		else if(entity->type == MPD_INFO_ENTITY_TYPE_SONG) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1339
+			mpd_freeSong(entity->info.song);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1340
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1341
+		else if(entity->type == MPD_INFO_ENTITY_TYPE_PLAYLISTFILE) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1342
+			mpd_freePlaylistFile(entity->info.playlistFile);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1343
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1344
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1345
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1346
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1347
+mpd_InfoEntity * mpd_newInfoEntity(void) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1348
+	mpd_InfoEntity * entity = (mpd_InfoEntity *)malloc(sizeof(mpd_InfoEntity));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1349
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1350
+	mpd_initInfoEntity(entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1351
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1352
+	return entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1353
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1354
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1355
+void mpd_freeInfoEntity(mpd_InfoEntity * entity) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1356
+	mpd_finishInfoEntity(entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1357
+	free(entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1358
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1359
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1360
+static void mpd_sendInfoCommand(mpd_Connection * connection, char * command) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1361
+	mpd_executeCommand(connection,command);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1362
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1363
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1364
+mpd_InfoEntity * mpd_getNextInfoEntity(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1365
+	mpd_InfoEntity * entity = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1366
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1367
+	if(connection->doneProcessing || (connection->listOks &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1368
+	   connection->doneListOk))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1369
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1370
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1371
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1372
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1373
+	if(!connection->returnElement) mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1374
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1375
+	if(connection->returnElement) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1376
+		if(strcmp(connection->returnElement->name,"file")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1377
+			entity = mpd_newInfoEntity();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1378
+			entity->type = MPD_INFO_ENTITY_TYPE_SONG;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1379
+			entity->info.song = mpd_newSong();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1380
+			entity->info.song->file =
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1381
+				strdup(connection->returnElement->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1382
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1383
+		else if(strcmp(connection->returnElement->name,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1384
+					"directory")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1385
+			entity = mpd_newInfoEntity();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1386
+			entity->type = MPD_INFO_ENTITY_TYPE_DIRECTORY;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1387
+			entity->info.directory = mpd_newDirectory();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1388
+			entity->info.directory->path =
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1389
+				strdup(connection->returnElement->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1390
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1391
+		else if(strcmp(connection->returnElement->name,"playlist")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1392
+			entity = mpd_newInfoEntity();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1393
+			entity->type = MPD_INFO_ENTITY_TYPE_PLAYLISTFILE;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1394
+			entity->info.playlistFile = mpd_newPlaylistFile();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1395
+			entity->info.playlistFile->path =
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1396
+				strdup(connection->returnElement->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1397
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1398
+		else if(strcmp(connection->returnElement->name, "cpos") == 0){
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1399
+			entity = mpd_newInfoEntity();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1400
+			entity->type = MPD_INFO_ENTITY_TYPE_SONG;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1401
+			entity->info.song = mpd_newSong();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1402
+			entity->info.song->pos = atoi(connection->returnElement->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1403
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1404
+		else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1405
+			connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1406
+			strcpy(connection->errorStr,"problem parsing song info");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1407
+			return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1408
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1409
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1410
+	else return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1411
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1412
+	mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1413
+	while(connection->returnElement) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1414
+		mpd_ReturnElement * re = connection->returnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1415
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1416
+		if(strcmp(re->name,"file")==0) return entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1417
+		else if(strcmp(re->name,"directory")==0) return entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1418
+		else if(strcmp(re->name,"playlist")==0) return entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1419
+		else if(strcmp(re->name,"cpos")==0) return entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1420
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1421
+		if(entity->type == MPD_INFO_ENTITY_TYPE_SONG &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1422
+				strlen(re->value)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1423
+			if(!entity->info.song->artist &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1424
+					strcmp(re->name,"Artist")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1425
+				entity->info.song->artist = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1426
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1427
+			else if(!entity->info.song->album &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1428
+					strcmp(re->name,"Album")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1429
+				entity->info.song->album = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1430
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1431
+			else if(!entity->info.song->title &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1432
+					strcmp(re->name,"Title")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1433
+				entity->info.song->title = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1434
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1435
+			else if(!entity->info.song->track &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1436
+					strcmp(re->name,"Track")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1437
+				entity->info.song->track = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1438
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1439
+			else if(!entity->info.song->name &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1440
+					strcmp(re->name,"Name")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1441
+				entity->info.song->name = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1442
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1443
+			else if(entity->info.song->time==MPD_SONG_NO_TIME &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1444
+					strcmp(re->name,"Time")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1445
+				entity->info.song->time = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1446
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1447
+			else if(entity->info.song->pos==MPD_SONG_NO_NUM &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1448
+					strcmp(re->name,"Pos")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1449
+				entity->info.song->pos = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1450
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1451
+			else if(entity->info.song->id==MPD_SONG_NO_ID &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1452
+					strcmp(re->name,"Id")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1453
+				entity->info.song->id = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1454
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1455
+			else if(!entity->info.song->date &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1456
+					strcmp(re->name, "Date") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1457
+				entity->info.song->date = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1458
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1459
+			else if(!entity->info.song->genre &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1460
+					strcmp(re->name, "Genre") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1461
+				entity->info.song->genre = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1462
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1463
+			else if(!entity->info.song->composer &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1464
+					strcmp(re->name, "Composer") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1465
+				entity->info.song->composer = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1466
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1467
+			else if(!entity->info.song->performer &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1468
+					strcmp(re->name, "Performer") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1469
+				entity->info.song->performer = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1470
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1471
+			else if(!entity->info.song->disc &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1472
+					strcmp(re->name, "Disc") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1473
+				entity->info.song->disc = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1474
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1475
+			else if(!entity->info.song->comment &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1476
+					strcmp(re->name, "Comment") == 0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1477
+				entity->info.song->comment = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1478
+			}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1479
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1480
+		else if(entity->type == MPD_INFO_ENTITY_TYPE_DIRECTORY) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1481
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1482
+		else if(entity->type == MPD_INFO_ENTITY_TYPE_PLAYLISTFILE) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1483
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1484
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1485
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1486
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1487
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1488
+	return entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1489
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1490
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1491
+static char * mpd_getNextReturnElementNamed(mpd_Connection * connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1492
+		const char * name)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1493
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1494
+	if(connection->doneProcessing || (connection->listOks &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1495
+				connection->doneListOk))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1496
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1497
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1498
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1499
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1500
+	mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1501
+	while(connection->returnElement) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1502
+		mpd_ReturnElement * re = connection->returnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1503
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1504
+		if(strcmp(re->name,name)==0) return strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1505
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1506
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1507
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1508
+	return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1509
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1510
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1511
+char *mpd_getNextTag(mpd_Connection *connection, int type)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1512
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1513
+	if (type < 0 || type >= MPD_TAG_NUM_OF_ITEM_TYPES ||
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1514
+	    type == MPD_TAG_ITEM_ANY)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1515
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1516
+	if (type == MPD_TAG_ITEM_FILENAME)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1517
+		return mpd_getNextReturnElementNamed(connection, "file");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1518
+	return mpd_getNextReturnElementNamed(connection, mpdTagItemKeys[type]);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1519
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1520
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1521
+char * mpd_getNextArtist(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1522
+	return mpd_getNextReturnElementNamed(connection,"Artist");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1523
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1524
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1525
+char * mpd_getNextAlbum(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1526
+	return mpd_getNextReturnElementNamed(connection,"Album");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1527
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1528
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1529
+void mpd_sendPlaylistInfoCommand(mpd_Connection * connection, int songPos) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1530
+	int len = strlen("playlistinfo")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1531
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1532
+	snprintf(string, len, "playlistinfo \"%i\"\n", songPos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1533
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1534
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1535
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1536
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1537
+void mpd_sendPlaylistIdCommand(mpd_Connection * connection, int id) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1538
+	int len = strlen("playlistid")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1539
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1540
+	snprintf(string, len, "playlistid \"%i\"\n", id);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1541
+	mpd_sendInfoCommand(connection, string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1542
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1543
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1544
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1545
+void mpd_sendPlChangesCommand(mpd_Connection * connection, long long playlist) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1546
+	int len = strlen("plchanges")+2+LONGLONGLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1547
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1548
+	snprintf(string, len, "plchanges \"%lld\"\n", playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1549
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1550
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1551
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1552
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1553
+void mpd_sendPlChangesPosIdCommand(mpd_Connection * connection, long long playlist) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1554
+	int len = strlen("plchangesposid")+2+LONGLONGLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1555
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1556
+	snprintf(string, len, "plchangesposid \"%lld\"\n", playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1557
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1558
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1559
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1560
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1561
+void mpd_sendListallCommand(mpd_Connection * connection, const char * dir) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1562
+	char * sDir = mpd_sanitizeArg(dir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1563
+	int len = strlen("listall")+2+strlen(sDir)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1564
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1565
+	snprintf(string, len, "listall \"%s\"\n", sDir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1566
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1567
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1568
+	free(sDir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1569
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1570
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1571
+void mpd_sendListallInfoCommand(mpd_Connection * connection, const char * dir) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1572
+	char * sDir = mpd_sanitizeArg(dir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1573
+	int len = strlen("listallinfo")+2+strlen(sDir)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1574
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1575
+	snprintf(string, len, "listallinfo \"%s\"\n", sDir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1576
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1577
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1578
+	free(sDir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1579
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1580
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1581
+void mpd_sendLsInfoCommand(mpd_Connection * connection, const char * dir) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1582
+	char * sDir = mpd_sanitizeArg(dir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1583
+	int len = strlen("lsinfo")+2+strlen(sDir)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1584
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1585
+	snprintf(string, len, "lsinfo \"%s\"\n", sDir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1586
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1587
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1588
+	free(sDir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1589
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1590
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1591
+void mpd_sendCurrentSongCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1592
+	mpd_executeCommand(connection,"currentsong\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1593
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1594
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1595
+void mpd_sendSearchCommand(mpd_Connection * connection, int table,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1596
+		const char * str)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1597
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1598
+	mpd_startSearch(connection, 0);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1599
+	mpd_addConstraintSearch(connection, table, str);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1600
+	mpd_commitSearch(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1601
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1602
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1603
+void mpd_sendFindCommand(mpd_Connection * connection, int table,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1604
+		const char * str)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1605
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1606
+	mpd_startSearch(connection, 1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1607
+	mpd_addConstraintSearch(connection, table, str);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1608
+	mpd_commitSearch(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1609
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1610
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1611
+void mpd_sendListCommand(mpd_Connection * connection, int table,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1612
+		const char * arg1)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1613
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1614
+	char st[10];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1615
+	int len;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1616
+	char *string;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1617
+	if(table == MPD_TABLE_ARTIST) strcpy(st,"artist");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1618
+	else if(table == MPD_TABLE_ALBUM) strcpy(st,"album");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1619
+	else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1620
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1621
+		strcpy(connection->errorStr,"unknown table for list");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1622
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1623
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1624
+	if(arg1) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1625
+		char * sanitArg1 = mpd_sanitizeArg(arg1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1626
+		len = strlen("list")+1+strlen(sanitArg1)+2+strlen(st)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1627
+		string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1628
+		snprintf(string, len, "list %s \"%s\"\n", st, sanitArg1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1629
+		free(sanitArg1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1630
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1631
+	else {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1632
+		len = strlen("list")+1+strlen(st)+2;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1633
+		string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1634
+		snprintf(string, len, "list %s\n", st);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1635
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1636
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1637
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1638
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1639
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1640
+void mpd_sendAddCommand(mpd_Connection * connection, const char * file) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1641
+	char * sFile = mpd_sanitizeArg(file);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1642
+	int len = strlen("add")+2+strlen(sFile)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1643
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1644
+	snprintf(string, len, "add \"%s\"\n", sFile);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1645
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1646
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1647
+	free(sFile);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1648
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1649
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1650
+int mpd_sendAddIdCommand(mpd_Connection *connection, const char *file)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1651
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1652
+	int retval = -1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1653
+	char *sFile = mpd_sanitizeArg(file);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1654
+	int len = strlen("addid")+2+strlen(sFile)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1655
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1656
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1657
+	snprintf(string, len, "addid \"%s\"\n", sFile);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1658
+	mpd_sendInfoCommand(connection, string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1659
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1660
+	free(sFile);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1661
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1662
+	string = mpd_getNextReturnElementNamed(connection, "Id");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1663
+	if (string) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1664
+		retval = atoi(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1665
+		free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1666
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1667
+	
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1668
+	return retval;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1669
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1670
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1671
+void mpd_sendDeleteCommand(mpd_Connection * connection, int songPos) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1672
+	int len = strlen("delete")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1673
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1674
+	snprintf(string, len, "delete \"%i\"\n", songPos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1675
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1676
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1677
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1678
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1679
+void mpd_sendDeleteIdCommand(mpd_Connection * connection, int id) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1680
+	int len = strlen("deleteid")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1681
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1682
+	snprintf(string, len, "deleteid \"%i\"\n", id);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1683
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1684
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1685
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1686
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1687
+void mpd_sendSaveCommand(mpd_Connection * connection, const char * name) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1688
+	char * sName = mpd_sanitizeArg(name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1689
+	int len = strlen("save")+2+strlen(sName)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1690
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1691
+	snprintf(string, len, "save \"%s\"\n", sName);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1692
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1693
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1694
+	free(sName);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1695
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1696
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1697
+void mpd_sendLoadCommand(mpd_Connection * connection, const char * name) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1698
+	char * sName = mpd_sanitizeArg(name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1699
+	int len = strlen("load")+2+strlen(sName)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1700
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1701
+	snprintf(string, len, "load \"%s\"\n", sName);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1702
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1703
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1704
+	free(sName);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1705
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1706
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1707
+void mpd_sendRmCommand(mpd_Connection * connection, const char * name) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1708
+	char * sName = mpd_sanitizeArg(name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1709
+	int len = strlen("rm")+2+strlen(sName)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1710
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1711
+	snprintf(string, len, "rm \"%s\"\n", sName);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1712
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1713
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1714
+	free(sName);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1715
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1716
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1717
+void mpd_sendRenameCommand(mpd_Connection *connection, const char *from,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1718
+                           const char *to)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1719
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1720
+	char *sFrom = mpd_sanitizeArg(from);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1721
+	char *sTo = mpd_sanitizeArg(to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1722
+	int len = strlen("rename")+2+strlen(sFrom)+3+strlen(sTo)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1723
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1724
+	snprintf(string, len, "rename \"%s\" \"%s\"\n", sFrom, sTo);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1725
+	mpd_executeCommand(connection, string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1726
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1727
+	free(sFrom);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1728
+	free(sTo);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1729
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1730
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1731
+void mpd_sendShuffleCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1732
+	mpd_executeCommand(connection,"shuffle\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1733
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1734
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1735
+void mpd_sendClearCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1736
+	mpd_executeCommand(connection,"clear\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1737
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1738
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1739
+void mpd_sendPlayCommand(mpd_Connection * connection, int songPos) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1740
+	int len = strlen("play")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1741
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1742
+	snprintf(string, len, "play \"%i\"\n", songPos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1743
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1744
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1745
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1746
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1747
+void mpd_sendPlayIdCommand(mpd_Connection * connection, int id) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1748
+	int len = strlen("playid")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1749
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1750
+	snprintf(string, len, "playid \"%i\"\n", id);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1751
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1752
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1753
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1754
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1755
+void mpd_sendStopCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1756
+	mpd_executeCommand(connection,"stop\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1757
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1758
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1759
+void mpd_sendPauseCommand(mpd_Connection * connection, int pauseMode) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1760
+	int len = strlen("pause")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1761
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1762
+	snprintf(string, len, "pause \"%i\"\n", pauseMode);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1763
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1764
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1765
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1766
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1767
+void mpd_sendNextCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1768
+	mpd_executeCommand(connection,"next\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1769
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1770
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1771
+void mpd_sendMoveCommand(mpd_Connection * connection, int from, int to) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1772
+	int len = strlen("move")+2+INTLEN+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1773
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1774
+	snprintf(string, len, "move \"%i\" \"%i\"\n", from, to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1775
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1776
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1777
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1778
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1779
+void mpd_sendMoveIdCommand(mpd_Connection * connection, int id, int to) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1780
+	int len = strlen("moveid")+2+INTLEN+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1781
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1782
+	snprintf(string, len, "moveid \"%i\" \"%i\"\n", id, to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1783
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1784
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1785
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1786
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1787
+void mpd_sendSwapCommand(mpd_Connection * connection, int song1, int song2) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1788
+	int len = strlen("swap")+2+INTLEN+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1789
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1790
+	snprintf(string, len, "swap \"%i\" \"%i\"\n", song1, song2);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1791
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1792
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1793
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1794
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1795
+void mpd_sendSwapIdCommand(mpd_Connection * connection, int id1, int id2) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1796
+	int len = strlen("swapid")+2+INTLEN+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1797
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1798
+	snprintf(string, len, "swapid \"%i\" \"%i\"\n", id1, id2);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1799
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1800
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1801
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1802
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1803
+void mpd_sendSeekCommand(mpd_Connection * connection, int song, int time) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1804
+	int len = strlen("seek")+2+INTLEN+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1805
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1806
+	snprintf(string, len, "seek \"%i\" \"%i\"\n", song, time);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1807
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1808
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1809
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1810
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1811
+void mpd_sendSeekIdCommand(mpd_Connection * connection, int id, int time) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1812
+	int len = strlen("seekid")+2+INTLEN+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1813
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1814
+	snprintf(string, len, "seekid \"%i\" \"%i\"\n", id, time);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1815
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1816
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1817
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1818
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1819
+void mpd_sendUpdateCommand(mpd_Connection * connection, char * path) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1820
+	char * sPath = mpd_sanitizeArg(path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1821
+	int len = strlen("update")+2+strlen(sPath)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1822
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1823
+	snprintf(string, len, "update \"%s\"\n", sPath);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1824
+	mpd_sendInfoCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1825
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1826
+	free(sPath);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1827
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1828
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1829
+int mpd_getUpdateId(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1830
+	char * jobid;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1831
+	int ret = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1832
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1833
+	jobid = mpd_getNextReturnElementNamed(connection,"updating_db");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1834
+	if(jobid) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1835
+		ret = atoi(jobid);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1836
+		free(jobid);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1837
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1838
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1839
+	return ret;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1840
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1841
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1842
+void mpd_sendPrevCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1843
+	mpd_executeCommand(connection,"previous\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1844
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1845
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1846
+void mpd_sendRepeatCommand(mpd_Connection * connection, int repeatMode) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1847
+	int len = strlen("repeat")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1848
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1849
+	snprintf(string, len, "repeat \"%i\"\n", repeatMode);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1850
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1851
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1852
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1853
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1854
+void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1855
+	int len = strlen("random")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1856
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1857
+	snprintf(string, len, "random \"%i\"\n", randomMode);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1858
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1859
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1860
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1861
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1862
+void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1863
+	int len = strlen("setvol")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1864
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1865
+	snprintf(string, len, "setvol \"%i\"\n", volumeChange);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1866
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1867
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1868
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1869
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1870
+void mpd_sendVolumeCommand(mpd_Connection * connection, int volumeChange) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1871
+	int len = strlen("volume")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1872
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1873
+	snprintf(string, len, "volume \"%i\"\n", volumeChange);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1874
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1875
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1876
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1877
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1878
+void mpd_sendCrossfadeCommand(mpd_Connection * connection, int seconds) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1879
+	int len = strlen("crossfade")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1880
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1881
+	snprintf(string, len, "crossfade \"%i\"\n", seconds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1882
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1883
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1884
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1885
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1886
+void mpd_sendPasswordCommand(mpd_Connection * connection, const char * pass) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1887
+	char * sPass = mpd_sanitizeArg(pass);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1888
+	int len = strlen("password")+2+strlen(sPass)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1889
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1890
+	snprintf(string, len, "password \"%s\"\n", sPass);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1891
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1892
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1893
+	free(sPass);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1894
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1895
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1896
+void mpd_sendCommandListBegin(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1897
+	if(connection->commandList) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1898
+		strcpy(connection->errorStr,"already in command list mode");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1899
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1900
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1901
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1902
+	connection->commandList = COMMAND_LIST;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1903
+	mpd_executeCommand(connection,"command_list_begin\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1904
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1905
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1906
+void mpd_sendCommandListOkBegin(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1907
+	if(connection->commandList) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1908
+		strcpy(connection->errorStr,"already in command list mode");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1909
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1910
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1911
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1912
+	connection->commandList = COMMAND_LIST_OK;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1913
+	mpd_executeCommand(connection,"command_list_ok_begin\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1914
+	connection->listOks = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1915
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1916
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1917
+void mpd_sendCommandListEnd(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1918
+	if(!connection->commandList) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1919
+		strcpy(connection->errorStr,"not in command list mode");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1920
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1921
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1922
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1923
+	connection->commandList = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1924
+	mpd_executeCommand(connection,"command_list_end\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1925
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1926
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1927
+void mpd_sendOutputsCommand(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1928
+	mpd_executeCommand(connection,"outputs\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1929
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1930
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1931
+mpd_OutputEntity * mpd_getNextOutput(mpd_Connection * connection) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1932
+	mpd_OutputEntity * output = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1933
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1934
+	if(connection->doneProcessing || (connection->listOks &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1935
+				connection->doneListOk))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1936
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1937
+		return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1938
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1939
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1940
+	if(connection->error) return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1941
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1942
+	output = (mpd_OutputEntity *)malloc(sizeof(mpd_OutputEntity));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1943
+	output->id = -10;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1944
+	output->name = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1945
+	output->enabled = 0;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1946
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1947
+	if(!connection->returnElement) mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1948
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1949
+	while(connection->returnElement) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1950
+		mpd_ReturnElement * re = connection->returnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1951
+		if(strcmp(re->name,"outputid")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1952
+			if(output!=NULL && output->id>=0) return output;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1953
+			output->id = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1954
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1955
+		else if(strcmp(re->name,"outputname")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1956
+			output->name = strdup(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1957
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1958
+		else if(strcmp(re->name,"outputenabled")==0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1959
+			output->enabled = atoi(re->value);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1960
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1961
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1962
+		mpd_getNextReturnElement(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1963
+		if(connection->error) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1964
+			free(output);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1965
+			return NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1966
+		}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1967
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1968
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1969
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1970
+	return output;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1971
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1972
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1973
+void mpd_sendEnableOutputCommand(mpd_Connection * connection, int outputId) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1974
+	int len = strlen("enableoutput")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1975
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1976
+	snprintf(string, len, "enableoutput \"%i\"\n", outputId);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1977
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1978
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1979
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1980
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1981
+void mpd_sendDisableOutputCommand(mpd_Connection * connection, int outputId) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1982
+	int len = strlen("disableoutput")+2+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1983
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1984
+	snprintf(string, len, "disableoutput \"%i\"\n", outputId);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1985
+	mpd_executeCommand(connection,string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1986
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1987
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1988
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1989
+void mpd_freeOutputElement(mpd_OutputEntity * output) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1990
+	free(output->name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1991
+	free(output);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1992
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1993
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1994
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1995
+ * mpd_sendNotCommandsCommand
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1996
+ * odd naming, but it gets the not allowed commands
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1997
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1998
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  1999
+void mpd_sendNotCommandsCommand(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2000
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2001
+	mpd_executeCommand(connection, "notcommands\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2002
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2003
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2004
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2005
+ * mpd_sendCommandsCommand
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2006
+ * odd naming, but it gets the allowed commands
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2007
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2008
+void mpd_sendCommandsCommand(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2009
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2010
+	mpd_executeCommand(connection, "commands\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2011
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2012
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2013
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2014
+ * Get the next returned command
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2015
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2016
+char * mpd_getNextCommand(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2017
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2018
+	return mpd_getNextReturnElementNamed(connection, "command");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2019
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2020
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2021
+void mpd_sendUrlHandlersCommand(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2022
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2023
+	mpd_executeCommand(connection, "urlhandlers\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2024
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2025
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2026
+char * mpd_getNextHandler(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2027
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2028
+	return mpd_getNextReturnElementNamed(connection, "handler");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2029
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2030
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2031
+void mpd_sendTagTypesCommand(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2032
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2033
+	mpd_executeCommand(connection, "tagtypes\n");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2034
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2035
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2036
+char * mpd_getNextTagType(mpd_Connection * connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2037
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2038
+	return mpd_getNextReturnElementNamed(connection, "tagtype");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2039
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2040
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2041
+void mpd_startSearch(mpd_Connection *connection, int exact)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2042
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2043
+	if (connection->request) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2044
+		strcpy(connection->errorStr, "search already in progress");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2045
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2046
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2047
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2048
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2049
+	if (exact) connection->request = strdup("find");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2050
+	else connection->request = strdup("search");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2051
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2052
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2053
+void mpd_startStatsSearch(mpd_Connection *connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2054
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2055
+	if (connection->request) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2056
+		strcpy(connection->errorStr, "search already in progress");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2057
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2058
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2059
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2060
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2061
+	connection->request = strdup("count");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2062
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2063
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2064
+void mpd_startPlaylistSearch(mpd_Connection *connection, int exact)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2065
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2066
+	if (connection->request) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2067
+		strcpy(connection->errorStr, "search already in progress");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2068
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2069
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2070
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2071
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2072
+	if (exact) connection->request = strdup("playlistfind");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2073
+	else connection->request = strdup("playlistsearch");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2074
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2075
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2076
+void mpd_startFieldSearch(mpd_Connection *connection, int type)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2077
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2078
+	char *strtype;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2079
+	int len;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2080
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2081
+	if (connection->request) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2082
+		strcpy(connection->errorStr, "search already in progress");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2083
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2084
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2085
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2086
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2087
+	if (type < 0 || type >= MPD_TAG_NUM_OF_ITEM_TYPES) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2088
+		strcpy(connection->errorStr, "invalid type specified");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2089
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2090
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2091
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2092
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2093
+	strtype = mpdTagItemKeys[type];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2094
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2095
+	len = 5+strlen(strtype)+1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2096
+	connection->request = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2097
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2098
+	snprintf(connection->request, len, "list %c%s",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2099
+	         tolower(strtype[0]), strtype+1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2100
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2101
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2102
+void mpd_addConstraintSearch(mpd_Connection *connection, int type, const char *name)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2103
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2104
+	char *strtype;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2105
+	char *arg;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2106
+	int len;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2107
+	char *string;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2108
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2109
+	if (!connection->request) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2110
+		strcpy(connection->errorStr, "no search in progress");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2111
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2112
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2113
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2114
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2115
+	if (type < 0 || type >= MPD_TAG_NUM_OF_ITEM_TYPES) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2116
+		strcpy(connection->errorStr, "invalid type specified");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2117
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2118
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2119
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2120
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2121
+	if (name == NULL) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2122
+		strcpy(connection->errorStr, "no name specified");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2123
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2124
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2125
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2126
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2127
+	string = strdup(connection->request);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2128
+	strtype = mpdTagItemKeys[type];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2129
+	arg = mpd_sanitizeArg(name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2130
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2131
+	len = strlen(string)+1+strlen(strtype)+2+strlen(arg)+2;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2132
+	connection->request = (char *)realloc(connection->request, len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2133
+	snprintf(connection->request, len, "%s %c%s \"%s\"",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2134
+	         string, tolower(strtype[0]), strtype+1, arg);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2135
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2136
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2137
+	free(arg);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2138
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2139
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2140
+void mpd_commitSearch(mpd_Connection *connection)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2141
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2142
+	int len;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2143
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2144
+	if (!connection->request) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2145
+		strcpy(connection->errorStr, "no search in progress");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2146
+		connection->error = 1;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2147
+		return;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2148
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2149
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2150
+	len = strlen(connection->request)+2;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2151
+	connection->request = (char *)realloc(connection->request, len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2152
+	connection->request[len-2] = '\n';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2153
+	connection->request[len-1] = '\0';
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2154
+	mpd_sendInfoCommand(connection, connection->request);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2155
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2156
+	free(connection->request);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2157
+	connection->request = NULL;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2158
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2159
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2160
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2161
+ * @param connection a MpdConnection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2162
+ * @param path	the path to the playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2163
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2164
+ * List the content, with full metadata, of a stored playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2165
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2166
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2167
+void mpd_sendListPlaylistInfoCommand(mpd_Connection *connection, char *path)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2168
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2169
+	char *arg = mpd_sanitizeArg(path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2170
+	int len = strlen("listplaylistinfo")+2+strlen(arg)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2171
+	char *query = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2172
+	snprintf(query, len, "listplaylistinfo \"%s\"\n", arg);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2173
+	mpd_sendInfoCommand(connection, query);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2174
+	free(arg);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2175
+	free(query);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2176
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2177
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2178
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2179
+ * @param connection a MpdConnection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2180
+ * @param path	the path to the playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2181
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2182
+ * List the content of a stored playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2183
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2184
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2185
+void mpd_sendListPlaylistCommand(mpd_Connection *connection, char *path)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2186
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2187
+	char *arg = mpd_sanitizeArg(path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2188
+	int len = strlen("listplaylist")+2+strlen(arg)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2189
+	char *query = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2190
+	snprintf(query, len, "listplaylist \"%s\"\n", arg);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2191
+	mpd_sendInfoCommand(connection, query);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2192
+	free(arg);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2193
+	free(query);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2194
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2195
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2196
+void mpd_sendPlaylistClearCommand(mpd_Connection *connection, char *path)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2197
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2198
+	char *sPath = mpd_sanitizeArg(path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2199
+	int len = strlen("playlistclear")+2+strlen(sPath)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2200
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2201
+	snprintf(string, len, "playlistclear \"%s\"\n", sPath);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2202
+	mpd_executeCommand(connection, string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2203
+	free(sPath);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2204
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2205
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2206
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2207
+void mpd_sendPlaylistAddCommand(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2208
+                                char *playlist, char *path)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2209
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2210
+	char *sPlaylist = mpd_sanitizeArg(playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2211
+	char *sPath = mpd_sanitizeArg(path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2212
+	int len = strlen("playlistadd")+2+strlen(sPlaylist)+3+strlen(sPath)+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2213
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2214
+	snprintf(string, len, "playlistadd \"%s\" \"%s\"\n", sPlaylist, sPath);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2215
+	mpd_executeCommand(connection, string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2216
+	free(sPlaylist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2217
+	free(sPath);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2218
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2219
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2220
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2221
+void mpd_sendPlaylistMoveCommand(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2222
+                                 char *playlist, int from, int to)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2223
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2224
+	char *sPlaylist = mpd_sanitizeArg(playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2225
+	int len = strlen("playlistmove")+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2226
+	          2+strlen(sPlaylist)+3+INTLEN+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2227
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2228
+	snprintf(string, len, "playlistmove \"%s\" \"%i\" \"%i\"\n",
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2229
+	         sPlaylist, from, to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2230
+	mpd_executeCommand(connection, string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2231
+	free(sPlaylist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2232
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2233
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2234
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2235
+void mpd_sendPlaylistDeleteCommand(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2236
+                                   char *playlist, int pos)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2237
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2238
+	char *sPlaylist = mpd_sanitizeArg(playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2239
+	int len = strlen("playlistdelete")+2+strlen(sPlaylist)+3+INTLEN+3;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2240
+	char *string = (char *)malloc(len);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2241
+	snprintf(string, len, "playlistdelete \"%s\" \"%i\"\n", sPlaylist, pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2242
+	mpd_executeCommand(connection, string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2243
+	free(sPlaylist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2244
+	free(string);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2245
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2246
diff -r 171db9560cb5 clients/mpd/libmpdclient.h
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2248
+++ b/clients/mpd/libmpdclient.h	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2249
@@ -0,0 +1,670 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2250
+/* libmpdclient
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2251
+   (c)2003-2006 by Warren Dukes (warren.dukes@gmail.com)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2252
+   This project's homepage is: http://www.musicpd.org
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2253
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2254
+   Redistribution and use in source and binary forms, with or without
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2255
+   modification, are permitted provided that the following conditions
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2256
+   are met:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2257
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2258
+   - Redistributions of source code must retain the above copyright
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2259
+   notice, this list of conditions and the following disclaimer.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2260
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2261
+   - Redistributions in binary form must reproduce the above copyright
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2262
+   notice, this list of conditions and the following disclaimer in the
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2263
+   documentation and/or other materials provided with the distribution.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2264
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2265
+   - Neither the name of the Music Player Daemon nor the names of its
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2266
+   contributors may be used to endorse or promote products derived from
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2267
+   this software without specific prior written permission.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2268
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2269
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2270
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2271
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2272
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2273
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2274
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2275
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2276
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2277
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2278
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2279
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2280
+*/
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2281
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2282
+#ifndef LIBMPDCLIENT_H
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2283
+#define LIBMPDCLIENT_H
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2284
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2285
+#ifdef WIN32
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2286
+#  define __W32API_USE_DLLIMPORT__ 1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2287
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2288
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2289
+#include <sys/time.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2290
+#include <stdarg.h>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2291
+#define MPD_BUFFER_MAX_LENGTH	50000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2292
+#define MPD_ERRORSTR_MAX_LENGTH	1000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2293
+#define MPD_WELCOME_MESSAGE	"OK MPD "
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2294
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2295
+#define MPD_ERROR_TIMEOUT	10 /* timeout trying to talk to mpd */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2296
+#define MPD_ERROR_SYSTEM	11 /* system error */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2297
+#define MPD_ERROR_UNKHOST	12 /* unknown host */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2298
+#define MPD_ERROR_CONNPORT	13 /* problems connecting to port on host */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2299
+#define MPD_ERROR_NOTMPD	14 /* mpd not running on port at host */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2300
+#define MPD_ERROR_NORESPONSE	15 /* no response on attempting to connect */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2301
+#define MPD_ERROR_SENDING	16 /* error sending command */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2302
+#define MPD_ERROR_CONNCLOSED	17 /* connection closed by mpd */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2303
+#define MPD_ERROR_ACK		18 /* ACK returned! */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2304
+#define MPD_ERROR_BUFFEROVERRUN	19 /* Buffer was overrun! */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2305
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2306
+#define MPD_ACK_ERROR_UNK	-1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2307
+#define MPD_ERROR_AT_UNK	-1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2308
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2309
+#define MPD_ACK_ERROR_NOT_LIST			1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2310
+#define MPD_ACK_ERROR_ARG			2
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2311
+#define MPD_ACK_ERROR_PASSWORD			3
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2312
+#define MPD_ACK_ERROR_PERMISSION		4
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2313
+#define MPD_ACK_ERROR_UNKNOWN_CMD		5
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2314
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2315
+#define MPD_ACK_ERROR_NO_EXIST			50
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2316
+#define MPD_ACK_ERROR_PLAYLIST_MAX		51
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2317
+#define MPD_ACK_ERROR_SYSTEM			52
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2318
+#define MPD_ACK_ERROR_PLAYLIST_LOAD		53
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2319
+#define MPD_ACK_ERROR_UPDATE_ALREADY		54
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2320
+#define MPD_ACK_ERROR_PLAYER_SYNC		55
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2321
+#define MPD_ACK_ERROR_EXIST			56
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2322
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2323
+#ifdef __cplusplus
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2324
+extern "C" {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2325
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2326
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2327
+typedef enum mpd_TagItems
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2328
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2329
+	MPD_TAG_ITEM_ARTIST,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2330
+	MPD_TAG_ITEM_ALBUM,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2331
+	MPD_TAG_ITEM_TITLE,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2332
+	MPD_TAG_ITEM_TRACK,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2333
+	MPD_TAG_ITEM_NAME,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2334
+	MPD_TAG_ITEM_GENRE,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2335
+	MPD_TAG_ITEM_DATE,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2336
+	MPD_TAG_ITEM_COMPOSER,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2337
+	MPD_TAG_ITEM_PERFORMER,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2338
+	MPD_TAG_ITEM_COMMENT,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2339
+	MPD_TAG_ITEM_DISC,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2340
+	MPD_TAG_ITEM_FILENAME,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2341
+	MPD_TAG_ITEM_ANY,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2342
+	MPD_TAG_NUM_OF_ITEM_TYPES
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2343
+} mpd_TagItems;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2344
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2345
+extern char * mpdTagItemKeys[MPD_TAG_NUM_OF_ITEM_TYPES];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2346
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2347
+/* internal stuff don't touch this struct */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2348
+typedef struct _mpd_ReturnElement {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2349
+	char * name;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2350
+	char * value;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2351
+} mpd_ReturnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2352
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2353
+/* mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2354
+ * holds info about connection to mpd
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2355
+ * use error, and errorStr to detect errors
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2356
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2357
+typedef struct _mpd_Connection {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2358
+	/* use this to check the version of mpd */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2359
+	int version[3];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2360
+	/* IMPORTANT, you want to get the error messages from here */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2361
+	char errorStr[MPD_ERRORSTR_MAX_LENGTH+1];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2362
+	int errorCode;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2363
+	int errorAt;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2364
+	/* this will be set to MPD_ERROR_* if there is an error, 0 if not */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2365
+	int error;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2366
+	/* DON'T TOUCH any of the rest of this stuff */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2367
+	int sock;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2368
+	char buffer[MPD_BUFFER_MAX_LENGTH+1];
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2369
+	int buflen;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2370
+	int bufstart;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2371
+	int doneProcessing;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2372
+	int listOks;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2373
+	int doneListOk;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2374
+	int commandList;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2375
+	mpd_ReturnElement * returnElement;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2376
+	struct timeval timeout;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2377
+	char *request;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2378
+} mpd_Connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2379
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2380
+/* mpd_newConnection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2381
+ * use this to open a new connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2382
+ * you should use mpd_closeConnection, when your done with the connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2383
+ * even if an error has occurred
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2384
+ * _timeout_ is the connection timeout period in seconds
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2385
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2386
+mpd_Connection * mpd_newConnection(const char * host, int port, float timeout);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2387
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2388
+void mpd_setConnectionTimeout(mpd_Connection * connection, float timeout);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2389
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2390
+/* mpd_closeConnection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2391
+ * use this to close a connection and free'ing subsequent memory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2392
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2393
+void mpd_closeConnection(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2394
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2395
+/* mpd_clearError
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2396
+ * clears error
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2397
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2398
+void mpd_clearError(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2399
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2400
+/* STATUS STUFF */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2401
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2402
+/* use these with status.state to determine what state the player is in */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2403
+#define MPD_STATUS_STATE_UNKNOWN	0
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2404
+#define MPD_STATUS_STATE_STOP		1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2405
+#define MPD_STATUS_STATE_PLAY		2
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2406
+#define MPD_STATUS_STATE_PAUSE		3
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2407
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2408
+/* us this with status.volume to determine if mpd has volume support */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2409
+#define MPD_STATUS_NO_VOLUME		-1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2410
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2411
+/* mpd_Status
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2412
+ * holds info return from status command
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2413
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2414
+typedef struct mpd_Status {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2415
+	/* 0-100, or MPD_STATUS_NO_VOLUME when there is no volume support */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2416
+	int volume;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2417
+	/* 1 if repeat is on, 0 otherwise */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2418
+	int repeat;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2419
+	/* 1 if random is on, 0 otherwise */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2420
+	int random;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2421
+	/* playlist length */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2422
+	int playlistLength;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2423
+	/* playlist, use this to determine when the playlist has changed */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2424
+	long long playlist;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2425
+	/* use with MPD_STATUS_STATE_* to determine state of player */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2426
+	int state;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2427
+	/* crossfade setting in seconds */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2428
+	int crossfade;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2429
+	/* if a song is currently selected (always the case when state is
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2430
+	 * PLAY or PAUSE), this is the position of the currently
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2431
+	 * playing song in the playlist, beginning with 0
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2432
+	 */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2433
+	int song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2434
+	/* Song ID of the currently selected song */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2435
+	int songid;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2436
+	/* time in seconds that have elapsed in the currently playing/paused
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2437
+	 * song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2438
+	 */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2439
+	int elapsedTime;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2440
+	/* length in seconds of the currently playing/paused song */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2441
+	int totalTime;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2442
+	/* current bit rate in kbs */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2443
+	int bitRate;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2444
+	/* audio sample rate */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2445
+	unsigned int sampleRate;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2446
+	/* audio bits */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2447
+	int bits;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2448
+	/* audio channels */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2449
+	int channels;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2450
+	/* 1 if mpd is updating, 0 otherwise */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2451
+	int updatingDb;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2452
+	/* error */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2453
+	char * error;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2454
+} mpd_Status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2455
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2456
+void mpd_sendStatusCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2457
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2458
+/* mpd_getStatus
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2459
+ * returns status info, be sure to free it with mpd_freeStatus()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2460
+ * call this after mpd_sendStatusCommand()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2461
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2462
+mpd_Status * mpd_getStatus(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2463
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2464
+/* mpd_freeStatus
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2465
+ * free's status info malloc'd and returned by mpd_getStatus
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2466
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2467
+void mpd_freeStatus(mpd_Status * status);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2468
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2469
+typedef struct _mpd_Stats {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2470
+	int numberOfArtists;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2471
+	int numberOfAlbums;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2472
+	int numberOfSongs;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2473
+	unsigned long uptime;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2474
+	unsigned long dbUpdateTime;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2475
+	unsigned long playTime;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2476
+	unsigned long dbPlayTime;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2477
+} mpd_Stats;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2478
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2479
+typedef struct _mpd_SearchStats {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2480
+	int numberOfSongs;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2481
+	unsigned long playTime;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2482
+} mpd_SearchStats;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2483
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2484
+void mpd_sendStatsCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2485
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2486
+mpd_Stats * mpd_getStats(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2487
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2488
+void mpd_freeStats(mpd_Stats * stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2489
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2490
+mpd_SearchStats * mpd_getSearchStats(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2491
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2492
+void mpd_freeSearchStats(mpd_SearchStats * stats);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2493
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2494
+/* SONG STUFF */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2495
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2496
+#define MPD_SONG_NO_TIME	-1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2497
+#define MPD_SONG_NO_NUM		-1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2498
+#define MPD_SONG_NO_ID		-1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2499
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2500
+/* mpd_Song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2501
+ * for storing song info returned by mpd
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2502
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2503
+typedef struct _mpd_Song {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2504
+	/* filename of song */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2505
+	char * file;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2506
+	/* artist, maybe NULL if there is no tag */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2507
+	char * artist;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2508
+	/* title, maybe NULL if there is no tag */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2509
+	char * title;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2510
+	/* album, maybe NULL if there is no tag */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2511
+	char * album;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2512
+	/* track, maybe NULL if there is no tag */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2513
+	char * track;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2514
+	/* name, maybe NULL if there is no tag; it's the name of the current
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2515
+	 * song, f.e. the icyName of the stream */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2516
+	char * name;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2517
+	/* date */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2518
+	char *date;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2519
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2520
+	/* added by qball */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2521
+	/* Genre */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2522
+	char *genre;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2523
+	/* Composer */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2524
+	char *composer;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2525
+	/* Performer */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2526
+	char *performer;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2527
+	/* Disc */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2528
+	char *disc;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2529
+	/* Comment */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2530
+	char *comment;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2531
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2532
+	/* length of song in seconds, check that it is not MPD_SONG_NO_TIME  */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2533
+	int time;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2534
+	/* if plchanges/playlistinfo/playlistid used, is the position of the
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2535
+	 * song in the playlist */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2536
+	int pos;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2537
+	/* song id for a song in the playlist */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2538
+	int id;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2539
+} mpd_Song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2540
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2541
+/* mpd_newSong
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2542
+ * use to allocate memory for a new mpd_Song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2543
+ * file, artist, etc all initialized to NULL
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2544
+ * if your going to assign values to file, artist, etc
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2545
+ * be sure to malloc or strdup the memory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2546
+ * use mpd_freeSong to free the memory for the mpd_Song, it will also
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2547
+ * free memory for file, artist, etc, so don't do it yourself
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2548
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2549
+mpd_Song * mpd_newSong(void);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2550
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2551
+/* mpd_freeSong
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2552
+ * use to free memory allocated by mpd_newSong
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2553
+ * also it will free memory pointed to by file, artist, etc, so be careful
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2554
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2555
+void mpd_freeSong(mpd_Song * song);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2556
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2557
+/* mpd_songDup
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2558
+ * works like strDup, but for a mpd_Song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2559
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2560
+mpd_Song * mpd_songDup(mpd_Song * song);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2561
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2562
+/* DIRECTORY STUFF */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2563
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2564
+/* mpd_Directory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2565
+ * used to store info fro directory (right now that just the path)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2566
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2567
+typedef struct _mpd_Directory {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2568
+	char * path;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2569
+} mpd_Directory;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2570
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2571
+/* mpd_newDirectory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2572
+ * allocates memory for a new directory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2573
+ * use mpd_freeDirectory to free this memory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2574
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2575
+mpd_Directory * mpd_newDirectory(void);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2576
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2577
+/* mpd_freeDirectory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2578
+ * used to free memory allocated with mpd_newDirectory, and it frees
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2579
+ * path of mpd_Directory, so be careful
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2580
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2581
+void mpd_freeDirectory(mpd_Directory * directory);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2582
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2583
+/* mpd_directoryDup
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2584
+ * works like strdup, but for mpd_Directory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2585
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2586
+mpd_Directory * mpd_directoryDup(mpd_Directory * directory);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2587
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2588
+/* PLAYLISTFILE STUFF */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2589
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2590
+/* mpd_PlaylistFile
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2591
+ * stores info about playlist file returned by lsinfo
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2592
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2593
+typedef struct _mpd_PlaylistFile {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2594
+	char * path;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2595
+} mpd_PlaylistFile;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2596
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2597
+/* mpd_newPlaylistFile
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2598
+ * allocates memory for new mpd_PlaylistFile, path is set to NULL
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2599
+ * free this memory with mpd_freePlaylistFile
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2600
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2601
+mpd_PlaylistFile * mpd_newPlaylistFile(void);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2602
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2603
+/* mpd_freePlaylist
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2604
+ * free memory allocated for freePlaylistFile, will also free
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2605
+ * path, so be careful
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2606
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2607
+void mpd_freePlaylistFile(mpd_PlaylistFile * playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2608
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2609
+/* mpd_playlistFileDup
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2610
+ * works like strdup, but for mpd_PlaylistFile
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2611
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2612
+mpd_PlaylistFile * mpd_playlistFileDup(mpd_PlaylistFile * playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2613
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2614
+/* INFO ENTITY STUFF */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2615
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2616
+/* the type of entity returned from one of the commands that generates info
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2617
+ * use in conjunction with mpd_InfoEntity.type
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2618
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2619
+#define MPD_INFO_ENTITY_TYPE_DIRECTORY		0
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2620
+#define MPD_INFO_ENTITY_TYPE_SONG		1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2621
+#define MPD_INFO_ENTITY_TYPE_PLAYLISTFILE	2
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2622
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2623
+/* mpd_InfoEntity
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2624
+ * stores info on stuff returned info commands
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2625
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2626
+typedef struct mpd_InfoEntity {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2627
+	/* the type of entity, use with MPD_INFO_ENTITY_TYPE_* to determine
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2628
+	 * what this entity is (song, directory, etc...)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2629
+	 */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2630
+	int type;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2631
+	/* the actual data you want, mpd_Song, mpd_Directory, etc */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2632
+	union {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2633
+		mpd_Directory * directory;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2634
+		mpd_Song * song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2635
+		mpd_PlaylistFile * playlistFile;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2636
+	} info;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2637
+} mpd_InfoEntity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2638
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2639
+mpd_InfoEntity * mpd_newInfoEntity(void);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2640
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2641
+void mpd_freeInfoEntity(mpd_InfoEntity * entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2642
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2643
+/* INFO COMMANDS AND STUFF */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2644
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2645
+/* use this function to loop over after calling Info/Listall functions */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2646
+mpd_InfoEntity * mpd_getNextInfoEntity(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2647
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2648
+/* fetches the currently seeletect song (the song referenced by status->song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2649
+ * and status->songid*/
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2650
+void mpd_sendCurrentSongCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2651
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2652
+/* songNum of -1, means to display the whole list */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2653
+void mpd_sendPlaylistInfoCommand(mpd_Connection * connection, int songNum);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2654
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2655
+/* songId of -1, means to display the whole list */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2656
+void mpd_sendPlaylistIdCommand(mpd_Connection * connection, int songId);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2657
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2658
+/* use this to get the changes in the playlist since version _playlist_ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2659
+void mpd_sendPlChangesCommand(mpd_Connection * connection, long long playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2660
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2661
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2662
+ * @param connection: A valid and connected mpd_Connection.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2663
+ * @param playlist: The playlist version you want the diff with.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2664
+ * A more bandwidth efficient version of the mpd_sendPlChangesCommand.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2665
+ * It only returns the pos+id of the changes song.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2666
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2667
+void mpd_sendPlChangesPosIdCommand(mpd_Connection * connection, long long playlist);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2668
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2669
+/* recursivel fetches all songs/dir/playlists in "dir* (no metadata is
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2670
+ * returned) */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2671
+void mpd_sendListallCommand(mpd_Connection * connection, const char * dir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2672
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2673
+/* same as sendListallCommand, but also metadata is returned */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2674
+void mpd_sendListallInfoCommand(mpd_Connection * connection, const char * dir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2675
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2676
+/* non-recursive version of ListallInfo */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2677
+void mpd_sendLsInfoCommand(mpd_Connection * connection, const char * dir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2678
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2679
+#define MPD_TABLE_ARTIST	MPD_TAG_ITEM_ARTIST
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2680
+#define MPD_TABLE_ALBUM		MPD_TAG_ITEM_ALBUM
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2681
+#define MPD_TABLE_TITLE		MPD_TAG_ITEM_TITLE
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2682
+#define MPD_TABLE_FILENAME	MPD_TAG_ITEM_FILENAME
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2683
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2684
+void mpd_sendSearchCommand(mpd_Connection * connection, int table,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2685
+		const char * str);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2686
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2687
+void mpd_sendFindCommand(mpd_Connection * connection, int table,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2688
+		const char * str);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2689
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2690
+/* LIST TAG COMMANDS */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2691
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2692
+/* use this function fetch next artist entry, be sure to free the returned
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2693
+ * string.  NULL means there are no more.  Best used with sendListArtists
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2694
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2695
+char * mpd_getNextArtist(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2696
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2697
+char * mpd_getNextAlbum(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2698
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2699
+char * mpd_getNextTag(mpd_Connection *connection, int type);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2700
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2701
+/* list artist or albums by artist, arg1 should be set to the artist if
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2702
+ * listing albums by a artist, otherwise NULL for listing all artists or albums
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2703
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2704
+void mpd_sendListCommand(mpd_Connection * connection, int table,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2705
+		const char * arg1);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2706
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2707
+/* SIMPLE COMMANDS */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2708
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2709
+void mpd_sendAddCommand(mpd_Connection * connection, const char * file);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2710
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2711
+int mpd_sendAddIdCommand(mpd_Connection *connection, const char *file);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2712
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2713
+void mpd_sendDeleteCommand(mpd_Connection * connection, int songNum);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2714
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2715
+void mpd_sendDeleteIdCommand(mpd_Connection * connection, int songNum);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2716
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2717
+void mpd_sendSaveCommand(mpd_Connection * connection, const char * name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2718
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2719
+void mpd_sendLoadCommand(mpd_Connection * connection, const char * name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2720
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2721
+void mpd_sendRmCommand(mpd_Connection * connection, const char * name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2722
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2723
+void mpd_sendRenameCommand(mpd_Connection *connection, const char *from,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2724
+                           const char *to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2725
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2726
+void mpd_sendShuffleCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2727
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2728
+void mpd_sendClearCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2729
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2730
+/* use this to start playing at the beginning, useful when in random mode */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2731
+#define MPD_PLAY_AT_BEGINNING	-1
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2732
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2733
+void mpd_sendPlayCommand(mpd_Connection * connection, int songNum);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2734
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2735
+void mpd_sendPlayIdCommand(mpd_Connection * connection, int songNum);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2736
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2737
+void mpd_sendStopCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2738
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2739
+void mpd_sendPauseCommand(mpd_Connection * connection, int pauseMode);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2740
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2741
+void mpd_sendNextCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2742
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2743
+void mpd_sendPrevCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2744
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2745
+void mpd_sendMoveCommand(mpd_Connection * connection, int from, int to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2746
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2747
+void mpd_sendMoveIdCommand(mpd_Connection * connection, int from, int to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2748
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2749
+void mpd_sendSwapCommand(mpd_Connection * connection, int song1, int song2);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2750
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2751
+void mpd_sendSwapIdCommand(mpd_Connection * connection, int song1, int song2);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2752
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2753
+void mpd_sendSeekCommand(mpd_Connection * connection, int song, int time);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2754
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2755
+void mpd_sendSeekIdCommand(mpd_Connection * connection, int song, int time);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2756
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2757
+void mpd_sendRepeatCommand(mpd_Connection * connection, int repeatMode);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2758
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2759
+void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2760
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2761
+void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2762
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2763
+/* WARNING: don't use volume command, its depreacted */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2764
+void mpd_sendVolumeCommand(mpd_Connection * connection, int volumeChange);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2765
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2766
+void mpd_sendCrossfadeCommand(mpd_Connection * connection, int seconds);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2767
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2768
+void mpd_sendUpdateCommand(mpd_Connection * connection, char * path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2769
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2770
+/* returns the update job id, call this after a update command*/
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2771
+int mpd_getUpdateId(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2772
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2773
+void mpd_sendPasswordCommand(mpd_Connection * connection, const char * pass);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2774
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2775
+/* after executing a command, when your done with it to get its status
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2776
+ * (you want to check connection->error for an error)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2777
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2778
+void mpd_finishCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2779
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2780
+/* command list stuff, use this to do things like add files very quickly */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2781
+void mpd_sendCommandListBegin(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2782
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2783
+void mpd_sendCommandListOkBegin(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2784
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2785
+void mpd_sendCommandListEnd(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2786
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2787
+/* advance to the next listOk
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2788
+ * returns 0 if advanced to the next list_OK,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2789
+ * returns -1 if it advanced to an OK or ACK */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2790
+int mpd_nextListOkCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2791
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2792
+typedef struct _mpd_OutputEntity {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2793
+	int id;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2794
+	char * name;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2795
+	int enabled;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2796
+} mpd_OutputEntity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2797
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2798
+void mpd_sendOutputsCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2799
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2800
+mpd_OutputEntity * mpd_getNextOutput(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2801
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2802
+void mpd_sendEnableOutputCommand(mpd_Connection * connection, int outputId);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2803
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2804
+void mpd_sendDisableOutputCommand(mpd_Connection * connection, int outputId);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2805
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2806
+void mpd_freeOutputElement(mpd_OutputEntity * output);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2807
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2808
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2809
+ * @param connection a #mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2810
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2811
+ * Queries mpd for the allowed commands
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2812
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2813
+void mpd_sendCommandsCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2814
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2815
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2816
+ * @param connection a #mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2817
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2818
+ * Queries mpd for the not allowed commands
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2819
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2820
+void mpd_sendNotCommandsCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2821
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2822
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2823
+ * @param connection a #mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2824
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2825
+ * returns the next supported command.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2826
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2827
+ * @returns a string, needs to be free'ed
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2828
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2829
+char *mpd_getNextCommand(mpd_Connection *connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2830
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2831
+void mpd_sendUrlHandlersCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2832
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2833
+char *mpd_getNextHandler(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2834
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2835
+void mpd_sendTagTypesCommand(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2836
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2837
+char *mpd_getNextTagType(mpd_Connection * connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2838
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2839
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2840
+ * @param connection a MpdConnection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2841
+ * @param path	the path to the playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2842
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2843
+ * List the content, with full metadata, of a stored playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2844
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2845
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2846
+void mpd_sendListPlaylistInfoCommand(mpd_Connection *connection, char *path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2847
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2848
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2849
+ * @param connection a MpdConnection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2850
+ * @param path	the path to the playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2851
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2852
+ * List the content of a stored playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2853
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2854
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2855
+void mpd_sendListPlaylistCommand(mpd_Connection *connection, char *path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2856
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2857
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2858
+ * @param connection a #mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2859
+ * @param exact if to match exact
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2860
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2861
+ * starts a search, use mpd_addConstraintSearch to add
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2862
+ * a constraint to the search, and mpd_commitSearch to do the actual search
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2863
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2864
+void mpd_startSearch(mpd_Connection *connection, int exact);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2865
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2866
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2867
+ * @param connection a #mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2868
+ * @param type
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2869
+ * @param name
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2870
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2871
+void mpd_addConstraintSearch(mpd_Connection *connection, int type, const char *name);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2872
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2873
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2874
+ * @param connection a #mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2875
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2876
+void mpd_commitSearch(mpd_Connection *connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2877
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2878
+/**
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2879
+ * @param connection a #mpd_Connection
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2880
+ * @param type The type to search for
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2881
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2882
+ * starts a search for fields... f.e. get a list of artists would be:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2883
+ * @code
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2884
+ * mpd_startFieldSearch(connection, MPD_TAG_ITEM_ARTIST);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2885
+ * mpd_commitSearch(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2886
+ * @endcode
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2887
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2888
+ * or get a list of artist in genre "jazz" would be:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2889
+ * @code
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2890
+ * mpd_startFieldSearch(connection, MPD_TAG_ITEM_ARTIST);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2891
+ * mpd_addConstraintSearch(connection, MPD_TAG_ITEM_GENRE, "jazz")
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2892
+ * mpd_commitSearch(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2893
+ * @endcode
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2894
+ *
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2895
+ * mpd_startSearch will return  a list of songs (and you need mpd_getNextInfoEntity)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2896
+ * this one will return a list of only one field (the one specified with type) and you need
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2897
+ * mpd_getNextTag to get the results
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2898
+ */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2899
+void mpd_startFieldSearch(mpd_Connection *connection, int type);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2900
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2901
+void mpd_startPlaylistSearch(mpd_Connection *connection, int exact);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2902
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2903
+void mpd_startStatsSearch(mpd_Connection *connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2904
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2905
+void mpd_sendPlaylistClearCommand(mpd_Connection *connection, char *path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2906
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2907
+void mpd_sendPlaylistAddCommand(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2908
+                                char *playlist, char *path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2909
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2910
+void mpd_sendPlaylistMoveCommand(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2911
+                                 char *playlist, int from, int to);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2912
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2913
+void mpd_sendPlaylistDeleteCommand(mpd_Connection *connection,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2914
+                                   char *playlist, int pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2915
+#ifdef __cplusplus
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2916
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2917
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2918
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2919
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2920
diff -r 171db9560cb5 clients/mpd/mpdinterface.cc
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2921
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2922
+++ b/clients/mpd/mpdinterface.cc	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2923
@@ -0,0 +1,404 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2924
+#include "mpdinterface.h"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2925
+#include "immsutil.h"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2926
+#include <cctype>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2927
+#include <fstream>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2928
+#include <sstream>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2929
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2930
+namespace mpd_interface
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2931
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2932
+  position_err::position_err(int position, int playlist_length)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2933
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2934
+    std::ostringstream s;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2935
+    s << "Attempted to access song of invalid position in playlist. "
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2936
+      "Used position: " << position << ", playlist size: "
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2937
+      << playlist_length;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2938
+    msg = s.str();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2939
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2940
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2941
+  std::string Song::music_directory = "";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2942
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2943
+  void Song::set_default_dir(std::string path)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2944
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2945
+    music_directory = path;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2946
+    if(!path.empty() && path[path.length()-1]!='/') {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2947
+      music_directory.append("/");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2948
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2949
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2950
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2951
+  bool operator==(const Song& first, const Song& second)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2952
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2953
+    return (first.song_path == second.song_path) &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2954
+      (first.pl_pos == second.pl_pos) &&
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2955
+      (first.song_length == second.song_length);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2956
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2957
+  bool operator!=(const Song& first, const Song& second)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2958
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2959
+    return !(first == second);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2960
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2961
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2962
+  // determines whether the line contains the given parameter in the
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2963
+  // mpd.conf fashion
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2964
+  bool contains_parameter(const std::string& line, const std::string& parameter)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2965
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2966
+    if(line.empty() || line[0]=='#') return false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2967
+    
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2968
+    std::string::size_type pos = line.find(parameter);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2969
+    if(pos == std::string::npos) return false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2970
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2971
+    while(pos>0) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2972
+      if(!isspace(line[pos-1])) return false;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2973
+      --pos;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2974
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2975
+    return true;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2976
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2977
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2978
+  // returns the value of the given parameter from an mpd.config line
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2979
+  std::string get_value(const std::string& line,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2980
+      const std::string& parameter)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2981
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2982
+    if(!contains_parameter(line, parameter)) return "";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2983
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2984
+    std::string::size_type start = line.find_first_of("\"");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2985
+    ++start; // position of the first non-quote char
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2986
+    if(start == std::string::npos || start>=line.size()) return "";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2987
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2988
+    std::string::size_type end = line.find_last_of("\"");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2989
+    if(end == std::string::npos) return "";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2990
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2991
+    std::string result = line.substr(start, end-start);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2992
+    return result;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2993
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2994
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2995
+  config read_configuration(std::string conf_path) throw(config_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2996
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2997
+    static const std::string address_param = "bind_to_address";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2998
+    static const std::string port_param = "port";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  2999
+    static const std::string dir_param = "music_directory";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3000
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3001
+    if(conf_path == "")
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3002
+    {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3003
+      std::string user_path = getenv("HOME");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3004
+      if(user_path[user_path.size()-1] != '/') user_path.append("/");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3005
+      user_path.append(".mpdconf");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3006
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3007
+      try {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3008
+	// read the "~/.mpdconf" file
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3009
+	return read_configuration(user_path);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3010
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3011
+      catch (config_err) { // "~/.mpdconf" not found
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3012
+	  // read the "/etc/mpd.conf" instead
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3013
+	  return read_configuration("/etc/mpd.conf");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3014
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3015
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3016
+    else
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3017
+    {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3018
+      std::ifstream con_f(conf_path.c_str());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3019
+      if(!con_f) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3020
+	throw config_err("cannot open the MPD config file \"" +
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3021
+	    conf_path + "\"");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3022
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3023
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3024
+      config result;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3025
+      std::string line;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3026
+      while(getline(con_f, line)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3027
+	if(contains_parameter(line, address_param)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3028
+	  result.hostname = get_value(line, address_param);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3029
+	  if(result.hostname.empty()) result.hostname = "localhost";
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3030
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3031
+	else if(contains_parameter(line, port_param)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3032
+	  std::stringstream s;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3033
+	  s << get_value(line, port_param);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3034
+	  if(!(s >> result.port)) result.port = 6600;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3035
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3036
+	else if(contains_parameter(line, dir_param)) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3037
+	  result.music_dir = get_value(line, dir_param);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3038
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3039
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3040
+      con_f.close();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3041
+      if(result.music_dir.empty()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3042
+	throw config_err("infalid format of the MPD config file \"" + 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3043
+	    conf_path + "\"");
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3044
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3045
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3046
+      return result;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3047
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3048
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3049
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3050
+  
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3051
+  bool Server::connect(const std::string& hostname, int port)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3052
+    throw(connection_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3053
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3054
+    if(connected()) disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3055
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3056
+    try {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3057
+      connection = mpd_newConnection(hostname.c_str(), port, 10);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3058
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3059
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3060
+    catch(connection_err) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3061
+      disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3062
+      throw;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3063
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3064
+    
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3065
+    if(connected()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3066
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3067
+    return connected();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3068
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3069
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3070
+  void Server::disconnect()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3071
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3072
+    if(connection!=nullptr) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3073
+      mpd_closeConnection(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3074
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3075
+    connection = nullptr;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3076
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3077
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3078
+  bool Server::ack_error() const throw(connection_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3079
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3080
+    if(!connected()) throw connection_err();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3081
+    return connection->error == MPD_ERROR_ACK;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3082
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3083
+  // determines whether the MPD is in error state which is not the ACK error
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3084
+  bool Server::mpd_error() const throw(connection_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3085
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3086
+    if(!connected()) throw connection_err();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3087
+    return connection->error!=0 && !ack_error();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3088
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3089
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3090
+  // changes the mpd internal status to the playback_status type
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3091
+  playback_status resolve_state(int mpd_state)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3092
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3093
+    switch(mpd_state)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3094
+    {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3095
+      case MPD_STATUS_STATE_PLAY:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3096
+	return playing;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3097
+      case MPD_STATUS_STATE_STOP:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3098
+	return stopped;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3099
+      case MPD_STATUS_STATE_PAUSE:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3100
+	return paused;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3101
+      default:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3102
+	return playing;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3103
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3104
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3105
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3106
+  void Server::refresh() throw(connection_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3107
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3108
+    if(!connected()) throw connection_err();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3109
+    try {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3110
+      
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3111
+// the mess below is here because otherwise the results in nasty problems
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3112
+// when MPD connection times out
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3113
+//TODO prolly doesn't have to be everywhere, though. Weed it out
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3114
+if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3115
+      mpd_sendCommandListOkBegin(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3116
+if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3117
+      mpd_sendStatusCommand(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3118
+if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3119
+      mpd_sendCurrentSongCommand(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3120
+if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3121
+      mpd_sendCommandListEnd(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3122
+if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3123
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3124
+      mpd_Status * status = mpd_getStatus(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3125
+      if(status!=nullptr) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3126
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3127
+      pl_length = status->playlistLength;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3128
+      pl_version = status->playlist;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3129
+      pb_status = resolve_state(status->state);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3130
+      current_song.set_elapsed(status->elapsedTime);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3131
+      random = status->random;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3132
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3133
+      mpd_freeStatus(status);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3134
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3135
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3136
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3137
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3138
+      mpd_nextListOkCommand(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3139
+      mpd_InfoEntity *entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3140
+      while((entity = mpd_getNextInfoEntity(connection))) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3141
+	mpd_Song *song = entity->info.song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3142
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3143
+	if(entity->type!=MPD_INFO_ENTITY_TYPE_SONG) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3144
+	  mpd_freeInfoEntity(entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3145
+	  continue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3146
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3147
+	
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3148
+	current_song.set_path(song->file);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3149
+	current_song.set_pos(song->pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3150
+	current_song.set_length(song->time);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3151
+	mpd_freeInfoEntity(entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3152
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3153
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3154
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3155
+      mpd_finishCommand(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3156
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3157
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3158
+    catch(connection_err) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3159
+      disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3160
+      throw;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3161
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3162
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3163
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3164
+  Song Server::get_song_info(int pl_pos)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3165
+    throw(connection_err, position_err)   
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3166
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3167
+    if(!connected()) throw connection_err();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3168
+    if(pl_pos < 0 || pl_pos >= get_playlist_length()) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3169
+      throw position_err(pl_pos, get_playlist_length());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3170
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3171
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3172
+    Song result;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3173
+    try {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3174
+      mpd_sendPlaylistInfoCommand(connection, pl_pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3175
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3176
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3177
+      mpd_InfoEntity *entity;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3178
+      while((entity = mpd_getNextInfoEntity(connection)))
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3179
+      {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3180
+	mpd_Song *song = entity->info.song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3181
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3182
+	if(entity->type!=MPD_INFO_ENTITY_TYPE_SONG)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3183
+	{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3184
+	  mpd_freeInfoEntity(entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3185
+	  continue;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3186
+	}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3187
+	
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3188
+	result = Song(song->file,song->pos,song->time);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3189
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3190
+	mpd_freeInfoEntity(entity);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3191
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3192
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3193
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3194
+      mpd_finishCommand(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3195
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3196
+      // shouldn't happen, but just in case
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3197
+      if(ack_error())  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3198
+	refresh();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3199
+	throw position_err(pl_pos, get_playlist_length());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3200
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3201
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3202
+    catch(connection_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3203
+    {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3204
+      disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3205
+      throw;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3206
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3207
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3208
+    return result;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3209
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3210
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3211
+  void Server::play_song(int pl_pos) throw(connection_err, position_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3212
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3213
+    if(!connected()) throw connection_err();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3214
+    if(pl_pos < 0 || pl_pos >= pl_length) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3215
+      throw position_err(pl_pos, get_playlist_length());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3216
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3217
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3218
+    try {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3219
+      mpd_sendPlayCommand(connection, pl_pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3220
+      mpd_finishCommand(connection);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3221
+      if(mpd_error()) throw connection_err(connection->errorStr);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3222
+      if(ack_error()) throw position_err(pl_pos, get_playlist_length());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3223
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3224
+    catch(connection_err) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3225
+      disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3226
+      throw;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3227
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3228
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3229
+  // end of SERVER section
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3230
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3231
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3232
+  // Player class
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3233
+  Player::Player(): previous_status(stopped), current_status(stopped),
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3234
+  previous_song_pos(Song::invalid_pos), current_song_pos(Song::invalid_pos),
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3235
+  null_song()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3236
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3237
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3238
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3239
+  bool Player::connect() throw(config_err, connection_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3240
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3241
+    config conf = read_configuration();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3242
+    Song::set_default_dir(conf.music_dir);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3243
+    return mpd.connect(conf.hostname, conf.port);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3244
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3245
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3246
+  void Player::disconnect()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3247
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3248
+    mpd.disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3249
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3250
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3251
+  void Player::refresh()
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3252
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3253
+    mpd.refresh();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3254
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3255
+    playlist__changed = pl_ver != mpd.get_playlist_version();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3256
+    if(playlist__changed) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3257
+      pl_ver = mpd.get_playlist_version();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3258
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3259
+      // update the internal playlist
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3260
+      playlist.clear();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3261
+      playlist.reserve(mpd.get_playlist_length());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3262
+      for(int i = 0; i<mpd.get_playlist_length(); i++) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3263
+	playlist.push_back(mpd.get_song_info(i));
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3264
+      }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3265
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3266
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3267
+    song__changed = mpd.get_current_song() != song(current);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3268
+    if(song__changed) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3269
+      previous_song_pos = current_song_pos;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3270
+      current_song_pos = mpd.get_current_song().pos();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3271
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3272
+    else if(!playlist.empty() && current_song_pos != Song::invalid_pos) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3273
+      playlist[current_song_pos].set_elapsed(mpd.get_current_song().
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3274
+	  elapsed());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3275
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3276
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3277
+    status__changed = current_status != mpd.get_playback_status();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3278
+    if(status__changed) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3279
+      previous_status = current_status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3280
+      current_status = mpd.get_playback_status();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3281
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3282
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3283
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3284
+  const Song& Player::song(recent value) const
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3285
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3286
+    if(playlist.empty()) return null_song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3287
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3288
+    switch(value) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3289
+      case previous:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3290
+	return previous_song_pos == Song::invalid_pos ?
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3291
+	  null_song : song(previous_song_pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3292
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3293
+      case current:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3294
+      default:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3295
+	return current_song_pos == Song::invalid_pos ?
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3296
+	  null_song : song(current_song_pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3297
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3298
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3299
+  const Song& Player::song(int position) const throw(position_err)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3300
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3301
+    try {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3302
+      return playlist.at(position);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3303
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3304
+    catch (...) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3305
+      throw position_err(position, playlist.size());
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3306
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3307
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3308
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3309
+  playback_status Player::status(recent value) const
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3310
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3311
+    switch (value) {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3312
+      case previous: return previous_status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3313
+      case current:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3314
+      default: return current_status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3315
+    }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3316
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3317
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3318
+  void Player::play_song(int pl_pos)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3319
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3320
+    mpd.play_song(pl_pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3321
+  }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3322
+  // end of Player class
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3323
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3324
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3325
+} // namespace end
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3326
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3327
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3328
diff -r 171db9560cb5 clients/mpd/mpdinterface.h
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3329
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3330
+++ b/clients/mpd/mpdinterface.h	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3331
@@ -0,0 +1,209 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3332
+#ifndef MPDINTERFACE_H
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3333
+#define MPDINTERFACE_H
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3334
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3335
+#include "libmpdclient.h"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3336
+#include <string>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3337
+#include <vector>
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3338
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3339
+namespace mpd_interface
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3340
+{
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3341
+const int nullptr = 0; 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3342
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3343
+/* list of thrown exceptions */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3344
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3345
+  // generic exception that can be thrown by MPD
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3346
+  class mpd_err
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3347
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3348
+  protected:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3349
+    std::string msg;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3350
+  public:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3351
+    mpd_err(const std::string& message = "unknown error"): msg(message) { }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3352
+    std::string message() const { return msg; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3353
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3354
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3355
+  // thrown when for whatever reason the connection cannot be maintained
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3356
+  // the Player is always set to the disconnected state when this is thrown
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3357
+  class connection_err: public mpd_err
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3358
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3359
+  public:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3360
+    connection_err(const std::string& message = "not connected"):
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3361
+      mpd_err(message) { }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3362
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3363
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3364
+  class config_err: public mpd_err
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3365
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3366
+  public:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3367
+    config_err(const std::string& message = "") : mpd_err(message) { }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3368
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3369
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3370
+  // thrown when trying to access element out of the playlist range
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3371
+  // contains information about the length of the playlist
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3372
+  // and the invalid position
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3373
+  class position_err: public mpd_err
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3374
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3375
+    int invalid_position;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3376
+    int pl_length;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3377
+  public:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3378
+    position_err(int position, int playlist_length);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3379
+    int pos() const { return invalid_position; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3380
+    int playlist_length() const {return pl_length; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3381
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3382
+/* end of the exception list */
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3383
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3384
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3385
+  // information about the configuration of MPD
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3386
+  // it's the relevant info read from the mpd.config file
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3387
+  struct config
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3388
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3389
+    std::string hostname;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3390
+    int port;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3391
+    std::string music_dir;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3392
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3393
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3394
+  // attempts to read the configuration file
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3395
+  // if no path is specified following actions are taken:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3396
+  // first, the ~/.mpdconf file is looked for
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3397
+  // then, the /etc/mpd.conf file is tried.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3398
+  config read_configuration(std::string conf_path="") throw(config_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3399
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3400
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3401
+  // Represents one song in playlist.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3402
+  // Note that when one song is twice in a playlist (their positions differ)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3403
+  // they are two different songs from this class' point of view.
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3404
+  class Song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3405
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3406
+    static std::string music_directory; // directory in which the songs are
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3407
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3408
+    std::string song_path; 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3409
+    int pl_pos; 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3410
+    int song_length; // time - in seconds
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3411
+    int song_elapsed; // time - in seconds
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3412
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3413
+  public:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3414
+    static const int invalid_pos = MPD_SONG_NO_NUM;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3415
+    static const int invalid_time = MPD_SONG_NO_TIME;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3416
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3417
+    static void set_default_dir(std::string path); // set the music directory
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3418
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3419
+    Song(std::string path = "", int position = invalid_pos,
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3420
+	int length = invalid_time, int elapsed = invalid_time):
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3421
+      song_path(music_directory+path), pl_pos(position),
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3422
+      song_length(length), song_elapsed(elapsed) { }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3423
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3424
+    friend bool operator==(const Song& first, const Song& second);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3425
+    friend bool operator!=(const Song& first, const Song& second);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3426
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3427
+    std::string path() const { return song_path; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3428
+    void set_path(std::string path) { song_path = music_directory+path; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3429
+    int pos() const { return pl_pos; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3430
+    void set_pos(int position) { pl_pos = position; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3431
+    int length() const { return song_length; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3432
+    void set_length(int length) { song_length = length; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3433
+    int elapsed() const {return song_elapsed; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3434
+    void set_elapsed(int elapsed) { song_elapsed = elapsed; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3435
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3436
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3437
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3438
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3439
+  // the status of the playback - whether it's stopped, paused
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3440
+  // or is playing a song right now
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3441
+  enum playback_status {playing, stopped, paused} ;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3442
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3443
+  // represents the communication with the MPD server
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3444
+  // It's a confortable wrapper around the libmpdclient library
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3445
+  // When its refresh() method is called it gets all information from server
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3446
+  // and stores them so as not to flood the MPD with commands
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3447
+  class Server
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3448
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3449
+  public:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3450
+    Server(): connection(nullptr) {};
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3451
+    ~Server() { disconnect(); }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3452
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3453
+    bool connect(const std::string& hostname="localhost", int port = 6600)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3454
+      throw(connection_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3455
+    void disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3456
+    bool connected() const {return connection!=nullptr; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3457
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3458
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3459
+    void refresh() throw(connection_err); // the Server asks MPD for new values
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3460
+    int get_playlist_length() const { return pl_length; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3461
+    long long get_playlist_version() { return pl_version; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3462
+    playback_status get_playback_status() { return pb_status; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3463
+    bool get_random() const {return random; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3464
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3465
+    Song get_song_info(int pl_pos) throw(connection_err,position_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3466
+    Song get_current_song() const { return current_song; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3467
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3468
+    // plays the song at the specified position
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3469
+    void play_song(int pl_pos) throw(connection_err, position_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3470
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3471
+  private:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3472
+    Server& operator=(const Server&);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3473
+    Server(const Server&);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3474
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3475
+    mpd_Connection *connection;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3476
+    int pl_length;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3477
+    long long pl_version;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3478
+    playback_status pb_status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3479
+    Song current_song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3480
+    bool random;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3481
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3482
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3483
+    // determines whether the actual MPD error state is the ACK error
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3484
+    bool ack_error() const throw(connection_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3485
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3486
+    // determines whether the MPD is in error state which is not the ACK error
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3487
+    bool mpd_error() const throw(connection_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3488
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3489
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3490
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3491
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3492
+  enum recent {previous, current};
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3493
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3494
+  class Player
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3495
+  {
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3496
+  public:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3497
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3498
+    Player();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3499
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3500
+    bool connect() throw(config_err, connection_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3501
+    void disconnect();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3502
+    bool connected() const { return mpd.connected(); }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3503
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3504
+    void refresh();
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3505
+    
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3506
+    bool song_changed() {return song__changed; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3507
+    bool playlist_changed() { return playlist__changed; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3508
+    bool status_changed() { return status__changed; }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3509
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3510
+    // gets the current or the previously played song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3511
+    // song(current) returns currently played song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3512
+    // song(previous) returns the previously played song
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3513
+    const Song& song(recent) const;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3514
+    const Song& song(int position) const throw(position_err);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3515
+    int playlist_length() const { return mpd.get_playlist_length(); }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3516
+    bool radnom() const { return mpd.get_random(); }
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3517
+    void play_song(int pl_pos);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3518
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3519
+    // gets the current or the previous playback status
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3520
+    playback_status status(recent) const;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3521
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3522
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3523
+  private:
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3524
+    Player& operator=(const Player&);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3525
+    Player(const Player&);
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3526
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3527
+    Server mpd;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3528
+    long long pl_ver;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3529
+    playback_status previous_status, current_status;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3530
+    int previous_song_pos, current_song_pos;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3531
+    const Song null_song;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3532
+    std::vector<Song> playlist;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3533
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3534
+    bool song__changed, playlist__changed, status__changed;
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3535
+  };
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3536
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3537
+}
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3538
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3539
+#endif
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3540
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3541
diff -r 171db9560cb5 clients/mpd/rules.mk
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3542
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3543
+++ b/clients/mpd/rules.mk	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3544
@@ -0,0 +1,16 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3545
+MDPCPPFLAGS= $(GLIB2CPPFLAGS)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3546
+MPDLDFLAGS= $(GLIB2LDFLAGS)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3547
+MPDCOMMON= mpdinterface.o libmpdclient.o clientstubbase.o libimmscore.a libmodel.a
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3548
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3549
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3550
+immsmpd: immsmpd.o $(MPDCOMMON)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3551
+immsmpd: $(call objects,../clients/mpd)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3552
+immsmpd-CPPFLAGS=$(MDPCPPFLAGS)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3553
+immsmpd-LIBS=$(MPDLDFLAGS)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3554
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3555
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3556
+MPDDESTDIR=/usr/bin
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3557
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3558
+immsmpd_install: immsmpd
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3559
+	${INSTALL} -D $^ $(MPDDESTDIR)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3560
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3561
diff -r 171db9560cb5 configure.ac
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3562
--- a/configure.ac	Mon May 19 00:16:56 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3563
+++ b/configure.ac	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3564
@@ -260,6 +260,13 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3565
 saved_libs="$LIBS"
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3566
 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3567
 PLUGINS=""
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3568
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3569
+AC_CHECK_PROG(with_mdp, mpd --help, "yes", "no")
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3570
+if test "$with_mpd" != "no"; then
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3571
+    AC_APPEND(PLUGINS, immsmpd)
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3572
+fi
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3573
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3574
+
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3575
 AC_CHECK_PROG(with_xmms, xmms-config, "yes", "no")
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3576
 if test "$with_xmms" != "no"; then
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3577
     CPPFLAGS=`xmms-config --cflags`
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3578
diff -r 171db9560cb5 vars.mk.in
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3579
--- a/vars.mk.in	Mon May 19 00:16:56 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3580
+++ b/vars.mk.in	Mon May 19 00:21:51 2008 -0400
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3581
@@ -10,7 +10,7 @@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3582
 bindir = @bindir@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3583
 datadir = @datadir@
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3584
 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3585
-VPATH = ../immscore:../analyzer:../model:../autotag:../immsremote:../utils:../clients:../immsd:../data:../clients/xmms:../clients/bmp:../clients/audacious
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3586
+VPATH = ../immscore:../analyzer:../model:../autotag:../immsremote:../utils:../clients:../immsd:../data:../clients/xmms:../clients/bmp:../clients/audacious:../clients/mpd
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3587
 ARFLAGS = rs
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3588
 
77136249e5ee First import of mpd-client.
Fabien Ninoles <fabien@tzone.org>
parents:
diff changeset
  3589
 SHELL = bash