[artwork] Add artwork_extension_is_artwork() + some fixup/renaming

This commit is contained in:
ejurgensen 2020-05-15 23:14:14 +02:00
parent d2ac216f47
commit ca82857bfe
2 changed files with 59 additions and 38 deletions

View File

@ -26,6 +26,7 @@
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@ -193,7 +194,7 @@ static int source_group_dir_get(struct artwork_ctx *ctx);
static int source_item_cache_get(struct artwork_ctx *ctx);
static int source_item_embedded_get(struct artwork_ctx *ctx);
static int source_item_own_get(struct artwork_ctx *ctx);
static int source_item_stream_get(struct artwork_ctx *ctx);
static int source_item_artwork_url_get(struct artwork_ctx *ctx);
static int source_item_pipe_get(struct artwork_ctx *ctx);
static int source_item_spotifywebapi_track_get(struct artwork_ctx *ctx);
static int source_item_ownpl_get(struct artwork_ctx *ctx);
@ -254,7 +255,7 @@ static struct artwork_source artwork_item_source[] =
},
{
.name = "stream",
.handler = source_item_stream_get,
.handler = source_item_artwork_url_get,
.data_kinds = (1 << DATA_KIND_HTTP),
.media_kinds = MEDIA_KIND_MUSIC,
.cache = STASH,
@ -1503,25 +1504,15 @@ source_item_own_get(struct artwork_ctx *ctx)
}
/*
* Downloads the artwork pointed to by the ICY metadata tag in an internet radio
* stream (the StreamUrl tag). The path will be converted back to the id, which
* is given to the player. If the id is currently being played, and there is a
* valid ICY metadata artwork URL available, it will be returned to this
* function, which will then use the http client to get the artwork.
* Downloads the artwork from the location pointed to by queue_item->artwork_url
*/
static int
source_item_stream_get(struct artwork_ctx *ctx)
source_item_artwork_url_get(struct artwork_ctx *ctx)
{
struct db_queue_item *queue_item;
char *url;
char *ext;
int len;
int ret;
DPRINTF(E_SPAM, L_ART, "Trying internet stream artwork in %s\n", ctx->dbmfi->path);
ret = ART_E_NONE;
DPRINTF(E_SPAM, L_ART, "Trying artwork url for %s\n", ctx->dbmfi->path);
queue_item = db_queue_fetch_byfileid(ctx->id);
if (!queue_item || !queue_item->artwork_url)
@ -1530,24 +1521,12 @@ source_item_stream_get(struct artwork_ctx *ctx)
return ART_E_NONE;
}
url = strdup(queue_item->artwork_url);
ret = artwork_get_byurl(ctx->evbuf, queue_item->artwork_url, ctx->max_w, ctx->max_h);
snprintf(ctx->path, sizeof(ctx->path), "%s", queue_item->artwork_url);
free_queue_item(queue_item, 0);
len = strlen(url);
if ((len < 14) || (len > PATH_MAX)) // Can't be shorter than http://a/1.jpg
goto out_url;
ext = strrchr(url, '.');
if (!ext)
goto out_url;
if ((strcmp(ext, ".jpg") != 0) && (strcmp(ext, ".png") != 0))
goto out_url;
ret = artwork_get_byurl(ctx->evbuf, url, ctx->max_w, ctx->max_h);
out_url:
free(url);
return ret;
}
@ -2024,7 +2003,7 @@ artwork_get_group(struct evbuffer *evbuf, int id, int max_w, int max_h)
}
/* Checks if the file is an artwork file */
int
bool
artwork_file_is_artwork(const char *filename)
{
cfg_t *lib;
@ -2039,7 +2018,7 @@ artwork_file_is_artwork(const char *filename)
for (i = 0; i < n; i++)
{
for (j = 0; j < (sizeof(cover_extension) / sizeof(cover_extension[0])); j++)
for (j = 0; j < ARRAY_SIZE(cover_extension); j++)
{
ret = snprintf(artwork, sizeof(artwork), "%s.%s", cfg_getnstr(lib, "artwork_basenames", i), cover_extension[j]);
if ((ret < 0) || (ret >= sizeof(artwork)))
@ -2049,12 +2028,42 @@ artwork_file_is_artwork(const char *filename)
}
if (strcmp(artwork, filename) == 0)
return 1;
return true;
}
if (j < (sizeof(cover_extension) / sizeof(cover_extension[0])))
if (j < ARRAY_SIZE(cover_extension))
break;
}
return 0;
return false;
}
bool
artwork_extension_is_artwork(const char *path)
{
char *ext;
int len;
int i;
ext = strrchr(path, '.');
if (!ext)
return false;
ext++;
for (i = 0; i < ARRAY_SIZE(cover_extension); i++)
{
len = strlen(cover_extension[i]);
if (strncasecmp(cover_extension[i], ext, len) != 0)
continue;
// Check that after the extension we either have the end or "?"
if (ext[len] != '\0' && ext[len] != '?')
continue;
return true;
}
return false;
}

View File

@ -9,6 +9,7 @@
#define ART_DEFAULT_WIDTH 600
#include <event2/buffer.h>
#include <stdbool.h>
/*
* Get the artwork image for an individual item (track)
@ -38,9 +39,20 @@ artwork_get_group(struct evbuffer *evbuf, int id, int max_w, int max_h);
* Checks if the file is an artwork file (based on user config)
*
* @in filename Name of the file
* @return 1 if true, 0 if false
* @return true/false
*/
int
bool
artwork_file_is_artwork(const char *filename);
/*
* Checks if the path (or URL) has file extension that is recognized as a
* supported file type (e.g. ".jpg"). Also supports URL-encoded paths, e.g.
* http://foo.com/bar.jpg?something
*
* @in path Path to the file (can also be a URL)
* @return true/false
*/
bool
artwork_extension_is_artwork(const char *path);
#endif /* !__ARTWORK_H__ */