Commit b233c145 authored by Max Kellermann's avatar Max Kellermann

{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.
parent 9de5bb9e
......@@ -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)
{
......
......@@ -42,6 +42,14 @@ 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
* and prepending the music directory.
......
......@@ -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
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment