aboutsummaryrefslogtreecommitdiffstats
path: root/src/song_print.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/song_print.c')
-rw-r--r--src/song_print.c68
1 files changed, 55 insertions, 13 deletions
diff --git a/src/song_print.c b/src/song_print.c
index 64ab9f6b1..16239e03b 100644
--- a/src/song_print.c
+++ b/src/song_print.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003-2009 The Music Player Daemon Project
+ * Copyright (C) 2003-2010 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
@@ -17,6 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "config.h"
#include "song_print.h"
#include "song.h"
#include "songvec.h"
@@ -24,46 +25,87 @@
#include "tag_print.h"
#include "client.h"
#include "uri.h"
+#include "mapper.h"
void
-song_print_url(struct client *client, struct song *song)
+song_print_uri(struct client *client, struct song *song)
{
if (song_in_database(song) && !directory_is_root(song->parent)) {
client_printf(client, "%s%s/%s\n", SONG_FILE,
- directory_get_path(song->parent), song->url);
+ directory_get_path(song->parent), song->uri);
} else {
char *allocated;
const char *uri;
- uri = allocated = uri_remove_auth(song->url);
+ uri = allocated = uri_remove_auth(song->uri);
if (uri == NULL)
- uri = song->url;
+ uri = song->uri;
- client_printf(client, "%s%s\n", SONG_FILE, uri);
+ client_printf(client, "%s%s\n", SONG_FILE,
+ map_to_relative_path(uri));
g_free(allocated);
}
}
-int
+void
song_print_info(struct client *client, struct song *song)
{
- song_print_url(client, song);
+ song_print_uri(client, song);
+
+ if (song->end_ms > 0)
+ client_printf(client, "Range: %u.%03u-%u.%03u\n",
+ song->start_ms / 1000,
+ song->start_ms % 1000,
+ song->end_ms / 1000,
+ song->end_ms % 1000);
+ else if (song->start_ms > 0)
+ client_printf(client, "Range: %u.%03u-\n",
+ song->start_ms / 1000,
+ song->start_ms % 1000);
+
+ if (song->mtime > 0) {
+#ifndef G_OS_WIN32
+ struct tm tm;
+#endif
+ const struct tm *tm2;
+
+#ifdef G_OS_WIN32
+ tm2 = gmtime(&song->mtime);
+#else
+ tm2 = gmtime_r(&song->mtime, &tm);
+#endif
+
+ if (tm2 != NULL) {
+ char timestamp[32];
+
+ strftime(timestamp, sizeof(timestamp),
+#ifdef G_OS_WIN32
+ "%Y-%m-%dT%H:%M:%SZ",
+#else
+ "%FT%TZ",
+#endif
+ tm2);
+ client_printf(client, "Last-Modified: %s\n",
+ timestamp);
+ }
+ }
if (song->tag)
tag_print(client, song->tag);
-
- return 0;
}
static int
song_print_info_x(struct song *song, void *data)
{
struct client *client = data;
- return song_print_info(client, song);
+ song_print_info(client, song);
+
+ return 0;
}
-int songvec_print(struct client *client, const struct songvec *sv)
+void
+songvec_print(struct client *client, const struct songvec *sv)
{
- return songvec_for_each(sv, song_print_info_x, client);
+ songvec_for_each(sv, song_print_info_x, client);
}