rendered paste bodystatic gboolean
mtp_playlist_from_playlist_source (GtkTreeModel *model, RBStaticPlaylistSource *playlist,
RBMtpSource *source)
{
LIBMTP_playlist_t *pl = LIBMTP_new_playlist_t();
RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source);
GList *ids = NULL;
GList *tmp;
pl->playlist_id = (uint32_t) g_object_get_data (G_OBJECT (playlist), "mtp-playlist-id");
g_object_get (G_OBJECT (playlist), "name", &pl->name, NULL);
rb_debug ("Updating playlist from source %s with id %d",pl->name, pl->playlist_id);
gtk_tree_model_foreach (GTK_TREE_MODEL (model),
(GtkTreeModelForeachFunc) add_playlist_entry_to_mtp_playlist, &ids);
if (ids == NULL) {
return FALSE;
rb_debug ("Null list");
}
rb_debug ("GList length %d", g_list_length(ids));
if (g_list_length (ids) < 1) {
rb_debug ("No tracks in list... error!");
return FALSE;
}
rb_debug (" done iterating...");
pl->no_tracks = (uint32_t) g_list_length (ids);
rb_debug ("space for array");
pl->tracks = (uint32_t *) malloc (sizeof (uint32_t) * pl->no_tracks);
rb_debug("Put tracks in array");
int i = 0;
for (tmp = g_list_first (ids); tmp != NULL; tmp = tmp->next) {
//tracks[i] = (uint32_t) malloc (sizeof (uint32_t));
pl->tracks[i] = (uint32_t) GPOINTER_TO_INT (tmp->data);
rb_debug (" * track %d", pl->tracks[i]);
i++;
}
rb_debug ("Done making track list for playlist %d", pl->playlist_id);
//pl->tracks = tracks;
if (priv->device_playlists == NULL) {
pl->next = NULL;
} else {
rb_debug ("Finding next playlist");
LIBMTP_playlist_t *list;
list = priv->device_playlists;
rb_debug ("Global data ok");
while (list != NULL) {
if (list->playlist_id == pl->playlist_id) {
rb_debug ("Found the playlist to update");
pl->next = list->next;
if (LIBMTP_Update_Playlist (priv->device, pl) != 0) {
rb_debug ("Couldn't update playlist");
LIBMTP_Dump_Errorstack(priv->device);
LIBMTP_Clear_Errorstack(priv->device);
return FALSE;
} else {
rb_debug ("Successfully updated playlist");
}
}
list = list->next;
}
}
return TRUE;
}