{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:
parent
9de5bb9e23
commit
b233c145fa
10
src/mapper.c
10
src/mapper.c
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -41,6 +41,14 @@ void mapper_finish(void);
|
|||||||
bool
|
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
|
||||||
|
@ -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 @@
|
|||||||
#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)
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user