Hello everybody,

I am currently practicing programming by writing a small music manager in
GTK+ and C. I spent the last two weeks reading Rhymthbox's source code
trying to figure out how to make my music manager software imports the songs
without playing them. Here is what I tried:

void import_media_activated(GtkMenuItem *item, GtkTreeView *treeview) {
  GtkWidget *dialog;
  GSList *fileuris, *filenames;
  GstElement *fakeplay;
  GstTagList *taglist = NULL;
  GstMessage *msg;
  const gchar *tag;
  gint result;

  dialog = gtk_file_chooser_dialog_new("Import File(s)...", NULL,
GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL);

  gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);

  if (result == GTK_RESPONSE_OK) {
    fileuris = gtk_file_chooser_get_uris(GTK_FILE_CHOOSER(dialog));
  }

  while (fileuris != NULL) {
    fakeplay = gst_element_factory_make("playbin", "fakeplay");
    g_object_set(G_OBJECT(fakeplay), "uri", fileuris->data, NULL);
    gst_element_set_state(fakeplay, GST_STATE_PAUSED);

    msg = gst_bus_timed_pop_filtered(GST_ELEMENT_BUS(fakeplay),
GST_CLOCK_TIME_NONE, GST_MESSAGE_TAG);

    gst_message_parse_tag(msg, &taglist);

    gchar* fileuri = (gchar*) fileuris->data;

    insert_tag_on_mb_treeview(taglist, GTK_TREE_VIEW(mb_treeview),
g_filename_from_uri(fileuri, NULL, NULL));

    fileuris = fileuris->next;

    gst_message_unref(msg);
  }

  gtk_widget_destroy(dialog);
  gst_element_set_state(fakeplay, GST_STATE_NULL);
  gst_object_unref(fakeplay);
}

Basically I just created a playbin with each song, set its state to
GST_STATE_PAUSED and then get the GstTagList from the GstMessage of the
playbin.

However, this method is pretty resource-consuming and slow, especially when
I import like 1000+ songs (it crashed).

Therefore, I am just curious to know how the Rhythmbox team imported all the
songs without playing them? In other words, do you guys also set the song's
state to GST_STATE_PAUSED to import them, or do you use another way?

Thank you for reading my message!! I love using Rhythmbox and it really
inspired my small personal software!!

Have a good day!!


Best regards,

Phong Cao
_______________________________________________
rhythmbox-devel mailing list
rhythmbox-devel@gnome.org
http://mail.gnome.org/mailman/listinfo/rhythmbox-devel

Reply via email to