{queue,song}_print: print relative paths if possible

If a song with an absolute path points inside the music directory,
print only the relative part.  This happens when partial songs from a
playlist file were loaded.
This commit is contained in:
Max Kellermann 2010-07-25 13:18:57 +02:00
parent 9de5bb9e23
commit b233c145fa
4 changed files with 22 additions and 1 deletions

View File

@ -93,6 +93,16 @@ mapper_has_music_directory(void)
return music_dir != NULL;
}
const char *
map_to_relative_path(const char *path_utf8)
{
return music_dir != NULL &&
memcmp(path_utf8, music_dir, music_dir_length) == 0 &&
G_IS_DIR_SEPARATOR(path_utf8[music_dir_length])
? path_utf8 + music_dir_length + 1
: path_utf8;
}
char *
map_uri_fs(const char *uri)
{

View File

@ -41,6 +41,14 @@ void mapper_finish(void);
bool
mapper_has_music_directory(void);
/**
* If the specified absolute path points inside the music directory,
* this function converts it to a relative path. If not, it returns
* the unmodified string pointer.
*/
const char *
map_to_relative_path(const char *path_utf8);
/**
* Determines the absolute file system path of a relative URI. This
* is basically done by converting the URI to the file system charset

View File

@ -24,6 +24,7 @@
#include "song_print.h"
#include "locate.h"
#include "client.h"
#include "mapper.h"
/**
* Send detailed information about a range of songs in the queue to a

View File

@ -25,6 +25,7 @@
#include "tag_print.h"
#include "client.h"
#include "uri.h"
#include "mapper.h"
void
song_print_uri(struct client *client, struct song *song)
@ -40,7 +41,8 @@ song_print_uri(struct client *client, struct song *song)
if (uri == NULL)
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);
}