#define MEDIAHUB_WIN_TITLE "Media Hub"
+#define PARAM_MEDIA_ID "media_id"
+#define PARAM_SENDER_ID "sender_id"
+
+#define SENDER_FAVORITE "Favorite"
+
SET_TAG(PACKAGE)
struct _appdata {
static void _app_control(app_control_h app_control, void *data)
{
struct _appdata *ad;
+ char *media_id;
+ char *sender_id;
+ int r;
if (!data) {
_ERR("failed to get data");
if (ad->win)
elm_win_activate(ad->win);
- viewmgr_push_view(VIEW_BASE);
+ r = app_control_get_extra_data(app_control, PARAM_MEDIA_ID, &media_id);
+ if (r != APP_CONTROL_ERROR_NONE)
+ media_id = NULL;
+
+ r = app_control_get_extra_data(app_control,
+ PARAM_SENDER_ID, &sender_id);
+ if (r != APP_CONTROL_ERROR_NONE)
+ sender_id = NULL;
+
+ if (media_id && sender_id) {
+ if (!strcmp(sender_id, SENDER_FAVORITE))
+ viewmgr_update_view(VIEW_BASE,
+ UPDATE_FAVORITE, media_id);
+ } else
+ viewmgr_push_view(VIEW_BASE);
+
+ free(media_id);
+ free(sender_id);
}
static void _pause(void *data)
* limitations under the License.
*/
+#include <glib.h>
#include <app.h>
#include <Elementary.h>
+#include <media_content.h>
#include <app_debug.h>
+#include <app_contents.h>
+#include <app_media.h>
#include <inputmgr.h>
#include <viewmgr.h>
#include <layoutmgr.h>
#define TITLE_TEXT "Media Hub"
+#define VIDEO_COPYRIGHT "Unknown"
+
#define MENU_BTN_SIZE 3
#define BOX_PADDING_SIZE 80
layoutmgr *lmgr;
+ Eina_List *favorite_list;
+
int current_layout;
};
.focused = _focused_cb
};
+static bool _check_movie_type(app_media_info *info)
+{
+ return strcmp(info->video->copyright, VIDEO_COPYRIGHT);
+}
+
+static app_media *_get_app_media(const char *id)
+{
+ media_info_h media;
+ app_media *am;
+ int r;
+
+ r = media_info_get_media_from_db(id, &media);
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("failed to get media handle");
+ return NULL;
+ }
+
+ am = app_media_create(media);
+ if (!am) {
+ _ERR("failed to create app media");
+ return NULL;
+ }
+
+ return am;
+}
+
+static int _get_content_type(app_media_info *info)
+{
+ int type;
+
+ type = -1;
+ switch (info->media_type) {
+ case MEDIA_CONTENT_TYPE_IMAGE:
+ type = CONTENTS_GALLERY;
+ break;
+ case MEDIA_CONTENT_TYPE_VIDEO:
+ if (_check_movie_type(info))
+ type = CONTENTS_MOVIE;
+ else
+ type = CONTENTS_GALLERY;
+ break;
+ case MEDIA_CONTENT_TYPE_MUSIC:
+ type = CONTENTS_MUSIC;
+ break;
+ default:
+ break;
+ }
+
+ return type;
+}
+
+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 void _free_favorite_list(Eina_List *list)
+{
+ app_media *am;
+
+ EINA_LIST_FREE(list, am)
+ app_media_destroy(am);
+}
+
+static Eina_List *_get_favorite_list(int type)
+{
+ GList *id_list;
+ Eina_List *list;
+
+ 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);
+
+ return list;
+}
+
+static int _get_media_index(Eina_List *list, const char *id)
+{
+ Eina_List *l;
+ app_media *am;
+ app_media_info *info;
+ int index;
+
+ index = 0;
+ EINA_LIST_FOREACH(list, l, am) {
+ info = app_media_get_info(am);
+ if (!info)
+ continue;
+
+ if (!strcmp(id, info->media_id))
+ return index;
+
+ index++;
+ }
+
+ return -1;
+}
+
+static void _update_favorite_view(struct _priv *priv, const char *id)
+{
+ app_media *am;
+ app_media_info *info;
+ struct view_update_data vdata;
+ int type;
+ int r;
+
+ r = media_content_connect();
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("failed to connect to media content");
+ return;
+ }
+
+ am = _get_app_media(id);
+ if (!am) {
+ _ERR("failed to get app media");
+ return;
+ }
+
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get app media info");
+ app_media_destroy(am);
+ return;
+ }
+
+ type = _get_content_type(info);
+
+ vdata.list = _get_favorite_list(type);
+ vdata.index = _get_media_index(vdata.list, info->media_id);
+
+ if (type == CONTENTS_MOVIE || type == CONTENTS_GALLERY) {
+ viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_VIEWER);
+ } else if (type == CONTENTS_MUSIC) {
+ viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_MPLAYER);
+ }
+
+ priv->favorite_list = vdata.list;
+
+ app_media_destroy(am);
+
+ media_content_disconnect();
+}
+
static bool _draw_title(struct _priv *priv)
{
if (!priv)
}
priv = view_data;
- vdata = data;
- layoutmgr_update_layout(priv->lmgr,
- g_menu_item[priv->current_layout].layout_id,
- update_type, vdata);
+ switch (update_type) {
+ case UPDATE_FOCUS:
+ case UPDATE_PLAY_INFO:
+ vdata = data;
+
+ layoutmgr_update_layout(priv->lmgr,
+ g_menu_item[priv->current_layout].layout_id,
+ update_type, vdata);
+ break;
+ case UPDATE_FAVORITE:
+ _update_favorite_view(priv, data);
+ break;
+ default:
+ break;
+ }
}
static void _pause(void *view_data)
layoutmgr_destroy(priv->lmgr);
+ if (priv->favorite_list)
+ _free_favorite_list(priv->favorite_list);
+
evas_object_del(priv->base);
free(priv);