diff options
author | Kim Kibum <kb0929.kim@samsung.com> | 2012-06-08 14:54:16 +0900 |
---|---|---|
committer | Kim Kibum <kb0929.kim@samsung.com> | 2012-06-08 14:54:16 +0900 |
commit | 8b42d4bb33943903b7160bb963bf7e7c6824e9ef (patch) | |
tree | 021a596daee9f7e379b8914aad343a2342528e47 /main/src/control/ivug-parameter.c | |
parent | 7164c202e81bc53033dce636367d92b93265b915 (diff) | |
download | ug-image-viewer-efl-8b42d4bb33943903b7160bb963bf7e7c6824e9ef.tar.gz ug-image-viewer-efl-8b42d4bb33943903b7160bb963bf7e7c6824e9ef.tar.bz2 ug-image-viewer-efl-8b42d4bb33943903b7160bb963bf7e7c6824e9ef.zip |
apply FSL(Flora Software License)
Diffstat (limited to 'main/src/control/ivug-parameter.c')
-rwxr-xr-x | main/src/control/ivug-parameter.c | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/main/src/control/ivug-parameter.c b/main/src/control/ivug-parameter.c new file mode 100755 index 0000000..5717181 --- /dev/null +++ b/main/src/control/ivug-parameter.c @@ -0,0 +1,397 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include <bundle.h> +#include <string.h> + +#include "ivug-common.h" +#include "ivug-debug.h" +#include "ivug-parameter.h" + +//bundle key +#define IVUG_BUNDLE_KEY_VIEW_MODE "View Mode" +#define IVUG_BUNDLE_KEY_PATH "Path" +#define IVUG_BUNDLE_KEY_THUMBNAIL_PATH "Thumb Path" +#define IVUG_BUNDLE_KEY_ALBUM_IDX "Album index" +#define IVUG_BUNDLE_KEY_VIEW_BY "View By" +#define IVUG_BUNDLE_KEY_INDEX "Index" +#define IVUG_BUNDLE_KEY_SORT_BY "Sort By" + +#define IVUG_BUNDLE_KEY_MAX_LONGITUDE "LON_MAX" +#define IVUG_BUNDLE_KEY_MIN_LONGITUDE "LON_MIN" +#define IVUG_BUNDLE_KEY_MAX_LATITUDE "LAT_MAX" +#define IVUG_BUNDLE_KEY_MIN_LATITUDE "LAT_MIN" + +#define IVUG_BUNDLE_KEY_SETAS_TYPE "Setas type" + +#define IVUG_BUNDLE_KEY_MEDIA_TYPE "Media type" + +//default values +#define IVUG_DEFAULT_MODE IVUG_MODE_SINGLE +#define IVUG_DEFAULT_INDEX (-1) + +static ivug_mode +_get_view_mode(ivug_parameter* data, const char* val) +{ + IV_ASSERT(val != NULL); + +#define IVUG_BUNDLE_VALUE_VIEW_MODE_ALBUM "ALBUM" +#define IVUG_BUNDLE_VALUE_VIEW_MODE_NORMAL "NORMAL" +#define IVUG_BUNDLE_VALUE_VIEW_MODE_SINGLE "SINGLE" +#define IVUG_BUNDLE_VALUE_VIEW_MODE_GALLERY "GALLERY" +#define IVUG_BUNDLE_VALUE_VIEW_MODE_CAMERA "CAMERA" +#define IVUG_BUNDLE_VALUE_VIEW_MODE_DISPLAY "DISPLAY" +#define IVUG_BUNDLE_VALUE_VIEW_MODE_SETAS "SETAS" + int len = strlen(val); + + if (strncmp(val, IVUG_BUNDLE_VALUE_VIEW_MODE_NORMAL, len) == 0 + || strncmp(val, IVUG_BUNDLE_VALUE_VIEW_MODE_GALLERY, len) == 0 ) + { + return IVUG_MODE_NORMAL; + } + else if (strncmp(val, IVUG_BUNDLE_VALUE_VIEW_MODE_ALBUM, len) == 0) + { + // Probably, UnUsed. + MSG_IVUG_ERROR("ALBUM is deprecated!!!! plz check"); + printf("bundle key ALBUM is deprecated!!!! plz check\n"); + return IVUG_MODE_NORMAL; + } + else if ( strncmp(val, IVUG_BUNDLE_VALUE_VIEW_MODE_CAMERA, len) == 0) + { + data->start_index = 1; //apply window loading + data->view_by = IVUG_VIEW_BY_FOLDER; // In camera case, All images should be shown in camera folder. + return IVUG_MODE_CAMERA; + } + else if (strncmp(val, IVUG_BUNDLE_VALUE_VIEW_MODE_SINGLE, len) == 0) + { + data->view_by = IVUG_VIEW_BY_FILE; + return IVUG_MODE_SINGLE; + } + else if ( strncmp(val, IVUG_BUNDLE_VALUE_VIEW_MODE_DISPLAY, len) == 0) + { + data->view_by = IVUG_VIEW_BY_FILE; + return IVUG_MODE_DISPLAY; + } + else if(strncmp(val, IVUG_BUNDLE_VALUE_VIEW_MODE_SETAS, len) == 0) + { + data->view_by = IVUG_VIEW_BY_FILE; + return IVUG_MODE_SETAS; + } + + MSG_IVUG_ERROR("Invalid mode : %s", val); + return IVUG_MODE_INVAILD; +} + + +static ivug_view_by +_get_view_by(const char* val) +{ + //bundle value +#define IVUG_BUNDLE_VALUE_VIEW_BY_ALL "All" +#define IVUG_BUNDLE_VALUE_VIEW_BY_FLODER "By Folder" +#define IVUG_BUNDLE_VALUE_VIEW_BY_PLACES "Places" + + IV_ASSERT(val != NULL); + + int len = strlen(val); + + if (strncmp(val, IVUG_BUNDLE_VALUE_VIEW_BY_FLODER, len) == 0 ) + { + return IVUG_VIEW_BY_FOLDER; + } + else if (strncmp(val, IVUG_BUNDLE_VALUE_VIEW_BY_ALL, len) == 0 ) + { + return IVUG_VIEW_BY_ALL; + } + else if (strncmp(val, IVUG_BUNDLE_VALUE_VIEW_BY_PLACES, len) == 0) + { + return IVUG_VIEW_BY_PLACES; + } + + MSG_IVUG_ERROR("Invalid view by : %s", val); + + return IVUG_VIEW_BY_FILE; + +} + + +static ivug_setas_type +_get_setas_type(const char* val) +{ + IV_ASSERT(val != NULL); + +#define IVUG_BUNDLE_VALUE_SETAS_UG_WALLPAPER "Wallpaper" + + int len = strlen(val); + + if (strncmp(val, IVUG_BUNDLE_VALUE_SETAS_UG_WALLPAPER, len) == 0 ) + { + return IVUG_SET_AS_UG_TYPE_WALLPAPER; + } + + MSG_IVUG_ERROR("Invalid setas ug type : %s", val); + return IVUG_SET_AS_UG_TYPE_INVALID; +} + +static ivug_media_type +_get_media_type(const char* val) +{ + IV_ASSERT(val != NULL); +#define IVUG_BUNDLE_VALUE_MEDIA_TYPE_ALL "All" +#define IVUG_BUNDLE_VALUE_MEDIA_TYPE_IMAGE "Image" +#define IVUG_BUNDLE_VALUE_MEDIA_TYPE_VIDEO "Video" + + int len = strlen(val); + + if (strncmp(val, IVUG_BUNDLE_VALUE_MEDIA_TYPE_IMAGE, len) == 0 ) + { + return IVUG_MEDIA_TYPE_IMAGE; + } + else if (strncmp(val, IVUG_BUNDLE_VALUE_MEDIA_TYPE_VIDEO, len) == 0) + { + return IVUG_MEDIA_TYPE_VIDEO; + } + else if(strncmp(val, IVUG_BUNDLE_VALUE_MEDIA_TYPE_ALL, len) == 0) + { + return IVUG_MEDIA_TYPE_ALL; + } + + MSG_IVUG_ERROR("Invalid media type : %s", val); + return IVUG_MEDIA_TYPE_MAX; +} + + + +static void +_bundle_print(const char *key, const char *val, void *data) +{ + MSG_IVUG_HIGH(" %s:%s",key, val); +} + +//parsing bundle +ivug_parameter* +ivug_param_create_from_bundle(bundle* b) +{ + if (b == NULL) + { + MSG_IVUG_WARN("bundle value is NULL"); + return NULL; + } + + int nbundle_cnt = bundle_get_count(b); + + if ( nbundle_cnt == 0 ) + { + MSG_IVUG_WARN("bundle count is %d", nbundle_cnt); + return NULL; + } + + //print key and value. + MSG_IVUG_HIGH("**********************************"); + MSG_IVUG_HIGH(" Bundle Count = %d", nbundle_cnt); + bundle_iterate(b, _bundle_print, NULL); + MSG_IVUG_HIGH("**********************************"); + + //parsing param + ivug_parameter* data = (ivug_parameter*)calloc(1, sizeof(ivug_parameter)); + + if (data == NULL) + { + MSG_IMAGEVIEW_FATAL("Cannot allocate memory"); + return NULL; + } + +// View By + const char* szViewBy = NULL; + + szViewBy = bundle_get_val(b, IVUG_BUNDLE_KEY_VIEW_BY); + if (szViewBy != NULL) + { + MSG_IVUG_HIGH("View By = %s", szViewBy); + + data->view_by = _get_view_by(szViewBy); + } + else + { + MSG_IVUG_ERROR("View By is NULL"); + data->view_by = IVUG_VIEW_BY_INVAILD; + } + +//parse image index at album + const char* val = NULL; + + val = bundle_get_val(b, IVUG_BUNDLE_KEY_INDEX); + if(val) + { + data->start_index = atoi(val); + MSG_IVUG_HIGH("Slide Index = %d", data->start_index); + } + else + { + data->start_index = IVUG_DEFAULT_INDEX; + MSG_IVUG_HIGH("Slide Index is not set. Set as default : %d", data->start_index); + } + +//parse mode + const char* szMode = NULL; + + szMode = bundle_get_val(b, IVUG_BUNDLE_KEY_VIEW_MODE); + + if (szMode != NULL) + { + data->mode = _get_view_mode(data, szMode); + MSG_IVUG_HIGH("View mode is %s(%d)", szMode, data->mode); + } + else + { + data->mode = IVUG_DEFAULT_MODE; + MSG_IVUG_HIGH("View mode is NULL. Set Default(%d)", data->mode); + } + +//parse path + const char* szFilePath = NULL; + + szFilePath = bundle_get_val(b, IVUG_BUNDLE_KEY_PATH); + + if ( szFilePath != NULL ) + { + data->filepath = strdup(szFilePath); + MSG_IVUG_HIGH("Current File = %s", data->filepath); + } + + //parse album id -album id is cluster id of media service + val = bundle_get_val(b, IVUG_BUNDLE_KEY_ALBUM_IDX); + + if(val && data->view_by != IVUG_VIEW_BY_ALL) + { + data->album_id = uuid_getuuid(val); + MSG_IVUG_HIGH("album_uuid is %s", uuid_getchar(data->album_id)); + } + else + { + data->album_id = INVALID_UUID; + MSG_IVUG_WARN("Album index is NULL"); + } + if (data->mode == IVUG_MODE_CAMERA) + { +/* + ********************************** + Bundle Count = 2 + View Mode:CAMERA + Path:/opt/media/Camera shots/IMAGE0021.jpg + ********************************** +*/ + // Get album id from file path. + UUID cluster_id = ivug_get_album_id_from_filepath(data->filepath); + + data->album_id = uuid_assign(cluster_id); + + MSG_IVUG_HIGH("Get Album ID(%s) from file %s", uuid_getchar(data->album_id), data->filepath); + } + +// TODO : Check parameter integrity + val = bundle_get_val(b, IVUG_BUNDLE_KEY_MEDIA_TYPE); + if(val != NULL) + { + data->media_type = _get_media_type(val); + MSG_IVUG_HIGH("Media Type=%s(%d)", val, data->media_type); + } + else + { + MSG_IVUG_WARN("Media type is not specified."); + } + + long long int m = 0; + long int e = 0; + + val = bundle_get_val(b, IVUG_BUNDLE_KEY_MAX_LONGITUDE); + if(val != NULL) + { + eina_convert_atod(val, strlen(val), &m, &e); + data->max_longitude = ldexp((double)m, e); + MSG_IVUG_HIGH("Max Longitude =%f", data->max_longitude); + } + else + { + MSG_IVUG_MED("Max Longitude is not specified."); + } + + val = bundle_get_val(b, IVUG_BUNDLE_KEY_MIN_LONGITUDE); + if(val != NULL) + { + eina_convert_atod(val, strlen(val), &m, &e); + data->min_longitude = ldexp((double)m, e); + MSG_IVUG_HIGH("Min Longitude =%f", data->min_longitude); + } + else + { + MSG_IVUG_MED("Min Longitude is not specified."); + } + + val = bundle_get_val(b, IVUG_BUNDLE_KEY_MAX_LATITUDE); + if(val != NULL) + { + eina_convert_atod(val, strlen(val), &m, &e); + data->max_latitude = ldexp((double)m, e); + MSG_IVUG_HIGH("Max Latitude =%f", data->max_latitude); + } + else + { + MSG_IVUG_MED("Max Latitude is not specified."); + } + + val = bundle_get_val(b, IVUG_BUNDLE_KEY_MIN_LATITUDE); + if(val != NULL) + { + eina_convert_atod(val, strlen(val), &m, &e); + data->min_latitude = ldexp((double)m, e); + MSG_IVUG_HIGH("Min Latitude =%f", data->min_latitude); + } + else + { + MSG_IVUG_MED("Min Latitude is not specified."); + } + + val = bundle_get_val(b, IVUG_BUNDLE_KEY_SETAS_TYPE); + if (val) + { + MSG_IVUG_HIGH("SetAs UG Type=%s", val); + data->setas_type = _get_setas_type(val); + } + + return data; +} + +void +ivug_param_delete(ivug_parameter* data) +{ + IV_ASSERT(data != NULL); + if (data->filepath) + { + free(data->filepath); + data->filepath = NULL; + } + + uuid_free(data->album_id); + + free(data); + + MSG_IVUG_HIGH("Parameter is freed."); + +} + + |