extns: add extn_matches() and extn_is_media() + unit test
This commit is contained in:
parent
02ab1da7cd
commit
ef3f627743
|
@ -1,4 +1,5 @@
|
||||||
#include "private.h"
|
#include "private.h"
|
||||||
|
#include <Elementary.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
const char *extn_img[] =
|
const char *extn_img[] =
|
||||||
|
@ -41,3 +42,71 @@ const char *extn_aud[] =
|
||||||
".mp3", ".aac", ".wav", ".flac", ".m4a", ".opus",
|
".mp3", ".aac", ".wav", ".flac", ".m4a", ".opus",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether a path ends with one of the extensions listed in @extns
|
||||||
|
*/
|
||||||
|
Eina_Bool
|
||||||
|
extn_matches(const char *path, size_t path_len, const char **extns)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; extns[i]; i++)
|
||||||
|
{
|
||||||
|
size_t ext_len = strlen(extns[i]);
|
||||||
|
if (path_len < ext_len)
|
||||||
|
continue;
|
||||||
|
if (!strcasecmp(extns[i], path + path_len - ext_len))
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether a path is a media, if it ends with one of the known extensions
|
||||||
|
*/
|
||||||
|
Eina_Bool
|
||||||
|
extn_is_media(const char *path, size_t path_len)
|
||||||
|
{
|
||||||
|
if (extn_matches(path, path_len, extn_img))
|
||||||
|
return EINA_TRUE;
|
||||||
|
if (extn_matches(path, path_len, extn_scale))
|
||||||
|
return EINA_TRUE;
|
||||||
|
if (extn_matches(path, path_len, extn_edj))
|
||||||
|
return EINA_TRUE;
|
||||||
|
if (extn_matches(path, path_len, extn_mov))
|
||||||
|
return EINA_TRUE;
|
||||||
|
if (extn_matches(path, path_len, extn_aud))
|
||||||
|
return EINA_TRUE;
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(BINARY_TYTEST)
|
||||||
|
#include <assert.h>
|
||||||
|
int
|
||||||
|
tytest_extn_matching(void)
|
||||||
|
{
|
||||||
|
const char *invalid = "foobar.inv";
|
||||||
|
assert(extn_is_media(invalid, strlen(invalid)) == EINA_FALSE);
|
||||||
|
/* Images */
|
||||||
|
const char *jpeg = "/home/qux/foo.bar.jpeg";
|
||||||
|
assert(extn_is_media(jpeg, strlen(jpeg)) == EINA_TRUE);
|
||||||
|
const char *png = "https://foo.bar/qux.PNG";
|
||||||
|
assert(extn_is_media(png, strlen(png)) == EINA_TRUE);
|
||||||
|
/* Scale */
|
||||||
|
const char *svg = "https://foo.bar/qux.svg";
|
||||||
|
assert(extn_is_media(svg, strlen(svg)) == EINA_TRUE);
|
||||||
|
const char *svggz = "https://foo.bar/qux.svg.gz";
|
||||||
|
assert(extn_is_media(svggz, strlen(svggz)) == EINA_TRUE);
|
||||||
|
/* EDJ */
|
||||||
|
const char *edj = "https://foo.bar/qux.edj";
|
||||||
|
assert(extn_is_media(edj, strlen(edj)) == EINA_TRUE);
|
||||||
|
/* Movie */
|
||||||
|
const char *mkv = "https://foo.bar/qux.mkv";
|
||||||
|
assert(extn_is_media(mkv, strlen(mkv)) == EINA_TRUE);
|
||||||
|
/* Audio */
|
||||||
|
const char *ogg = "https://foo.bar/qux.ogg";
|
||||||
|
assert(extn_is_media(ogg, strlen(ogg)) == EINA_TRUE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -7,4 +7,9 @@ extern const char *extn_edj[];
|
||||||
extern const char *extn_mov[];
|
extern const char *extn_mov[];
|
||||||
extern const char *extn_aud[];
|
extern const char *extn_aud[];
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
extn_matches(const char *path, size_t path_len, const char **extns);
|
||||||
|
Eina_Bool
|
||||||
|
extn_is_media(const char *path, size_t path_len);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -76,6 +76,7 @@ tytest_sources = ['termptyesc.c', 'termptyesc.h',
|
||||||
'termiolink.c', 'termiolink.h',
|
'termiolink.c', 'termiolink.h',
|
||||||
'config.c', 'config.h',
|
'config.c', 'config.h',
|
||||||
'colors.c', 'colors.h',
|
'colors.c', 'colors.h',
|
||||||
|
'extns.c', 'extns.h',
|
||||||
'sb.c', 'sb.h',
|
'sb.c', 'sb.h',
|
||||||
'utf8.c', 'utf8.h',
|
'utf8.c', 'utf8.h',
|
||||||
'utils.c', 'utils.h',
|
'utils.c', 'utils.h',
|
||||||
|
|
|
@ -40,6 +40,7 @@ static struct {
|
||||||
{ "color_parse_edc", tytest_color_parse_edc},
|
{ "color_parse_edc", tytest_color_parse_edc},
|
||||||
{ "color_parse_css_rgb", tytest_color_parse_css_rgb},
|
{ "color_parse_css_rgb", tytest_color_parse_css_rgb},
|
||||||
{ "color_parse_css_hsl", tytest_color_parse_css_hsl},
|
{ "color_parse_css_hsl", tytest_color_parse_css_hsl},
|
||||||
|
{ "extn_matching", tytest_extn_matching},
|
||||||
{ NULL, NULL},
|
{ NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,5 +17,6 @@ int tytest_color_parse_uint8(void);
|
||||||
int tytest_color_parse_edc(void);
|
int tytest_color_parse_edc(void);
|
||||||
int tytest_color_parse_css_rgb(void);
|
int tytest_color_parse_css_rgb(void);
|
||||||
int tytest_color_parse_css_hsl(void);
|
int tytest_color_parse_css_hsl(void);
|
||||||
|
int tytest_extn_matching(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue