X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmediaplayer-manager.c;h=ca46587abd202ebbe64f86606764799f641d6122;hb=71a36b404ea5e1d8819b85e1d8d5c39b09645ca3;hp=d5624e4b62bfe6dbd7a05b66cf4a22d71d425601;hpb=b0f682b1579e520896ccd5492d6666d962a0c226;p=apps%2Fmediaplayer.git diff --git a/binding/mediaplayer-manager.c b/binding/mediaplayer-manager.c index d5624e4..ca46587 100644 --- a/binding/mediaplayer-manager.c +++ b/binding/mediaplayer-manager.c @@ -83,21 +83,39 @@ void DebugTraceSendMsg(int level, gchar* message) } +GList* media_local_scan(GList *list) +{ + gchar *path = g_strconcat(g_get_home_dir(), "/", "Music", NULL); + gchar *tmp = NULL; + GDir *dir; + + dir = g_dir_open(path, 0, NULL); + if (dir == NULL) + { + LOGE("Cannot open media path %s\n", path); + return list; + } + + while ((tmp = (gchar *) g_dir_read_name(dir)) != NULL) + { + list = g_list_append(list, g_strdup_printf("file://%s/%s", path, tmp)); + } + + g_free(path); + g_dir_close(dir); + + return list; +} + 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,7 +141,7 @@ GList* media_lightmediascanner_scan(void) list = g_list_append(list, g_strdup_printf("file://%s", path)); } - MediaPlayerManage.list = list; + sqlite3_finalize(res); return list; } @@ -167,19 +185,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 +203,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 +227,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 +257,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;