2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <Elementary.h>
18 #include <media_content.h>
19 #include <app_debug.h>
20 #include <app_contents.h>
21 #include <app_media.h>
28 #include "data/datamgr.h"
29 #include "grid/grid.h"
30 #include "util/util.h"
32 #define STR_GENRE_NAME "Genre"
34 static void _create_thumbnail_completed_cb(media_content_error_e err,
35 const char *path, void *user_data)
45 media_content_connect();
47 am = elm_object_item_data_get(it);
51 elm_gengrid_item_fields_update(it, PART_ELM_SWALLOW_THUMBNAIL,
52 ELM_GENGRID_ITEM_FIELD_CONTENT);
54 media_content_disconnect();
57 static char *_media_text_get(void *data, Evas_Object *obj, const char *part)
67 info = app_media_get_info(am);
69 _ERR("failed to get media info");
73 return strdup(info->title);
76 static Evas_Object *_media_content_get(void *data, Evas_Object *obj,
89 info = app_media_get_info(am);
91 _ERR("failed to get media info");
96 if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) {
97 if (!info->thumbnail_path) {
98 util_create_thumbnail(obj, am,
99 _create_thumbnail_completed_cb);
103 eo = util_add_image(obj, info->thumbnail_path);
105 _ERR("failed to create image object");
108 } else if (!strcmp(part, PART_ELM_SWALLOW_FAVORITE)) {
112 eo = util_add_image(obj, IMAGE_THUMBNAIL_FAVORITE);
114 _ERR("failed to create image object");
117 } else if (!strcmp(part, PART_ELM_SWALLOW_TEXTBG)) {
118 eo = evas_object_rectangle_add(obj);
120 _ERR("failed to create rectangle object");
124 app_contents_get_color(info->title, NULL, &bg);
125 evas_object_color_set(eo, bg.r, bg.g, bg.b, bg.a);
129 evas_object_show(eo);
134 static char *_group_text_get(void *data, Evas_Object *obj, const char *part)
136 struct group_info *gi;
145 if (!strcmp(part, PART_ELM_TEXT_TITLE))
146 return strdup(gi->name);
147 else if (!strcmp(part, PART_ELM_TEXT_COUNT)) {
148 cnt = eina_list_count(gi->list);
149 snprintf(buf, sizeof(buf), "%d", cnt);
156 static Evas_Object *_group_content_get(void *data, Evas_Object *obj,
160 struct group_info *gi;
161 struct color_data bg;
169 if (!strcmp(part, PART_ELM_SWALLOW_BG)) {
170 eo = evas_object_rectangle_add(obj);
172 _ERR("failed to create rectangle object");
176 app_contents_get_color(gi->name, &bg, NULL);
177 evas_object_color_set(eo, bg.r, bg.g, bg.b, bg.a);
179 evas_object_show(eo);
185 static Eina_List *_get_name_list(struct datamgr *dmgr)
188 _ERR("invalid argument");
192 return dmgr->ops->get_group(dmgr->handle, E_GROUP_MEDIA_NAME, NULL);
195 static Eina_List *_get_genre_list(struct datamgr *dmgr)
198 struct group_info *gi;
201 _ERR("invalid argument");
205 gi = calloc(1, sizeof(*gi));
207 _ERR("failed to allocate memory");
211 gi->name = STR_GENRE_NAME;
212 gi->list = dmgr->ops->get_group(dmgr->handle,
213 E_GROUP_MEDIA_GENRE, NULL);
216 list = eina_list_append(list, gi);
221 static Eina_List *_get_date_list(struct datamgr *dmgr)
224 _ERR("invalid argument");
228 return dmgr->ops->get_group(dmgr->handle, E_GROUP_MEDIA_DATE, NULL);
231 static void _free_media_list(struct datamgr *dmgr, Eina_List *list)
234 _ERR("invalid argument");
238 dmgr->ops->free_group(list);
241 static void _free_group_list(struct datamgr *dmgr, Eina_List *list)
243 struct group_info *gi;
246 _ERR("invalid argument");
250 EINA_LIST_FREE(list, gi) {
251 dmgr->ops->free_group(gi->list);
256 static void _get_media_info(struct datamgr *dmgr, Eina_List *list,
261 cnt = dmgr->ops->get_count(dmgr->handle, E_FILE_VIDEO);
263 _ERR("failed to get media count");
267 snprintf(str, size, "%d Movies", cnt);
270 static void _get_genre_info(struct datamgr *dmgr, Eina_List *list,
273 struct group_info *gi;
276 gi = eina_list_nth(list, 0);
277 cnt = eina_list_count(gi->list);
279 snprintf(str, size, "%d Genre", cnt);
282 static void _key_down_cb(void *data, Elm_Object_Item *it,
283 Evas_Event_Key_Down *ev)
285 struct view_update_data vdata;
286 struct datamgr *dmgr;
290 _ERR("invalid argument");
296 if (!strcmp(ev->keyname, KEY_MENU) ||
297 !strcmp(ev->keyname, KEY_CONTEXT_MENU)) {
298 am = elm_object_item_data_get(it);
300 _ERR("failed to get app media");
304 vdata.list = dmgr->ops->get_list(dmgr->handle,
306 vdata.index = util_get_media_index(vdata.list, am);
308 viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
309 viewmgr_show_view(VIEW_ACTION_MENU);
313 static void _media_selected_cb(void *data, Elm_Object_Item *it)
315 struct view_update_data vdata;
316 struct datamgr *dmgr;
320 _ERR("invalid argument");
326 am = elm_object_item_data_get(it);
328 _ERR("failed to get app media");
332 vdata.list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL);
333 vdata.index = util_get_media_index(vdata.list, am);
334 vdata.id = VIEW_BASE;
336 viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
337 viewmgr_push_view(VIEW_VIEWER);
340 static void _genre_selected_cb(void *data, Elm_Object_Item *it)
342 struct view_update_data vdata;
343 struct group_info *gi;
346 _ERR("invalid argument");
350 gi = elm_object_item_data_get(it);
352 _ERR("failed to get group info");
356 vdata.list = gi->list;
357 vdata.index = E_DETAIL_MOVIE_GENRE;
360 viewmgr_update_view(VIEW_DETAIL, UPDATE_CONTENT, &vdata);
361 viewmgr_push_view(VIEW_DETAIL);
364 static struct grid_class _gclass[] = {
366 .item_style = STYLE_MOVIE_NAME,
367 .text_get = _media_text_get,
368 .content_get = _media_content_get
371 .item_style = STYLE_MOVIE_GENRE,
372 .text_get = _group_text_get,
373 .content_get = _group_content_get
376 .item_style = STYLE_MOVIE_NAME,
377 .text_get = _media_text_get,
378 .content_get = _media_content_get
380 /* Other view mode class will be added later */
383 static struct grid_data _gdata[] = {
385 .item_x = MOVIE_NAME_ITEM_X,
386 .item_y = MOVIE_NAME_ITEM_Y,
387 .item_num = MOVIE_NAME_ITEM_NUM,
388 .grid_padding = MOVIE_NAME_GRID_PADDING,
389 .gclass = &_gclass[E_MOVIE_NAME],
390 .get_item_list = _get_name_list,
391 .free_item_list = _free_media_list,
392 .get_item_info = _get_media_info,
393 .key_down_cb = _key_down_cb,
394 .selected_cb = _media_selected_cb
397 .item_x = MOVIE_GENRE_ITEM_X,
398 .item_y = MOVIE_GENRE_ITEM_Y,
399 .item_num = MOVIE_GENRE_ITEM_NUM,
400 .grid_padding = MOVIE_GENRE_GRID_PADDING,
401 .gclass = &_gclass[E_MOVIE_GENRE],
402 .get_item_list = _get_genre_list,
403 .free_item_list = _free_group_list,
404 .get_item_info = _get_genre_info,
405 .selected_cb = _genre_selected_cb
408 .item_x = MOVIE_NAME_ITEM_X,
409 .item_y = MOVIE_NAME_ITEM_Y,
410 .item_num = MOVIE_NAME_ITEM_NUM,
411 .grid_padding = MOVIE_NAME_GRID_PADDING,
412 .gclass = &_gclass[E_MOVIE_DATE],
413 .get_item_list = _get_date_list,
414 .free_item_list = _free_media_list,
415 .get_item_info = _get_media_info,
416 .key_down_cb = _key_down_cb,
417 .selected_cb = _media_selected_cb
419 /* Other view mode data will be added later */
422 struct grid_data *get_movie_grid_data(int type)
424 if (type < 0 || type >= E_MOVIE_MAX) {
425 _ERR("invalid argument");
429 return &_gdata[type];