static void start_next_batch (RBTrackTransferQueue *queue) { int count; int total; gboolean can_continue; GtkWidget *dialog; GtkWindow *window; GList *profiles = NULL; char *message; if (queue->priv->current != NULL) { return; } queue->priv->current = RB_TRACK_TRANSFER_BATCH (g_queue_pop_head (queue->priv->batch_queue)); g_object_notify (G_OBJECT (queue), "batch"); if (queue->priv->current == NULL) { /* indicate to anyone watching that we're not doing anything */ g_signal_emit (queue, signals[TRANSFER_PROGRESS], 0, 0, 0, 0.0, 0); return; } queue->priv->overwrite_decision = OVERWRITE_PROMPT; g_object_get (queue->priv->current, "total-entries", &total, NULL); count = 0; can_continue = rb_track_transfer_batch_check_profiles (queue->priv->current, &profiles, &count); if (can_continue && count == 0 && profiles == NULL) { /* no problems, go ahead */ actually_start_batch (queue); return; } if (profiles == NULL) { const char *str; str = ngettext ("%d file cannot be transferred as it must be converted into " "a format supported by the target device but no suitable " "encoding profiles are available", "%d files cannot be transferred as they must be converted into " "a format supported by the target device but no suitable " "encoding profiles are available", count); message = g_strdup_printf (str, count); } else { GPtrArray *descriptions; GstEncodingTarget *target; char *plugins; gboolean is_library; descriptions = get_missing_plugin_strings (profiles, TRUE); plugins = g_strjoinv ("\n", (char **)descriptions->pdata); /* this is a tiny bit hackish */ g_object_get (queue->priv->current, "encoding-target", &target, NULL); is_library = (g_strcmp0 (gst_encoding_target_get_name (target), "rhythmbox-library") == 0); gst_encoding_target_unref (target); if (is_library) { /* XXX should provide the option of picking a different format? */ message = g_strdup_printf (_("Additional software is required to encode media " "in your preferred format:\n%s"), plugins); } else { const char *str; str = ngettext ("Additional software is required to convert %d file " "into a format supported by the target device:\n%s", "Additional software is required to convert %d files " "into a format supported by the target device:\n%s", count); message = g_strdup_printf (str, count, plugins); } g_free (plugins); g_ptr_array_free (descriptions, TRUE); } g_object_get (queue->priv->shell, "window", &window, NULL); dialog = rb_alert_dialog_new (window, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_NONE, _("Unable to transfer tracks"), message); g_object_unref (window); g_free (message); gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel the transfer"), GTK_RESPONSE_CANCEL); if (can_continue) { gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Skip these files"), GTK_RESPONSE_YES); } if (profiles != NULL && gst_install_plugins_supported ()) { gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Install"), GTK_RESPONSE_ACCEPT); } rb_alert_dialog_set_details_label (RB_ALERT_DIALOG (dialog), NULL); g_signal_connect_object (dialog, "response", G_CALLBACK (missing_encoder_response_cb), queue, 0); gtk_widget_show (dialog); if (profiles != NULL) { g_list_free (profiles); } }
static void test_individual_target (GstEncodingTarget * target) { GstEncodingProfile *prof; GstCaps *tmpcaps, *tmpcaps2; GstEncodingProfile *sprof1, *sprof2; GST_DEBUG ("Checking the target properties"); /* Check the target */ fail_unless_equals_string (gst_encoding_target_get_name (target), "myponytarget"); fail_unless_equals_string (gst_encoding_target_get_category (target), "herding"); fail_unless_equals_string (gst_encoding_target_get_description (target), "Plenty of pony glitter profiles"); GST_DEBUG ("Checking the number of profiles the target contains"); fail_unless_equals_int (g_list_length ((GList *) gst_encoding_target_get_profiles (target)), 1); GST_DEBUG ("Checking the container profile"); /* Check the profile */ prof = (GstEncodingProfile *) gst_encoding_target_get_profiles (target)->data; tmpcaps = gst_caps_from_string ("animal/x-pony"); CHECK_PROFILE (prof, "pony", "I don't want a description !", tmpcaps, NULL, 0, 0); gst_caps_unref (tmpcaps); GST_DEBUG ("Checking the container profile has 2 stream profiles"); /* Check the stream profiles */ fail_unless_equals_int (g_list_length ((GList *) gst_encoding_container_profile_get_profiles ( (GstEncodingContainerProfile *) prof)), 2); GST_DEBUG ("Checking the container profile has the audio/x-pony-song stream"); tmpcaps = gst_caps_from_string ("audio/x-pony-song,pretty=True"); tmpcaps2 = gst_caps_from_string ("audio/x-raw-int,channels=1,rate=44100"); sprof1 = (GstEncodingProfile *) gst_encoding_audio_profile_new (tmpcaps, NULL, tmpcaps2, 1); fail_unless (gst_encoding_container_profile_contains_profile ( (GstEncodingContainerProfile *) prof, sprof1)); gst_encoding_profile_unref (sprof1); gst_caps_unref (tmpcaps); gst_caps_unref (tmpcaps2); GST_DEBUG ("Checking the container profile has the video//x-glitter stream"); tmpcaps = gst_caps_from_string ("video/x-glitter,sparkling=True"); tmpcaps2 = gst_caps_from_string ("video/x-raw-yuv,width=640,height=480,framerate=15/1"); sprof2 = (GstEncodingProfile *) gst_encoding_video_profile_new (tmpcaps, "seriously glittery", tmpcaps2, 0); gst_encoding_video_profile_set_variableframerate ((GstEncodingVideoProfile *) sprof2, TRUE); fail_unless (gst_encoding_container_profile_contains_profile ( (GstEncodingContainerProfile *) prof, sprof2)); gst_encoding_profile_unref (sprof2); gst_caps_unref (tmpcaps); gst_caps_unref (tmpcaps2); }