summaryrefslogtreecommitdiff
path: root/src/view/base.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/base.c')
-rw-r--r--src/view/base.c76
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, &noti_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);