Implement setting sticker
[libmpd.git] / src / libmpd-sticker.c
blob4637d791341aa822f175edb2e40d928884bf73a5
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define __USE_GNU
4 #include <glib.h>
5 #include <string.h>
6 #include <stdarg.h>
7 #include <config.h>
8 #include "debug_printf.h"
9 #include "libmpd.h"
10 #include "libmpd-internal.h"
14 char * mpd_sticker_song_get(MpdObj *mi, const char *path, const char *tag)
16 char *retv_value = NULL;
17 char *retv = NULL;
18 if(!mpd_check_connected(mi))
20 debug_printf(DEBUG_INFO,"Where not connected\n");
21 return NULL;
23 if(mpd_server_check_command_allowed(mi, "sticker") != MPD_SERVER_COMMAND_ALLOWED) {
24 debug_printf(DEBUG_WARNING, "Command not allowed\n");
25 return NULL;
27 if(mpd_lock_conn(mi))
29 debug_printf(DEBUG_ERROR,"lock failed\n");
30 return NULL;
33 mpd_sendGetSongSticker(mi->connection,path, tag);
34 retv_value = mpd_getNextSticker(mi->connection);
35 mpd_finishCommand(mi->connection);
36 if(retv_value && strlen(retv_value) > strlen(tag)){
37 retv = g_strdup(&retv_value[strlen(tag)]+1);
39 free(retv_value);
40 if(mi->connection->error == MPD_ERROR_ACK && mi->connection->errorCode == MPD_ACK_ERROR_NO_EXIST)
42 mpd_clearError(mi->connection);
43 free(retv);
44 retv = NULL;
46 if(mpd_unlock_conn(mi))
48 debug_printf(DEBUG_ERROR, "Failed to unlock");
49 g_free(retv);
50 return NULL;
52 return retv;
55 int mpd_sticker_song_set(MpdObj *mi, const char *path, const char *tag, const char *value)
57 if(!mpd_check_connected(mi))
59 debug_printf(DEBUG_INFO,"Where not connected\n");
60 return MPD_NOT_CONNECTED;
62 if(mpd_server_check_command_allowed(mi, "sticker") != MPD_SERVER_COMMAND_ALLOWED) {
63 debug_printf(DEBUG_WARNING, "Command not allowed\n");
64 return MPD_SERVER_NOT_SUPPORTED;
66 if(mpd_lock_conn(mi))
68 debug_printf(DEBUG_ERROR,"lock failed\n");
69 return MPD_LOCK_FAILED;
72 mpd_sendSetSongSticker(mi->connection,path, tag,value);
73 mpd_finishCommand(mi->connection);
74 if(mpd_unlock_conn(mi))
76 debug_printf(DEBUG_ERROR, "Failed to unlock");
77 return MPD_LOCK_FAILED;
79 return MPD_OK;