- if(!playlist_parse_name(name, 0, 0)) {
- error(0, "invalid playlist name '%s'", name);
+ if(playlist_parse_name(name, 0, 0)) {
+ disorder_error(0, "invalid playlist name '%s'", name);
for(int n = 0; n < ntracks; ++n) {
snprintf(b, sizeof b, "%d", n);
if(!(s = kvp_get(k, b))) {
for(int n = 0; n < ntracks; ++n) {
snprintf(b, sizeof b, "%d", n);
if(!(s = kvp_get(k, b))) {
- error(0, "playlist '%s' lacks track %d", name, n);
+ disorder_error(0, "playlist '%s' lacks track %d", name, n);
* @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
* @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
- if(!playlist_parse_name(name, &owner, 0)) {
- error(0, "invalid playlist name '%s'", name);
+ if(playlist_parse_name(name, &owner, 0)) {
+ disorder_error(0, "invalid playlist name '%s'", name);
/* Playlists with an owner must be public or private */
if(strcmp(share, "public")
&& strcmp(share, "private")) {
/* Playlists with an owner must be public or private */
if(strcmp(share, "public")
&& strcmp(share, "private")) {
return EINVAL;
}
} else {
/* Playlists with no owner must be shared */
if(strcmp(share, "shared")) {
return EINVAL;
}
} else {
/* Playlists with no owner must be shared */
if(strcmp(share, "shared")) {
if((e = trackdb_getdata(trackdb_playlistsdb, name, &k, tid))
&& e != DB_NOTFOUND)
if((e = trackdb_getdata(trackdb_playlistsdb, name, &k, tid))
&& e != DB_NOTFOUND)
}
/* Check that the modification is allowed */
if(!(s = kvp_get(k, "sharing"))) {
}
/* Check that the modification is allowed */
if(!(s = kvp_get(k, "sharing"))) {
- 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;
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),
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),
/* Extract owner; malformed names are skipped */
if(playlist_parse_name(name, &owner, 0)) {
/* Extract owner; malformed names are skipped */
if(playlist_parse_name(name, &owner, 0)) {
- error(0, "invalid playlist name '%s' found in database", name);
+ disorder_error(0, "invalid playlist name '%s' found in database", name);
+ continue;
+ }
+ if(!share) {
+ disorder_error(0, "playlist '%s' has no 'sharing' key", name);
- if(!playlist_parse_name(name, &owner, 0)) {
- error(0, "invalid playlist name '%s'", name);
+ if(playlist_parse_name(name, &owner, 0)) {
+ disorder_error(0, "invalid playlist name '%s'", name);
return e;
/* Check that modification is allowed */
if(!(s = kvp_get(k, "sharing"))) {
return e;
/* Check that modification is allowed */
if(!(s = kvp_get(k, "sharing"))) {
s = "private";
}
if(!playlist_may_write(name, who, s))
return EACCES;
/* Delete the playlist */
s = "private";
}
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;