diff options
author | Kyuho Jo <kyuho.jo@samsung.com> | 2016-06-01 13:53:44 +0900 |
---|---|---|
committer | Kyuho Jo <kyuho.jo@samsung.com> | 2016-06-01 14:04:39 +0900 |
commit | 02c513f007bb20edcc88199d3e4e13fb058d4c76 (patch) | |
tree | c4f1f5701fc995c6705004cdd4bb368434ac7ede | |
parent | cf2ddf69a4487f2c0f9590add9dca90c20e1d6a5 (diff) | |
download | air_mediahub-02c513f007bb20edcc88199d3e4e13fb058d4c76.tar.gz air_mediahub-02c513f007bb20edcc88199d3e4e13fb058d4c76.tar.bz2 air_mediahub-02c513f007bb20edcc88199d3e4e13fb058d4c76.zip |
Changes for supporting myfiles
1. Accept requests for opening media files from myfiles.
2. Place base-i18n with ICU library.
3. maps-service can be removed from dependencies.
Change-Id: I444f03761f59ffca06da3129a4ebb7853c986b92
Signed-off-by: Kyuho Jo <kyuho.jo@samsung.com>
-rw-r--r-- | CMakeLists.txt | 107 | ||||
-rw-r--r-- | include/data/mediadata.h | 2 | ||||
-rw-r--r-- | include/util/util.h | 6 | ||||
-rw-r--r-- | include/view.h | 3 | ||||
-rw-r--r-- | org.tizen.mediahub.xml.in | 15 | ||||
-rw-r--r-- | packaging/org.tizen.mediahub.spec | 9 | ||||
-rw-r--r-- | src/data/albumdata.c | 98 | ||||
-rw-r--r-- | src/data/mediadata.c | 66 | ||||
-rw-r--r-- | src/layout/gallery.c | 11 | ||||
-rw-r--r-- | src/main.c | 78 | ||||
-rw-r--r-- | src/util/util.c | 56 | ||||
-rw-r--r-- | src/view/action_menu.c | 4 | ||||
-rw-r--r-- | src/view/base.c | 5 | ||||
-rw-r--r-- | src/view/mplayer.c | 17 | ||||
-rw-r--r-- | src/view/viewer.c | 15 |
15 files changed, 329 insertions, 163 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 21f77cc..396b814 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,48 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT("mediahub" C) INCLUDE(FindPkgConfig) + +IF(${FEATURE_LOCATION_SERVICE} STREQUAL "ENABLED") +pkg_check_modules(PKGS REQUIRED + glib-2.0 + gio-2.0 + elementary + capi-appfw-application + capi-media-player + capi-ui-efl-util + vconf + app-utils + icu-i18n + capi-maps-service) +ADD_DEFINITIONS("-D__FEATURE_LOCATION_SERVICE__") +SET(SRCS + src/main.c + src/view/base.c + src/view/detail.c + src/view/viewer.c + src/view/mplayer.c + src/view/action_menu.c + src/view/zoom.c + src/layout/movie.c + src/layout/gallery.c + src/layout/music.c + src/util/controller.c + src/util/listmgr.c + src/util/timeout_handler.c + src/util/usb.c + src/util/util.c + src/util/playermgr.c + src/util/ctxpopup.c + src/util/progressbar.c + src/data/datamgr.c + src/data/albumdata.c + src/data/folderdata.c + src/data/mediadata.c + src/grid/grid_movie.c + src/grid/grid_gallery.c + src/grid/grid_music.c + src/util/locmgr.c) +ELSE (${FEATURE_LOCATION_SERVICE} STREQUAL "ENABLED") pkg_check_modules(PKGS REQUIRED glib-2.0 gio-2.0 @@ -24,10 +66,36 @@ pkg_check_modules(PKGS REQUIRED capi-appfw-application capi-media-player capi-ui-efl-util - capi-maps-service vconf - capi-base-utils-i18n - app-utils) + app-utils + icu-i18n) +SET(SRCS + src/main.c + src/view/base.c + src/view/detail.c + src/view/viewer.c + src/view/mplayer.c + src/view/action_menu.c + src/view/zoom.c + src/layout/movie.c + src/layout/gallery.c + src/layout/music.c + src/util/controller.c + src/util/listmgr.c + src/util/timeout_handler.c + src/util/usb.c + src/util/util.c + src/util/playermgr.c + src/util/ctxpopup.c + src/util/progressbar.c + src/data/datamgr.c + src/data/albumdata.c + src/data/folderdata.c + src/data/mediadata.c + src/grid/grid_movie.c + src/grid/grid_gallery.c + src/grid/grid_music.c) +ENDIF (${FEATURE_LOCATION_SERVICE} STREQUAL "ENABLED") IF(NOT DEFINED PACKAGE_NAME) SET(PACKAGE_NAME "org.tizen.mediahub") @@ -53,35 +121,6 @@ IF(NOT DEFINED DESKTOP_ICON) SET(DESKTOP_ICON ${PACKAGE_NAME}.png) ENDIF(NOT DEFINED DESKTOP_ICON) -SET(SRCS -src/main.c -src/view/base.c -src/view/detail.c -src/view/viewer.c -src/view/mplayer.c -src/view/action_menu.c -src/view/zoom.c -src/layout/movie.c -src/layout/gallery.c -src/layout/music.c -src/util/controller.c -src/util/listmgr.c -src/util/timeout_handler.c -src/util/usb.c -src/util/util.c -src/util/playermgr.c -src/util/ctxpopup.c -src/util/progressbar.c -src/util/locmgr.c -src/data/datamgr.c -src/data/albumdata.c -src/data/folderdata.c -src/data/mediadata.c -src/grid/grid_movie.c -src/grid/grid_gallery.c -src/grid/grid_music.c -) - SET(TARGET_EDJ "${PROJECT_NAME}.edj") SET(THEME_EDJ "${PROJECT_NAME}-theme.edj") @@ -100,7 +139,9 @@ ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) FOREACH(flag ${PKGS_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror") + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror -fPIE") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie") TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS}) CONFIGURE_FILE(${PACKAGE_NAME}.xml.in ${PACKAGE_NAME}.xml) diff --git a/include/data/mediadata.h b/include/data/mediadata.h index ebd07d2..7e902c9 100644 --- a/include/data/mediadata.h +++ b/include/data/mediadata.h @@ -43,4 +43,6 @@ enum media_file_type { struct data_ops *mediadata_get_ops(void); +app_media* mediadata_get_app_media_by_file_path(char *file_path); + #endif /* _AIR_MEDIAHUB_MEDIADATA_H__ */ diff --git a/include/util/util.h b/include/util/util.h index 3076e44..34072d5 100644 --- a/include/util/util.h +++ b/include/util/util.h @@ -19,7 +19,7 @@ #include <media_content.h> #include <app_media.h> -#include <utils_i18n.h> +#include <unicode/ustring.h> bool util_check_movie_type(const char *str); bool util_launch_request(const char *appid, const char *key, const char *value); @@ -37,8 +37,8 @@ Evas_Object *util_add_table(Evas_Object *base, int padding_x, int padding_y); void util_time_string(char *str, int size, unsigned int ms, bool full); void util_up_string(char *str); -i18n_uchar* util_convert_to_UTF16_string(const char *source_string); -char* util_convert_to_UTF8_string(i18n_uchar *sourct_string); +UChar* util_convert_to_UTF16_string(const char *source_string); +char* util_convert_to_UTF8_string(UChar *sourct_string); int util_get_media_index(Eina_List *list, void *info); int util_get_media_index_from_id(Eina_List *list, const char *id); diff --git a/include/view.h b/include/view.h index 99e86a1..d780d73 100644 --- a/include/view.h +++ b/include/view.h @@ -57,7 +57,8 @@ enum update_type { UPDATE_VIEW_MODE, UPDATE_SOURCE_CONTENT, UPDATE_SOURCE_TYPE, - UPDATE_TOAST + UPDATE_TOAST, + UPDATE_CONTENT_WITH_MEDIA_ID }; enum base_view_layout { diff --git a/org.tizen.mediahub.xml.in b/org.tizen.mediahub.xml.in index f7a67c9..c3f9fa0 100644 --- a/org.tizen.mediahub.xml.in +++ b/org.tizen.mediahub.xml.in @@ -6,6 +6,21 @@ <ui-application appid="@PACKAGE_NAME@" exec="@BINDIR@/@PROJECT_NAME@" nodisplay="false" multiple="false" type="capp" taskmanage="true"> <icon>org.tizen.mediahub.png</icon> <label>Media Hub </label> + <app-control> + <operation name="http://tizen.org/appcontrol/operation/view"/> + <mime name="image/jpeg"/> + <mime name="image/png"/> + <mime name="image/bmp"/> + <mime name="image/gif"/> + <mime name="image/vnd.wap.wbmp"/> + <mime name="audio/mp3"/> + <mime name="video/mp4"/> + <mime name="video/wmv"/> + </app-control> + <app-control> + <operation name="http://tizen.org/appcontrol/operation/view"/> + <uri name="file"/> + </app-control> </ui-application> <privileges> <privilege>http://tizen.org/privilege/content.write</privilege> diff --git a/packaging/org.tizen.mediahub.spec b/packaging/org.tizen.mediahub.spec index c2aed7c..1bbf4a9 100644 --- a/packaging/org.tizen.mediahub.spec +++ b/packaging/org.tizen.mediahub.spec @@ -7,6 +7,8 @@ License: Apache-2.0 Source0: %{name}-%{version}.tar.gz Source1: %{name}.manifest +%define _feature_location_service "DISABLED" + BuildRequires: cmake BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) @@ -14,11 +16,13 @@ BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(capi-media-player) BuildRequires: pkgconfig(capi-ui-efl-util) +%if %{_feature_location_service} == "ENABLED" BuildRequires: pkgconfig(capi-maps-service) +%endif BuildRequires: pkgconfig(vconf) BuildRequires: pkgconfig(app-utils) -BuildRequires: pkgconfig(capi-base-utils-i18n) BuildRequires: pkgconfig(libtzplatform-config) +BuildRequires: pkgconfig(icu-i18n) %define _appdir %{TZ_SYS_RO_APP}/%{name} %define _bindir %{_appdir}/bin @@ -43,7 +47,8 @@ cmake \ -DPACKAGEDIR=%{_pkgdir} \ -DDESKTOP_ICONDIR=%{_desktop_icondir} \ -DDESKTOP_ICON=%{name}.png \ - -DVERSION=%{version} + -DVERSION=%{version}\ + -DFEATURE_LOCATION_SERVICE=%{_feature_location_service} make %{?jobs:-j%jobs} diff --git a/src/data/albumdata.c b/src/data/albumdata.c index ae9833a..9079260 100644 --- a/src/data/albumdata.c +++ b/src/data/albumdata.c @@ -18,7 +18,8 @@ #include <media_content.h> #include <app_debug.h> #include <app_media.h> -#include <utils_i18n.h> +#include <unicode/ustring.h> +#include <unicode/uchar.h> #include "data/datamgr.h" #include "util/util.h" @@ -81,65 +82,6 @@ static struct _group_info g_group_info[E_GROUP_ALBUM_MAX] = { }; -static i18n_uchar* _convert_to_UTF16_string(const char *source_string) -{ - int buffer_length = 0; - i18n_error_code_e error_from_i18n; - i18n_uchar *converted_string = NULL; - - /* Calc buffer size for converted UTF16 string */ - i18n_ustring_from_UTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_i18n); - - converted_string = malloc((buffer_length + 2) * sizeof(i18n_uchar)); - if (converted_string == NULL) { - _ERR("malloc failed"); - goto OUT; - } - - /* Convert to i18n(UTF16) string */ - i18n_ustring_from_UTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_i18n); - if (error_from_i18n != I18N_ERROR_NONE) { - _ERR("i18n_ustring_from_UTF8 returns [%d]", error_from_i18n); - free(converted_string); - goto OUT; - } - converted_string[buffer_length] = (i18n_uchar)0; - -OUT: - - return converted_string; -} - -static char* _convert_to_UTF8_string(i18n_uchar *sourct_string) -{ - int buffer_length = 0; - i18n_error_code_e error_from_i18n; - char *converted_string = NULL; - - i18n_ustring_to_UTF8(NULL, 0, &buffer_length, sourct_string, -1, &error_from_i18n); - - converted_string = malloc((buffer_length + 2) * sizeof(char)); - if (converted_string == NULL) { - _ERR("malloc failed"); - goto OUT; - } - - /* Convert to UTF8 */ - i18n_ustring_to_UTF8(converted_string, buffer_length + 1, &buffer_length, sourct_string, -1, &error_from_i18n); - if (error_from_i18n != I18N_ERROR_NONE) { - _ERR("i18n_ustring_to_UTF8 returns [%d]", error_from_i18n); - free(converted_string); - converted_string = NULL; - goto OUT; - } - converted_string[buffer_length] = '\0'; - -OUT: - - return converted_string; -} - - static bool _create_filter(struct albumdata *ad, filter_h *filter, const char *cond, int filter_type) { @@ -194,14 +136,14 @@ static int _compare_name(struct group_info *gi, struct album_info *ai) return -1; int32_t result = -1; - i18n_uchar *converted_group_name = NULL; - i18n_uchar *converted_album_title = NULL; + UChar *converted_group_name = NULL; + UChar *converted_album_title = NULL; converted_group_name = util_convert_to_UTF16_string(gi->data); converted_album_title = util_convert_to_UTF16_string(ai->name); if (converted_group_name && converted_album_title) { - result = i18n_ustring_case_compare_n(converted_group_name, converted_album_title, 1, I18N_USTRING_U_FOLD_CASE_DEFAULT); + result = u_strncasecmp(converted_group_name, converted_album_title, 1, U_FOLD_CASE_DEFAULT); } if (converted_group_name) { @@ -221,15 +163,15 @@ static void *_get_data_name(struct album_info *ai) return NULL; char *result_str = NULL; - i18n_uchar *converted_string = NULL; + UChar *converted_string = NULL; - converted_string = _convert_to_UTF16_string(ai->name); + converted_string = util_convert_to_UTF16_string(ai->name); if (converted_string == NULL) { _ERR("_convert_to_UTF16_string failed"); goto OUT; } - result_str = _convert_to_UTF8_string(converted_string); + result_str = util_convert_to_UTF8_string(converted_string); OUT: if (converted_string) @@ -244,8 +186,8 @@ static char *_get_name(struct album_info *ai) return NULL; char *result_str = NULL; - i18n_uchar *converted_string = NULL; - i18n_uchar sub_string[10] = { 0, }; + UChar *converted_string = NULL; + UChar sub_string[10] = { 0, }; converted_string = util_convert_to_UTF16_string(ai->name); @@ -255,7 +197,7 @@ static char *_get_name(struct album_info *ai) } /* Get a character (not a byte) from left */ - i18n_ustring_copy_n(sub_string, converted_string, 1); + u_strncpy(sub_string, converted_string, 1); result_str = util_convert_to_UTF8_string(sub_string); OUT: @@ -272,14 +214,14 @@ static int _compare_artist(struct group_info *gi, struct album_info *ai) return -1; int32_t result = -1; - i18n_uchar *converted_group_name = NULL; - i18n_uchar *converted_artist = NULL; + UChar *converted_group_name = NULL; + UChar *converted_artist = NULL; converted_group_name = util_convert_to_UTF16_string(gi->data); converted_artist = util_convert_to_UTF16_string(ai->artist); if (converted_group_name && converted_artist) { - result = i18n_ustring_case_compare_n(converted_group_name, converted_artist, 1, I18N_USTRING_U_FOLD_CASE_DEFAULT); + result = u_strncasecmp(converted_group_name, converted_artist, 1, U_FOLD_CASE_DEFAULT); } if (converted_group_name) { @@ -299,15 +241,15 @@ static void *_get_data_artist(struct album_info *ai) return NULL; char *result_str = NULL; - i18n_uchar *converted_string = NULL; + UChar *converted_string = NULL; - converted_string = _convert_to_UTF16_string(ai->artist); + converted_string = util_convert_to_UTF16_string(ai->artist); if (converted_string == NULL) { _ERR("_convert_to_UTF16_string failed"); goto OUT; } - result_str = _convert_to_UTF8_string(converted_string); + result_str = util_convert_to_UTF8_string(converted_string); OUT: if (converted_string) @@ -322,8 +264,8 @@ static char *_get_artist(struct album_info *ai) return NULL; char *result_str = NULL; - i18n_uchar *converted_string = NULL; - i18n_uchar sub_string[10] = { 0, }; + UChar *converted_string = NULL; + UChar sub_string[10] = { 0, }; converted_string = util_convert_to_UTF16_string(ai->artist); @@ -333,7 +275,7 @@ static char *_get_artist(struct album_info *ai) } /* Get a character (not a byte) from left */ - i18n_ustring_copy_n(sub_string, converted_string, 1); + u_strncpy(sub_string, converted_string, 1); result_str = util_convert_to_UTF8_string(sub_string); OUT: diff --git a/src/data/mediadata.c b/src/data/mediadata.c index eac8507..66d3d1f 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -18,6 +18,8 @@ #include <media_content.h> #include <app_debug.h> #include <app_media.h> +#include <unicode/ustring.h> +#include <unicode/uchar.h> #include "data/datamgr.h" #include "util/util.h" @@ -148,14 +150,14 @@ static int _compare_title(struct group_info *gi, app_media_info *info) return -1; int32_t result = -1; - i18n_uchar *converted_group_name = NULL; - i18n_uchar *converted_media_title = NULL; + UChar *converted_group_name = NULL; + UChar *converted_media_title = NULL; converted_group_name = util_convert_to_UTF16_string(gi->data); converted_media_title = util_convert_to_UTF16_string(info->title); if (converted_group_name && converted_media_title) { - result = i18n_ustring_case_compare_n(converted_group_name, converted_media_title, 1, I18N_USTRING_U_FOLD_CASE_DEFAULT); + result = u_strncasecmp(converted_group_name, converted_media_title, 1, U_FOLD_CASE_DEFAULT); } if (converted_group_name) { @@ -175,7 +177,7 @@ static void *_get_data_title(app_media_info *info) return NULL; char *result_str = NULL; - i18n_uchar *converted_string = NULL; + UChar *converted_string = NULL; converted_string = util_convert_to_UTF16_string(info->title); @@ -198,8 +200,8 @@ static char *_get_title(app_media_info *info) return NULL; char *result_str = NULL; - i18n_uchar *converted_string = NULL; - i18n_uchar sub_string[10] = { 0, }; + UChar *converted_string = NULL; + UChar sub_string[10] = { 0, }; converted_string = util_convert_to_UTF16_string(info->title); @@ -209,7 +211,7 @@ static char *_get_title(app_media_info *info) } /* Get a character (not a byte) from left */ - i18n_ustring_copy_n(sub_string, converted_string, 1); + u_strncpy(sub_string, converted_string, 1); result_str = util_convert_to_UTF8_string(sub_string); @@ -798,3 +800,53 @@ struct data_ops *mediadata_get_ops(void) { return &_ops; }; + +bool _media_item_cb(media_info_h item, void *user_data) +{ + app_media **am = (app_media**)user_data; + + *am = app_media_create(item); + + return false; //only 1 item +} + + +app_media* mediadata_get_app_media_by_file_path(char *file_path) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + filter_h media_filter = NULL; + app_media *am = NULL; + char condition[PATH_MAX + 256] = {0,}; + + if (file_path == NULL) { + _ERR("filepath is NULL"); + goto out; + } + + media_content_connect(); + + snprintf(condition, sizeof(condition), "%s = '%s'", MEDIA_PATH, file_path); + + + if ((ret = media_filter_create(&media_filter)) != MEDIA_CONTENT_ERROR_NONE) { + _ERR("media_filter_create returns [%d]", ret); + goto out; + } + + if ((ret = media_filter_set_condition(media_filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT)) != MEDIA_CONTENT_ERROR_NONE) { + _ERR("media_filter_create returns [%d]", ret); + goto out; + } + + ret = media_filter_set_order(media_filter, MEDIA_CONTENT_ORDER_DESC, MEDIA_DISPLAY_NAME, MEDIA_CONTENT_COLLATE_NOCASE); + + if ((ret = media_info_foreach_media_from_db(media_filter, _media_item_cb, &am)) != MEDIA_CONTENT_ERROR_NONE) { + _ERR("media_info_foreach_media_from_db is failed [%d]", ret); + } + +out: + if (media_filter) + media_filter_destroy(media_filter); + + return am; +} diff --git a/src/layout/gallery.c b/src/layout/gallery.c index d1fba82..448ee44 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -62,8 +62,9 @@ struct _priv { int source_type; struct grid_data *gdata; - +#ifdef __FEATURE_LOCATION_SERVICE__ struct locmgr *locmgr; +#endif }; static void _recent_item_selected(struct _priv *priv, app_media *am) @@ -177,7 +178,9 @@ static void _destroy_datamgr(struct _priv *priv) static void _destroy_utils(struct _priv *priv) { +#ifdef __FEATURE_LOCATION_SERVICE__ locmgr_destroy(priv->locmgr); +#endif _destroy_datamgr(priv); listmgr_destroy(priv->listmgr); @@ -187,8 +190,10 @@ static void _destroy_utils(struct _priv *priv) static Eina_Bool _create_location(void *data) { struct _priv *priv; - struct locmgr *locmgr; struct datamgr *dmgr; +#ifdef __FEATURE_LOCATION_SERVICE__ + struct locmgr *locmgr; +#endif if (!data) { _ERR("invalid argument"); @@ -203,6 +208,7 @@ static Eina_Bool _create_location(void *data) return ECORE_CALLBACK_CANCEL; } +#ifdef __FEATURE_LOCATION_SERVICE__ locmgr = locmgr_create(); if (!locmgr) { _ERR("failed to create locmgr"); @@ -213,6 +219,7 @@ static Eina_Bool _create_location(void *data) locmgr_set_locations(locmgr, dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL)); +#endif return ECORE_CALLBACK_CANCEL; } @@ -126,13 +126,28 @@ static void _terminate(void *data) } } +static void _open_media_file(char *media_type, char *media_file_path) +{ + if (strcmp(media_type, "Image") == 0) { + viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT_WITH_MEDIA_ID, media_file_path); + viewmgr_push_view(VIEW_VIEWER); + } else if (strcmp(media_type, "Video") == 0) { + viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT_WITH_MEDIA_ID, media_file_path); + viewmgr_push_view(VIEW_VIEWER); + } else if (strcmp(media_type, "Audio") == 0) { + viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT_WITH_MEDIA_ID, media_file_path); + viewmgr_push_view(VIEW_MPLAYER); + } +} + static void _app_control(app_control_h app_control, void *data) { struct _appdata *ad; - char *media_id; - char *caller_id; + char *media_id = NULL; + char *caller_id = NULL; int r; + if (!data) { _ERR("failed to get data"); return; @@ -147,27 +162,52 @@ static void _app_control(app_control_h app_control, void *data) if (r != APP_CONTROL_ERROR_NONE) caller_id = NULL; - r = app_control_get_extra_data(app_control, PARAM_MEDIA_ID, &media_id); - if (r != APP_CONTROL_ERROR_NONE) - media_id = NULL; - - if (media_id && caller_id) { - if (!strcmp(caller_id, APP_ID_FAVORITE)) { - while (viewmgr_active_view_count() > 0) - viewmgr_pop_view(); - viewmgr_update_view(VIEW_BASE, - UPDATE_FAVORITE, media_id); - } else if (!strcmp(caller_id, APP_ID_RECENT)) { + if (caller_id == NULL) { + r = app_control_get_extra_data(app_control, PARAM_MEDIA_ID, &media_id); + if (r != APP_CONTROL_ERROR_NONE) + media_id = NULL; + + if (media_id && caller_id) { + if (!strcmp(caller_id, APP_ID_FAVORITE)) { + while (viewmgr_active_view_count() > 0) + viewmgr_pop_view(); + + viewmgr_update_view(VIEW_BASE, + UPDATE_FAVORITE, media_id); + } else if (!strcmp(caller_id, APP_ID_RECENT)) { + viewmgr_push_view(VIEW_BASE); + viewmgr_update_view(VIEW_BASE, + UPDATE_RECENT, media_id); + } + } else { viewmgr_push_view(VIEW_BASE); - viewmgr_update_view(VIEW_BASE, - UPDATE_RECENT, media_id); + viewmgr_update_view(VIEW_BASE, UPDATE_RECENT, media_id); } - } else - viewmgr_push_view(VIEW_BASE); - free(media_id); - free(caller_id); + } else if (strcmp("org.tizen.myfiles", caller_id) == 0) { + char *file_path = NULL; + char *media_type = NULL; + + app_control_get_extra_data(app_control, "Path", &file_path); + app_control_get_extra_data(app_control, "Media type", &media_type); + + if (file_path == NULL) { + _DBG("file_path is NULL"); + app_control_get_uri(app_control, &file_path); + } + + if (file_path != NULL) { + if (media_type != NULL) { + _open_media_file(media_type, file_path); + } + } + } + if (media_id) + free(media_id); + if (caller_id) + free(caller_id); + } static void _pause(void *data) diff --git a/src/util/util.c b/src/util/util.c index cb84c9e..5c0f282 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -19,6 +19,7 @@ #include <app_control.h> #include <app_debug.h> #include <app_contents.h> +#include <unicode/ustring.h> #include "define.h" #include "util/util.h" @@ -456,42 +457,64 @@ Elm_Image_Orient util_get_orient(media_content_orientation_e orient) return o; } -i18n_uchar* util_convert_to_UTF16_string(const char *source_string) +UChar* util_convert_to_UTF16_string(const char *source_string) { int buffer_length = 0; - i18n_error_code_e error_from_i18n; - i18n_uchar *converted_string = NULL; + UErrorCode error_from_icu = 0; + UChar *converted_string = NULL; /* Calc buffer size for converted UTF16 string */ - i18n_ustring_from_UTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_i18n); - - converted_string = malloc((buffer_length + 2) * sizeof(i18n_uchar)); + u_strFromUTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_icu); + if (buffer_length == 0) { + _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu)); + goto OUT; + } + /* NOTE: + * Calling u_strFromUTF8 with 0 capacity always causes U_BUFFER_OVERFLOW_ERROR. + * When u_strFromUTF8 is succeeded, u_strFromUTF8 doesn't change error_from_icu. + * It means error_from_icu have U_BUFFER_OVERFLOW_ERROR even though there is no problem. + * So, error_from_icu should be reset as U_ZERO_ERROR here*/ + error_from_icu = U_ZERO_ERROR; + + converted_string = malloc((buffer_length + 2) * sizeof(UChar)); if (converted_string == NULL) { _ERR("malloc failed"); goto OUT; } /* Convert to i18n(UTF16) string */ - i18n_ustring_from_UTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_i18n); - if (error_from_i18n != I18N_ERROR_NONE) { - _ERR("i18n_ustring_from_UTF8 returns [%d]", error_from_i18n); + u_strFromUTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_icu); + if (U_FAILURE(error_from_icu)) { + _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu)); free(converted_string); + converted_string = NULL; goto OUT; } - converted_string[buffer_length] = (i18n_uchar)0; + + converted_string[buffer_length] = (UChar)0; OUT: return converted_string; } -char* util_convert_to_UTF8_string(i18n_uchar *sourct_string) +char* util_convert_to_UTF8_string(UChar *source_string) { int buffer_length = 0; - i18n_error_code_e error_from_i18n; + UErrorCode error_from_icu; char *converted_string = NULL; - i18n_ustring_to_UTF8(NULL, 0, &buffer_length, sourct_string, -1, &error_from_i18n); + u_strToUTF8(NULL, 0, &buffer_length, source_string, -1, &error_from_icu); + if (buffer_length == 0) { + _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu)); + goto OUT; + } + /* NOTE: + * Calling u_strToUTF8 with 0 capacity always causes U_BUFFER_OVERFLOW_ERROR. + * When u_strFromUTF8 is succeeded, u_strFromUTF8 doesn't change error_from_icu. + * It means error_from_icu have U_BUFFER_OVERFLOW_ERROR even though there is no problem. + * So, error_from_icu should be reset as U_ZERO_ERROR here */ + error_from_icu = U_ZERO_ERROR; converted_string = malloc((buffer_length + 2) * sizeof(char)); if (converted_string == NULL) { @@ -500,13 +523,14 @@ char* util_convert_to_UTF8_string(i18n_uchar *sourct_string) } /* Convert to UTF8 */ - i18n_ustring_to_UTF8(converted_string, buffer_length + 1, &buffer_length, sourct_string, -1, &error_from_i18n); - if (error_from_i18n != I18N_ERROR_NONE) { - _ERR("i18n_ustring_to_UTF8 returns [%d]", error_from_i18n); + u_strToUTF8(converted_string, buffer_length + 1, &buffer_length, source_string, -1, &error_from_icu); + if (U_FAILURE(error_from_icu)) { + _ERR("error form icu[%d][%s]", error_from_icu, u_errorName(error_from_icu)); free(converted_string); converted_string = NULL; goto OUT; } + converted_string[buffer_length] = '\0'; OUT: diff --git a/src/view/action_menu.c b/src/view/action_menu.c index 3d87e96..9e45319 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -904,6 +904,10 @@ static bool _update_items(struct _priv *priv, struct view_update_data *vdata) } priv->content_type = _get_content_type(mi); + if (priv->content_type >= E_CONTENT_MAX) { + _ERR("content_type[%d] exceeded E_CONTENT_MAX", priv->content_type); + return false; + } _update_menu_area(priv); _update_favorite_area(priv); diff --git a/src/view/base.c b/src/view/base.c index abb826a..b144c79 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -595,6 +595,11 @@ static void _update_recent_view(struct _priv *priv, const char *id) type = _get_layout_type(info); + if (type >= E_LAYOUT_MAX) { + _ERR("type[%d] exceeded E_LAYOUT_MAX", type); + return; + } + _set_current_layout(priv, type); layoutmgr_update_layout(priv->lmgr, g_menu_item[type].layout_id, diff --git a/src/view/mplayer.c b/src/view/mplayer.c index ab5ad4c..e085b72 100644 --- a/src/view/mplayer.c +++ b/src/view/mplayer.c @@ -31,6 +31,8 @@ #include "util/playermgr.h" #include "util/progressbar.h" #include "util/util.h" +#include "data/mediadata.h" + #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) @@ -1130,6 +1132,7 @@ static void _update(void *view_data, int update_type, void *data) { struct _priv *priv; struct view_update_data *vdata; + struct view_update_data temp_update_data; if (!view_data || !data) { _ERR("failed to get view data"); @@ -1137,7 +1140,19 @@ static void _update(void *view_data, int update_type, void *data) } priv = view_data; - vdata = data; + + if (update_type == UPDATE_CONTENT_WITH_MEDIA_ID) { + app_media *am = NULL; + + am = mediadata_get_app_media_by_file_path(data); + temp_update_data.list = eina_list_append(NULL, am); + temp_update_data.index = 0; + temp_update_data.id = NULL; + vdata = &temp_update_data; + update_type = UPDATE_CONTENT; + } else { + vdata = data; + } switch (update_type) { case UPDATE_CONTENT: diff --git a/src/view/viewer.c b/src/view/viewer.c index c6e439e..c31e913 100644 --- a/src/view/viewer.c +++ b/src/view/viewer.c @@ -33,6 +33,7 @@ #include "util/playermgr.h" #include "util/progressbar.h" #include "util/util.h" +#include "data/mediadata.h" #define STYLE_VIEWER_BTN "viewer_btn" #define PART_VIEWER_BTN "control_btn" @@ -1462,6 +1463,7 @@ static void _update(void *view_data, int update_type, void *data) { struct _priv *priv; struct view_update_data *vdata; + struct view_update_data temp_update_data; if (!view_data) { _ERR("failed to get view data"); @@ -1469,7 +1471,18 @@ static void _update(void *view_data, int update_type, void *data) } priv = view_data; - vdata = data; + + if (update_type == UPDATE_CONTENT_WITH_MEDIA_ID) { + app_media *am = NULL; + am = mediadata_get_app_media_by_file_path(data); + temp_update_data.list = eina_list_append(NULL, am); + temp_update_data.index = 0; + temp_update_data.id = NULL; + vdata = &temp_update_data; + update_type = UPDATE_CONTENT; + } else { + vdata = data; + } switch (update_type) { case UPDATE_CONTENT: |