#include "log.h"
#include "configuration.h"
#include "vector.h"
+#include "eventlog.h"
static int trackdb_playlist_get_tid(const char *name,
const char *who,
if(!valid_username(name))
return -1;
owner = 0;
- share = "public";
+ share = "shared";
}
if(ownerp)
*ownerp = owner;
const char *share) {
char *owner;
- if(!playlist_parse_name(name, &owner, 0))
+ if(playlist_parse_name(name, &owner, 0))
return 0;
/* Anyone can read shared playlists */
if(!owner)
const char attribute((unused)) *share) {
char *owner;
- if(!playlist_parse_name(name, &owner, 0))
+ if(playlist_parse_name(name, &owner, 0))
return 0;
/* Anyone can modify shared playlists */
if(!owner)
char **sharep) {
int e;
- if(!playlist_parse_name(name, 0, 0)) {
+ if(playlist_parse_name(name, 0, 0)) {
error(0, "invalid playlist name '%s'", name);
return EINVAL;
}
/** @brief Modify or create a playlist
* @param name Playlist name
+ * @param who User modifying playlist
* @param tracks List of tracks to set, or NULL to leave alone
* @param ntracks Length of @p tracks
* @param share Sharing status, or NULL to leave alone
int e;
char *owner;
- if(!playlist_parse_name(name, &owner, 0)) {
+ if(playlist_parse_name(name, &owner, 0)) {
error(0, "invalid playlist name '%s'", name);
return EINVAL;
}
struct kvp *k;
int e;
const char *s;
+ const char *event = "playlist_modified";
if((e = trackdb_getdata(trackdb_playlistsdb, name, &k, tid))
&& e != DB_NOTFOUND)
k = 0;
kvp_set(&k, "count", 0);
kvp_set(&k, "sharing", defshare);
+ event = "playlist_created";
}
/* Check that the modification is allowed */
if(!(s = kvp_get(k, "sharing"))) {
return 0;
/* Set the new values */
if(share)
- kvp_set(&k, "share", share);
+ kvp_set(&k, "sharing", share);
if(tracks) {
char b[16];
int oldcount, n;
kvp_set(&k, "count", b);
}
/* Store the resulting record */
- return trackdb_putdata(trackdb_playlistsdb, name, k, tid, 0);
+ e = trackdb_putdata(trackdb_playlistsdb, name, k, tid, 0);
+ /* Log the event */
+ if(!e)
+ eventlog(event, name, kvp_get(k, "sharing"), (char *)0);
+ return e;
}
/** @brief Get a list of playlists
while(!(e = c->c_get(c, k, prepare_data(d), DB_NEXT))) {
char *name = xstrndup(k->data, k->size), *owner;
const char *share = kvp_get(kvp_urldecode(d->data, d->size),
- "share");
+ "sharing");
/* Extract owner; malformed names are skipped */
if(playlist_parse_name(name, &owner, 0)) {
error(0, "invalid playlist name '%s' found in database", name);
continue;
}
+ if(!share) {
+ error(0, "playlist '%s' has no 'sharing' key", name);
+ continue;
+ }
/* Always list public and shared playlists
* Only list private ones to their owner
* Don't list anything else
&& owner && !strcmp(owner, who)))
vector_append(v, name);
}
+ trackdb_closecursor(c);
switch(e) {
case DB_NOTFOUND:
break;
int e;
char *owner;
- if(!playlist_parse_name(name, &owner, 0)) {
+ if(playlist_parse_name(name, &owner, 0)) {
error(0, "invalid playlist name '%s'", name);
return EINVAL;
}
if(!playlist_may_write(name, who, s))
return EACCES;
/* Delete the playlist */
- return trackdb_delkey(trackdb_playlistsdb, name, tid);
+ e = trackdb_delkey(trackdb_playlistsdb, name, tid);
+ if(!e)
+ eventlog("playlist_deleted", name, 0);
+ return e;
}
/*