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) ...@@ -93,6 +93,16 @@ mapper_has_music_directory(void)
return music_dir != NULL; 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 * char *
map_uri_fs(const char *uri) map_uri_fs(const char *uri)
{ {
......
...@@ -42,6 +42,14 @@ bool ...@@ -42,6 +42,14 @@ bool
mapper_has_music_directory(void); 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 * Determines the absolute file system path of a relative URI. This
* is basically done by converting the URI to the file system charset * is basically done by converting the URI to the file system charset
* and prepending the music directory. * and prepending the music directory.
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "song_print.h" #include "song_print.h"
#include "locate.h" #include "locate.h"
#include "client.h" #include "client.h"
#include "mapper.h"
/** /**
* Send detailed information about a range of songs in the queue to a * Send detailed information about a range of songs in the queue to a
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "tag_print.h" #include "tag_print.h"
#include "client.h" #include "client.h"
#include "uri.h" #include "uri.h"
#include "mapper.h"
void void
song_print_uri(struct client *client, struct song *song) song_print_uri(struct client *client, struct song *song)
...@@ -40,7 +41,8 @@ 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) if (uri == NULL)
uri = song->uri; 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); 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