diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2015-12-07 16:02:08 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2015-12-08 10:56:17 +0900 |
commit | ccfa3fff423d1097ae8b3299b33005d5eb304f6f (patch) | |
tree | b65f67f587c9a0bab37fde731be4d6ab8529a15e | |
parent | 1369e843cb53187d125ff530e5f6540028c96cbc (diff) | |
download | air_mediahub-ccfa3fff423d1097ae8b3299b33005d5eb304f6f.tar.gz air_mediahub-ccfa3fff423d1097ae8b3299b33005d5eb304f6f.tar.bz2 air_mediahub-ccfa3fff423d1097ae8b3299b33005d5eb304f6f.zip |
datamgr: add function to set source type
Change-Id: I2ba6f265df4c21b80d909b914a198a0b7b28e073
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r-- | include/data/datamgr.h | 3 | ||||
-rw-r--r-- | src/data/albumdata.c | 35 | ||||
-rw-r--r-- | src/data/folderdata.c | 35 | ||||
-rw-r--r-- | src/data/mediadata.c | 69 |
4 files changed, 96 insertions, 46 deletions
diff --git a/include/data/datamgr.h b/include/data/datamgr.h index 158ace4..d7e30cf 100644 --- a/include/data/datamgr.h +++ b/include/data/datamgr.h @@ -22,7 +22,7 @@ #include "data/folderdata.h" #define MOVIE_MEDIA_COND "media_type=1 AND copyright!=\"Unknown\"" -#define GALLERY_MEDIA_COND "media_type=0 OR (media_type=1 AND copyright=\"Unknown\")" +#define GALLERY_MEDIA_COND "(media_type=0 OR (media_type=1 AND copyright=\"Unknown\"))" #define MUSIC_MEDIA_COND "media_type=3" enum data_type { @@ -46,6 +46,7 @@ struct data_ops { Eina_List *(*get_group)(void *handle, int type, void *data); void (*free_group)(Eina_List *list); int (*get_count)(void *handle, int type); + void (*set_source)(void *handle, int source_type); }; struct datamgr { diff --git a/src/data/albumdata.c b/src/data/albumdata.c index a81f3a0..b3cd8ef 100644 --- a/src/data/albumdata.c +++ b/src/data/albumdata.c @@ -91,23 +91,16 @@ static bool _create_filter(struct albumdata *ad, filter_h *filter, return false; } - snprintf(buf, sizeof(buf), "%s", ad->media_type); + snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", + ad->media_type, ad->source_type); - if (ad->source_type != E_SOURCE_ALL) { + if (cond) { char s1[64]; - snprintf(s1, sizeof(s1), " AND MEDIA_STORAGE_TYPE=%d", - ad->source_type); + snprintf(s1, sizeof(s1), " AND %s", cond); strncat(buf, s1, strlen(s1)); } - if (cond) { - char s2[64]; - - snprintf(s2, sizeof(s2), " AND %s", cond); - strncat(buf, s2, strlen(s2)); - } - media_filter_set_condition(tmp_filter, buf, MEDIA_CONTENT_COLLATE_DEFAULT); @@ -597,6 +590,25 @@ static Eina_List *_get_group(void *handle, int type, void *data) return list; } +static void _set_source(void *handle, int source_type) +{ + struct albumdata *ad; + + if (!handle) { + _ERR("failed to get albumdata handle"); + return; + } + + if (source_type < 0 || source_type >= E_SOURCE_MAX) { + _ERR("invalid argument"); + return; + } + + ad = handle; + + ad->source_type = source_type; +} + static struct data_ops _ops = { .create = _create, .destroy = _destroy, @@ -604,6 +616,7 @@ static struct data_ops _ops = { .get_count = _get_count, .get_group = _get_group, .free_group = _free_group, + .set_source = _set_source, }; struct data_ops *albumdata_get_ops(void) diff --git a/src/data/folderdata.c b/src/data/folderdata.c index bd9ad40..678fb51 100644 --- a/src/data/folderdata.c +++ b/src/data/folderdata.c @@ -88,23 +88,16 @@ static bool _create_filter(struct folderdata *fd, filter_h *filter, media_filter_set_order(tmp_filter, MEDIA_CONTENT_ORDER_ASC, FOLDER_NAME, MEDIA_CONTENT_COLLATE_DEFAULT); } else { - snprintf(buf, sizeof(buf), "%s", fd->media_type); + snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", + fd->media_type, fd->source_type); - if (fd->source_type != E_SOURCE_ALL) { + if (cond) { char s1[256]; - snprintf(s1, sizeof(s1), " AND MEDIA_STORAGE_TYPE=%d", - fd->source_type); + snprintf(s1, sizeof(s1), " AND %s", cond); strncat(buf, s1, strlen(s1)); } - if (cond) { - char s2[256]; - - snprintf(s2, sizeof(s2), " AND %s", cond); - strncat(buf, s2, strlen(s2)); - } - media_filter_set_order(tmp_filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_DEFAULT); @@ -599,6 +592,25 @@ static Eina_List *_get_group(void *handle, int type, void *data) return list; } +static void _set_source(void *handle, int source_type) +{ + struct folderdata *fd; + + if (!handle) { + _ERR("failed to get folderdata handle"); + return; + } + + if (source_type < 0 || source_type >= E_SOURCE_MAX) { + _ERR("invalid argument"); + return; + } + + fd = handle; + + fd->source_type = source_type; +} + static struct data_ops _ops = { .create = _create, .destroy = _destroy, @@ -606,6 +618,7 @@ static struct data_ops _ops = { .get_count = _get_count, .get_group = _get_group, .free_group = _free_group, + .set_source = _set_source, }; struct data_ops *folderdata_get_ops(void) diff --git a/src/data/mediadata.c b/src/data/mediadata.c index 524da10..fa4dba9 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -113,15 +113,8 @@ static bool _create_filter(struct mediadata *md, filter_h *filter) return false; } - snprintf(buf, sizeof(buf), "%s", md->media_type); - - if (md->source_type != E_SOURCE_ALL) { - char s[64]; - - snprintf(s, sizeof(s), " AND MEDIA_STORAGE_TYPE=%d", - md->source_type); - strncat(buf, s, strlen(s)); - } + snprintf(buf, sizeof(buf), "%s AND MEDIA_STORAGE_TYPE=%d", + md->media_type, md->source_type); media_filter_set_condition(tmp_filter, buf, MEDIA_CONTENT_COLLATE_DEFAULT); @@ -485,6 +478,14 @@ static Eina_List *_sort_list(Eina_List *list, int sort) return sorted_list; } +static void _destroy_media_list(Eina_List *list) +{ + app_media *am; + + EINA_LIST_FREE(list, am) + app_media_destroy(am); +} + static bool _get_each_media_info(media_info_h media_h, void *data) { Eina_List **list; @@ -512,6 +513,17 @@ static bool _get_medialist(struct mediadata *md) filter_h filter; int ret; + ret = media_content_connect(); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + _ERR("failed to connect to media content"); + return false; + } + + if (md->media_list) { + _destroy_media_list(md->media_list); + md->media_list = NULL; + } + if (!_create_filter(md, &filter)) { _ERR("failed to create filter"); return false; @@ -530,13 +542,14 @@ static bool _get_medialist(struct mediadata *md) media_filter_destroy(filter); + media_content_disconnect(); + return true; } static void *_create(const char *media_type, int source_type) { struct mediadata *md; - int ret; if (!media_type || source_type < 0 || source_type >= E_SOURCE_MAX) { _ERR("invalid argument"); @@ -552,28 +565,17 @@ static void *_create(const char *media_type, int source_type) md->media_type = media_type; md->source_type = source_type; - ret = media_content_connect(); - if (ret != MEDIA_CONTENT_ERROR_NONE) { - _ERR("failed to connect to media content"); - free(md); - return NULL; - } - if (!_get_medialist(md)) { _ERR("failed to get medialist"); free(md); - media_content_disconnect(); return NULL; } - media_content_disconnect(); - return (void *)md; } static void _destroy(void *handle) { - app_media *am; struct mediadata *md; if (!handle) { @@ -583,8 +585,7 @@ static void _destroy(void *handle) md = handle; - EINA_LIST_FREE(md->media_list, am) - app_media_destroy(am); + _destroy_media_list(md->media_list); free(md); } @@ -698,6 +699,27 @@ static Eina_List *_get_group(void *handle, int type, void *data) return list; } +static void _set_source(void *handle, int source_type) +{ + struct mediadata *md; + + if (!handle) { + _ERR("failed to get mediadata handle"); + return; + } + + if (source_type < 0 || source_type >= E_SOURCE_MAX) { + _ERR("invalid argument"); + return; + } + + md = handle; + + md->source_type = source_type; + + _get_medialist(md); +} + static struct data_ops _ops = { .create = _create, .destroy = _destroy, @@ -705,6 +727,7 @@ static struct data_ops _ops = { .get_count = _get_count, .get_group = _get_group, .free_group = _free_group, + .set_source = _set_source, }; struct data_ops *mediadata_get_ops(void) |