diff options
Diffstat (limited to 'src/view/base.c')
-rw-r--r-- | src/view/base.c | 76 |
1 files changed, 69 insertions, 7 deletions
diff --git a/src/view/base.c b/src/view/base.c index c1fee10..aba56f2 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -30,6 +30,7 @@ #include "view.h" #include "data/datamgr.h" #include "util/ctxpopup.h" +#include "util/usb.h" #include "util/util.h" #define TITLE_TEXT "Media Hub" @@ -49,13 +50,6 @@ enum _object_type { BASE_SOURCE_BTN }; -enum _layout_type { - E_LAYOUT_MOVIE = 0, - E_LAYOUT_GALLERY, - E_LAYOUT_MUSIC, - E_LAYOUT_MAX -}; - struct _priv { Evas_Object *win; Evas_Object *base; @@ -67,6 +61,9 @@ struct _priv { Evas_Object *notify; + struct usb *usb_h; + media_content_noti_h noti_h; + struct ctxpopup *cpopup; layoutmgr *lmgr; @@ -781,8 +778,60 @@ static void _show_toast_favorite(struct _priv *priv, const char *id) priv->notify = notify; } +static void _media_db_updated_cb(media_content_error_e error, + int pid, + media_content_db_update_item_type_e update_item, + media_content_db_update_type_e update_type, + media_content_type_e media_type, + char *uuid, + char *path, + char *mime_type, + void *user_data) +{ + struct view_update_data vdata; + struct _priv *priv; + int i; + + if (!user_data) { + _ERR("invalid argument"); + return; + } + + priv = user_data; + + vdata.index = priv->current_layout; + + for (i = 0; i < E_LAYOUT_MAX; i++) { + layoutmgr_update_layout(priv->lmgr, + g_menu_item[i].layout_id, + UPDATE_SOURCE_CONTENT, &vdata); + } + + media_content_remove_db_updated_cb(priv->noti_h); +} + +static void _usb_changed_cb(void *data, int state) +{ + media_content_noti_h noti_h; + struct _priv *priv; + int r; + + if (!data) + return; + + priv = data; + + r = media_content_add_db_updated_cb(_media_db_updated_cb, + priv, ¬i_h); + if (r != MEDIA_CONTENT_ERROR_NONE) + _ERR("failed to add db updated cb: %d", r); + + priv->noti_h = noti_h; +} + static Evas_Object *_create(Evas_Object *win, void *data) { + struct usb *usb_h; struct layout_data ldata; struct _priv *priv; Evas_Object *base; @@ -816,6 +865,17 @@ static Evas_Object *_create(Evas_Object *win, void *data) priv->win = win; priv->base = base; + usb_h = usb_create(); + if (!usb_h) { + _ERR("failed to create usb"); + free(priv); + return NULL; + } + + usb_set_callback(usb_h, _usb_changed_cb, priv); + + priv->usb_h = usb_h; + if (!_draw_items(priv)) { _ERR("failed to draw items"); free(priv); @@ -968,6 +1028,8 @@ static void _destroy(void *view_data) priv = view_data; + usb_destroy(priv->usb_h); + for (i = 0; i < E_LAYOUT_MAX; i++) inputmgr_remove_callback(priv->menu_btn[i], &handler); |