X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=binding%2Fmediaplayer-manager.c;h=62653127a73d879e6446049d09a1337771bc324a;hb=351642ef3d3f57273c7d6d3122235c6c7957162c;hp=d5624e4b62bfe6dbd7a05b66cf4a22d71d425601;hpb=b0f682b1579e520896ccd5492d6666d962a0c226;p=apps%2Fmediaplayer.git diff --git a/binding/mediaplayer-manager.c b/binding/mediaplayer-manager.c index d5624e4..6265312 100644 --- a/binding/mediaplayer-manager.c +++ b/binding/mediaplayer-manager.c @@ -87,17 +87,11 @@ GList* media_lightmediascanner_scan(void) { sqlite3 *conn; sqlite3_stmt *res; - GList *list; + GList *list = NULL; const char *tail; const gchar *db_path; int ret = 0; - list = MediaPlayerManage.list; - - // Returned cached result - if (list) - return list; - db_path = scanner1_get_data_base_path(MediaPlayerManage.lms_proxy); ret = sqlite3_open(db_path, &conn); @@ -123,8 +117,6 @@ GList* media_lightmediascanner_scan(void) list = g_list_append(list, g_strdup_printf("file://%s", path)); } - MediaPlayerManage.list = list; - return list; } @@ -167,19 +159,7 @@ on_interface_proxy_properties_changed (GDBusProxy *proxy, if (list != NULL && g_RegisterCallback.binding_device_added) g_RegisterCallback.binding_device_added(list); - ListUnlock(); -} - -static void -on_device_removed (GDBusProxy *proxy, gpointer user_data) -{ - ListLock(); - - g_list_free(MediaPlayerManage.list); - MediaPlayerManage.list = NULL; - - if (g_RegisterCallback.binding_device_removed) - g_RegisterCallback.binding_device_removed((const char *) user_data); + g_list_free_full(list, g_free); ListUnlock(); } @@ -197,25 +177,11 @@ static int MediaPlayerDBusInit(void) return -1; } - MediaPlayerManage.udisks_proxy = org_freedesktop_udisks_proxy_new_for_bus_sync( - G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, UDISKS_SERVICE, - UDISKS_PATH, NULL, &error); - - if (MediaPlayerManage.udisks_proxy == NULL) { - LOGE("Create UDisks Proxy failed\n"); - return -1; - } - g_signal_connect (MediaPlayerManage.lms_proxy, "g-properties-changed", G_CALLBACK (on_interface_proxy_properties_changed), NULL); - g_signal_connect (MediaPlayerManage.udisks_proxy, - "device-removed", - G_CALLBACK (on_device_removed), - NULL); - return 0; } @@ -235,6 +201,28 @@ static void *media_event_loop_thread(void *unused) return NULL; } +void +unmount_cb (GFileMonitor *mon, + GFile *file, + GFile *other_file, + GFileMonitorEvent event, + gpointer udata) +{ + gchar *path = g_file_get_path(file); + gchar *uri = g_strconcat("file://", path, NULL); + g_free(path); + + ListLock(); + + if (g_RegisterCallback.binding_device_removed && + event == G_FILE_MONITOR_EVENT_DELETED) { + g_RegisterCallback.binding_device_removed(uri); + } + + ListUnlock(); + g_free(uri); +} + /* * Create MediaPlayer Manager Thread * Note: mediaplayer-api should do MediaPlayerManagerInit() before any other @@ -243,9 +231,18 @@ static void *media_event_loop_thread(void *unused) */ int MediaPlayerManagerInit() { pthread_t thread_id; + GFile *file; + GFileMonitor *mon; g_mutex_init(&(MediaPlayerManage.m)); + file = g_file_new_for_path("/media"); + g_assert(file != NULL); + + mon = g_file_monitor (file, G_FILE_MONITOR_NONE, NULL, NULL); + g_assert(mon != NULL); + g_signal_connect (mon, "changed", G_CALLBACK(unmount_cb), NULL); + pthread_create(&thread_id, NULL, media_event_loop_thread, NULL); return 0;