static void ide_omni_bar__build_manager__build_started (IdeOmniBar *self, IdeBuildPipeline *build_pipeline, IdeBuildManager *build_manager) { g_assert (IDE_IS_OMNI_BAR (self)); g_assert (IDE_IS_BUILD_PIPELINE (build_pipeline)); g_assert (IDE_IS_BUILD_MANAGER (build_manager)); self->did_build = TRUE; self->seen_count = 0; self->message_handler = g_signal_connect_object (build_pipeline, "notify::message", G_CALLBACK (ide_omni_bar_notify_message), self, G_CONNECT_SWAPPED); gtk_revealer_set_reveal_child (self->popover_details_revealer, TRUE); gtk_label_set_label (self->popover_build_result_label, _("Building")); gtk_label_set_attributes (self->popover_build_result_label, NULL); dzl_gtk_widget_remove_style_class (GTK_WIDGET (self->popover_build_result_label), "error"); dzl_gtk_widget_remove_style_class (GTK_WIDGET (self->popover_build_result_label), "success"); dzl_gtk_widget_add_style_class (GTK_WIDGET (self), "building"); }
static void ide_omni_bar_notify_message (IdeOmniBar *self, GParamSpec *pspec, IdeBuildPipeline *pipeline) { g_autofree gchar *message = NULL; g_assert (IDE_IS_OMNI_BAR (self)); g_assert (IDE_IS_BUILD_PIPELINE (pipeline)); message = ide_build_pipeline_get_message (pipeline); gtk_label_set_label (self->popover_build_message, message); gtk_label_set_label (self->build_result_mode_label, message); }
static void ide_omni_bar__build_manager__build_finished (IdeOmniBar *self, IdeBuildPipeline *build_pipeline, IdeBuildManager *build_manager) { g_assert (IDE_IS_OMNI_BAR (self)); g_assert (IDE_IS_BUILD_PIPELINE (build_pipeline)); g_assert (IDE_IS_BUILD_MANAGER (build_manager)); gtk_label_set_label (self->popover_build_message, NULL); dzl_clear_signal_handler (build_pipeline, &self->message_handler); gtk_label_set_label (self->popover_build_result_label, _("Success")); dzl_gtk_widget_add_style_class (GTK_WIDGET (self->popover_build_result_label), "success"); dzl_gtk_widget_remove_style_class (GTK_WIDGET (self), "building"); }
static void gbp_flatpak_dependency_updater_update_async (IdeDependencyUpdater *updater, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GbpFlatpakDependencyUpdater *self = (GbpFlatpakDependencyUpdater *)updater; GbpFlatpakDownloadStage *stage = NULL; g_autoptr(GTask) task = NULL; IdeBuildPipeline *pipeline; IdeBuildManager *manager; IdeContext *context; g_assert (GBP_IS_FLATPAK_DEPENDENCY_UPDATER (self)); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); task = g_task_new (self, cancellable, callback, user_data); g_task_set_source_tag (task, gbp_flatpak_dependency_updater_update_async); g_task_set_priority (task, G_PRIORITY_LOW); context = ide_object_get_context (IDE_OBJECT (self)); g_assert (IDE_IS_CONTEXT (context)); manager = ide_context_get_build_manager (context); g_assert (IDE_IS_BUILD_MANAGER (manager)); pipeline = ide_build_manager_get_pipeline (manager); g_assert (!pipeline || IDE_IS_BUILD_PIPELINE (pipeline)); if (pipeline == NULL) { g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED, "Cannot update flatpak dependencies until build pipeline is initialized"); return; } /* Find the downloads stage and tell it to download updates one time */ ide_build_pipeline_foreach_stage (pipeline, find_download_stage_cb, &stage); if (stage == NULL) { /* Synthesize success if they weren't using flatpak. */ g_task_return_boolean (task, TRUE); return; } gbp_flatpak_download_stage_force_update (stage); /* Ensure downloads and everything past it is invalidated */ ide_build_pipeline_invalidate_phase (pipeline, IDE_BUILD_PHASE_DOWNLOADS); /* Start building all the way up to the project configure so that * the user knows if the updates broke their configuration or anything. */ ide_build_manager_rebuild_async (manager, IDE_BUILD_PHASE_CONFIGURE, NULL, gbp_flatpak_dependency_updater_update_cb, g_steal_pointer (&task)); }
static void gbp_flatpak_download_stage_query (IdeBuildStage *stage, IdeBuildPipeline *pipeline, GCancellable *cancellable) { GbpFlatpakDownloadStage *self = (GbpFlatpakDownloadStage *)stage; IdeConfiguration *config; GNetworkMonitor *monitor; g_autofree gchar *staging_dir = NULL; g_autofree gchar *manifest_path = NULL; g_autofree gchar *stop_at_option = NULL; const gchar *src_dir; const gchar *primary_module; g_assert (GBP_IS_FLATPAK_DOWNLOAD_STAGE (self)); g_assert (IDE_IS_BUILD_PIPELINE (pipeline)); g_assert (!cancellable || G_IS_CANCELLABLE (cancellable)); config = ide_build_pipeline_get_configuration (pipeline); if (!GBP_IS_FLATPAK_CONFIGURATION (config)) { ide_build_stage_set_completed (stage, TRUE); return; } if (self->invalid) { g_autoptr(IdeSubprocessLauncher) launcher = NULL; primary_module = gbp_flatpak_configuration_get_primary_module (GBP_FLATPAK_CONFIGURATION (config)); manifest_path = gbp_flatpak_configuration_get_manifest_path (GBP_FLATPAK_CONFIGURATION (config)); staging_dir = gbp_flatpak_get_staging_dir (config); src_dir = ide_build_pipeline_get_srcdir (pipeline); launcher = ide_subprocess_launcher_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE | G_SUBPROCESS_FLAGS_STDERR_PIPE); ide_subprocess_launcher_set_run_on_host (launcher, TRUE); ide_subprocess_launcher_set_clear_env (launcher, FALSE); ide_subprocess_launcher_set_cwd (launcher, src_dir); ide_subprocess_launcher_push_argv (launcher, "flatpak-builder"); ide_subprocess_launcher_push_argv (launcher, "--ccache"); ide_subprocess_launcher_push_argv (launcher, "--force-clean"); if (!dzl_str_empty0 (self->state_dir)) { ide_subprocess_launcher_push_argv (launcher, "--state-dir"); ide_subprocess_launcher_push_argv (launcher, self->state_dir); } ide_subprocess_launcher_push_argv (launcher, "--download-only"); if (!self->force_update) ide_subprocess_launcher_push_argv (launcher, "--disable-updates"); stop_at_option = g_strdup_printf ("--stop-at=%s", primary_module); ide_subprocess_launcher_push_argv (launcher, stop_at_option); ide_subprocess_launcher_push_argv (launcher, staging_dir); ide_subprocess_launcher_push_argv (launcher, manifest_path); ide_build_stage_launcher_set_launcher (IDE_BUILD_STAGE_LAUNCHER (self), launcher); ide_build_stage_set_completed (stage, FALSE); self->invalid = FALSE; self->force_update = FALSE; } /* Ignore downloads if there is no connection */ monitor = g_network_monitor_get_default (); if (!g_network_monitor_get_network_available (monitor)) { ide_build_stage_log (stage, IDE_BUILD_LOG_STDOUT, _("Network is not available, skipping downloads"), -1); ide_build_stage_set_completed (stage, TRUE); } }