diff options
Diffstat (limited to '')
-rw-r--r-- | src/SongPrint.cxx | 72 |
1 files changed, 54 insertions, 18 deletions
diff --git a/src/SongPrint.cxx b/src/SongPrint.cxx index ea164d02b..b0c9ed0a6 100644 --- a/src/SongPrint.cxx +++ b/src/SongPrint.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2013 The Music Player Daemon Project + * Copyright (C) 2003-2014 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -19,33 +19,45 @@ #include "config.h" #include "SongPrint.hxx" -#include "Song.hxx" -#include "Directory.hxx" +#include "db/LightSong.hxx" +#include "DetachedSong.hxx" #include "TimePrint.hxx" #include "TagPrint.hxx" #include "Mapper.hxx" -#include "Client.hxx" +#include "client/Client.hxx" #include "util/UriUtil.hxx" +#define SONG_FILE "file: " + +static void +song_print_uri(Client &client, const char *uri) +{ + const std::string allocated = uri_remove_auth(uri); + if (!allocated.empty()) + uri = allocated.c_str(); + + client_printf(client, "%s%s\n", SONG_FILE, + map_to_relative_path(uri)); +} + void -song_print_uri(Client &client, const Song &song) +song_print_uri(Client &client, const LightSong &song) { - if (song.IsInDatabase() && !song.parent->IsRoot()) { + if (song.directory != nullptr) { client_printf(client, "%s%s/%s\n", SONG_FILE, - song.parent->GetPath(), song.uri); - } else { - const char *uri = song.uri; - const std::string allocated = uri_remove_auth(uri); - if (!allocated.empty()) - uri = allocated.c_str(); + song.directory, song.uri); + } else + song_print_uri(client, song.uri); +} - client_printf(client, "%s%s\n", SONG_FILE, - map_to_relative_path(uri)); - } +void +song_print_uri(Client &client, const DetachedSong &song) +{ + song_print_uri(client, song.GetURI()); } void -song_print_info(Client &client, const Song &song) +song_print_info(Client &client, const LightSong &song) { song_print_uri(client, song); @@ -63,6 +75,30 @@ song_print_info(Client &client, const Song &song) if (song.mtime > 0) time_print(client, "Last-Modified", song.mtime); - if (song.tag != nullptr) - tag_print(client, *song.tag); + tag_print(client, *song.tag); +} + +void +song_print_info(Client &client, const DetachedSong &song) +{ + song_print_uri(client, song); + + const unsigned start_ms = song.GetStartMS(); + const unsigned end_ms = song.GetEndMS(); + + if (end_ms > 0) + client_printf(client, "Range: %u.%03u-%u.%03u\n", + start_ms / 1000, + start_ms % 1000, + end_ms / 1000, + end_ms % 1000); + else if (start_ms > 0) + client_printf(client, "Range: %u.%03u-\n", + start_ms / 1000, + start_ms % 1000); + + if (song.GetLastModified() > 0) + time_print(client, "Last-Modified", song.GetLastModified()); + + tag_print(client, song.GetTag()); } |