Evas_Object *tv_btn;
Evas_Object *menu_btn[MAX_NUM_MENU];
Evas_Object *grid;
+
+ Eina_List *favorite_list;
};
struct _menu_info {
.mouse_move = _mouse_move_cb
};
+static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ app_media *am;
+ app_media_info *info;
+ char buf[32];
+
+ if (!data)
+ return NULL;
+
+ am = data;
+
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get media info");
+ return NULL;
+ }
+
+ if (!strcmp(part, PART_ELM_TEXT_TITLE))
+ return strdup(info->title);
+ else if (!strcmp(part, PART_ELM_TEXT_ARTIST))
+ return strdup(info->audio->artist);
+ else if (!strcmp(part, PART_ELM_TEXT_ALBUM))
+ return strdup(info->audio->album);
+ else if (!strcmp(part, PART_ELM_TEXT_PLAYTIME)) {
+ if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO)
+ return NULL;
+
+ util_time_string(buf, sizeof(buf),
+ info->video->duration, false);
+ return strdup(buf);
+ }
+
+ return NULL;
+}
+
+static Evas_Object *_grid_content_get(void *data,
+ Evas_Object *obj, const char *part)
+{
+ Evas_Object *content;
+ app_media *am;
+ app_media_info *info;
+ struct color_data bg;
+
+ if (!data)
+ return NULL;
+
+ am = data;
+
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get media info");
+ return NULL;
+ }
+
+ content = NULL;
+ if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) {
+ content = util_add_image(obj, info->thumbnail_path);
+ if (!content)
+ goto err;
+
+ evas_object_show(content);
+ } else if (!strcmp(part, PART_ELM_SWALLOW_VIDEO)) {
+ if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO)
+ return NULL;
+
+ content = util_add_image(obj, IMAGE_THUMBNAIL_PLAY);
+ if (!content)
+ goto err;
+
+ evas_object_show(content);
+ } else if (!strcmp(part, PART_ELM_SWALLOW_TEXTBG)) {
+ content = evas_object_rectangle_add(obj);
+ if (!content)
+ goto err;
+
+ app_contents_get_color(info->title, NULL, &bg);
+ evas_object_color_set(content, bg.r, bg.g, bg.b, bg.a);
+
+ evas_object_show(content);
+ }
+
+ return content;
+
+err:
+ _ERR("failed to create evas object");
+ return NULL;
+}
+
+Elm_Gengrid_Item_Class *_get_grid_item_class(int type)
+{
+ Elm_Gengrid_Item_Class *ic;
+
+ ic = elm_gengrid_item_class_new();
+ if (!ic) {
+ _ERR("failed to create gengrid item class");
+ return NULL;
+ }
+
+ ic->func.text_get = _grid_text_get;
+ ic->func.content_get = _grid_content_get;
+ ic->item_style = content_info[type].style;
+
+ return ic;
+}
+
static bool _check_movie_type(app_media_info *info)
{
return strcmp(info->video->copyright, VIDEO_COPYRIGHT);
return type;
}
+static void _free_favorite_list(Eina_List *list)
+{
+ app_media *am;
+
+ EINA_LIST_FREE(list, am)
+ app_media_destroy(am);
+}
+
+static void _favorite_list_foreach(gpointer data, gpointer user_data)
+{
+ media_info_h media;
+ app_media *am;
+ Eina_List **l;
+ int r;
+ char *id;
+
+ if (!data || !user_data) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ id = (char *)data;
+ l = (Eina_List **)user_data;
+
+ r = media_info_get_media_from_db(id, &media);
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("failed to get media handle");
+ return;
+ }
+
+ am = app_media_create(media);
+ if (!am) {
+ _ERR("failed to create app media");
+ media_info_destroy(media);
+ return;
+ }
+
+ *l = eina_list_append(*l, am);
+}
+
+static Eina_List *_get_favorite_list(int type)
+{
+ GList *id_list;
+ Eina_List *list;
+ int r;
+
+ r = media_content_connect();
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("failed to connect to media content");
+ return NULL;
+ }
+
+ id_list = NULL;
+ if (app_contents_get_favorite_list(type, &id_list)
+ != APP_CONTENTS_ERROR_NONE) {
+ _ERR("failed to get favorite list");
+ return NULL;
+ }
+
+ list = NULL;
+ g_list_foreach(id_list, _favorite_list_foreach, &list);
+
+ app_contents_free_favorite_list(id_list);
+
+ media_content_disconnect();
+
+ return list;
+}
+
static bool _draw_livetv_btn(struct _priv *priv)
{
Evas_Object *btn;
inputmgr_add_callback(btn, ACTION_MENU_BTN, &_handler, priv);
- elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(btn, priv->grid,
+ ELM_FOCUS_DOWN);
priv->menu_btn[i] = btn;
}
static void _update_favorite_area(struct _priv *priv, int type)
{
- /* It will implemented later */
+
+ Elm_Gengrid_Item_Class *ic;
+ Elm_Object_Item *it;
+ Eina_List *favorite_l, *l;
+ app_media *am;
+
+ elm_gengrid_clear(priv->grid);
+
+ elm_gengrid_item_size_set(priv->grid,
+ elm_config_scale_get() * content_info[type].grid_x,
+ elm_config_scale_get() * content_info[type].grid_y);
+
+ ic = _get_grid_item_class(type);
+
+ favorite_l = _get_favorite_list(content_info[type].app_contents_type);
+
+ EINA_LIST_FOREACH(favorite_l, l, am) {
+ it = elm_gengrid_item_append(priv->grid, ic, am, NULL, NULL);
+
+ elm_object_item_data_set(it, am);
+ }
+
+ elm_gengrid_item_class_free(ic);
+
+ priv->favorite_list = favorite_l;
}
static bool _draw_items(struct _priv *priv)
for (i = 0; i < MAX_NUM_MENU; i++)
inputmgr_remove_callback(priv->menu_btn[i], &_handler);
+ if (priv->favorite_list)
+ _free_favorite_list(priv->favorite_list);
+
evas_object_del(priv->base);
free(priv);