diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index f440bec..d5eba39 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
struct pending_list_items *p;
char *change_path;
+ uint64_t change_uid;
struct avrcp_player_cb *cb;
void *user_data;
player->change_path = NULL;
}
- media_player_change_folder_complete(mp, player->path, ret);
+ media_player_change_folder_complete(mp, player->path,
+ player->change_uid, ret);
+
+ player->change_uid = 0;
return FALSE;
}
session = player->sessions->data;
set_ct_player(session, player);
player->change_path = g_strdup(path);
+ player->change_uid = uid;
direction = g_str_has_prefix(path, player->path) ? 0x01 : 0x00;
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index e499e67..048f98f 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
dbus_message_iter_close_container(array, &entry);
}
-void media_player_change_folder_complete(struct media_player *mp,
- const char *path, int ret)
-{
- struct media_folder *folder = mp->scope;
- DBusMessage *reply;
-
- if (folder == NULL || folder->msg == NULL)
- return;
-
- if (ret < 0) {
- reply = btd_error_failed(folder->msg, strerror(-ret));
- goto done;
- }
-
- media_player_set_folder(mp, path, ret);
-
- reply = g_dbus_create_reply(folder->msg, DBUS_TYPE_INVALID);
-
-done:
- g_dbus_send_message(btd_get_dbus_connection(), reply);
- dbus_message_unref(folder->msg);
- folder->msg = NULL;
-}
-
void media_player_list_complete(struct media_player *mp, GSList *items,
int err)
{
return media_player_change_scope(mp, folder);
}
+static struct media_folder *
+media_player_find_folder_by_uid(struct media_player *mp, uint64_t uid)
+{
+ struct media_folder *folder = mp->scope;
+ struct media_folder *parent = folder->parent;
+ GSList *l;
+
+ if (parent && parent->item->uid == uid)
+ return parent;
+
+ for (l = folder->subfolders; l; l = l->next) {
+ struct media_folder *folder = l->data;
+
+ if (folder->item->uid == uid)
+ return folder;
+ }
+
+ return NULL;
+}
+
+static void media_player_set_folder_by_uid(struct media_player *mp,
+ uint64_t uid, uint32_t number_of_items)
+{
+ struct media_folder *folder;
+
+ DBG("uid %" PRIu64 " number of items %u", uid, number_of_items);
+
+ folder = media_player_find_folder_by_uid(mp, uid);
+ if (folder == NULL) {
+ error("Unknown folder: %" PRIu64, uid);
+ return;
+ }
+
+ folder->number_of_items = number_of_items;
+
+ media_player_set_scope(mp, folder);
+}
+
+void media_player_change_folder_complete(struct media_player *mp,
+ const char *path, uint64_t uid,
+ int ret)
+{
+ struct media_folder *folder = mp->scope;
+ DBusMessage *reply;
+
+ if (folder == NULL || folder->msg == NULL)
+ return;
+
+ if (ret < 0) {
+ reply = btd_error_failed(folder->msg, strerror(-ret));
+ goto done;
+ }
+
+ media_player_set_folder_by_uid(mp, uid, ret);
+
+ reply = g_dbus_create_reply(folder->msg, DBUS_TYPE_INVALID);
+
+done:
+ g_dbus_send_message(btd_get_dbus_connection(), reply);
+ dbus_message_unref(folder->msg);
+ folder->msg = NULL;
+}
+
void media_player_destroy(struct media_player *mp)
{
DBG("%s", mp->path);
return media_folder_create_item(mp, mp->scope, name, type, uid);
}
-static struct media_folder *
-media_player_find_folder_by_uid(struct media_player *mp, uint64_t uid)
-{
- struct media_folder *folder = mp->scope;
- GSList *l;
-
- for (l = folder->subfolders; l; l = l->next) {
- struct media_folder *folder = l->data;
-
- if (folder->item->uid == uid)
- return folder;
- }
-
- return NULL;
-}
-
struct media_item *media_player_create_folder(struct media_player *mp,
const char *name,
player_folder_type_t type,
diff --git a/profiles/audio/player.h b/profiles/audio/player.h
index a7c7d2a..536394c 100644
--- a/profiles/audio/player.h
+++ b/profiles/audio/player.h
void media_player_list_complete(struct media_player *mp, GSList *items,
int err);
void media_player_change_folder_complete(struct media_player *player,
- const char *path, int ret);
+ const char *path, uint64_t uid,
+ int ret);
void media_player_search_complete(struct media_player *mp, int ret);
void media_player_total_items_complete(struct media_player *mp,
uint32_t num_of_items);