diff --git a/data/org.gnome.software.gschema.xml b/data/org.gnome.software.gschema.xml index 2bc33c72f..0c3956454 100644 --- a/data/org.gnome.software.gschema.xml +++ b/data/org.gnome.software.gschema.xml @@ -1,5 +1,13 @@ + + true + + + [] + A list of trusted origin hostnames + If enable-hostname-whitelist + ['GNOME', 'KDE', 'XFCE'] A list of compatible projects diff --git a/po/ru.po b/po/ru.po index 9ed79103c..4645820e6 100644 --- a/po/ru.po +++ b/po/ru.po @@ -25,6 +25,12 @@ msgstr "" "n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 3.6\n" +msgid "This application is distributed through a third party source!" +msgstr "Приложение распространяется из стороннего источника!" + +msgid "Use caution when accessing third party content shown here, as it may contain executable code that hasn't been tested by %s for safety, stability, or quality." +msgstr "Будьте осторожны при использовании сторонних материалов: такие материалы могут содержать исполняемый код, который не был протестирован разработчиками %s на предмет безопасности, стабильности или качества." + # перевод по аналогии с ubuntu software - центр приложений ubuntu #: data/metainfo/org.gnome.Software.metainfo.xml.in:7 src/gs-shell.ui:35 #: src/org.gnome.Software.desktop.in:3 diff --git a/src/gs-details-page.c b/src/gs-details-page.c index a77d6532b..0fc8fdee3 100644 --- a/src/gs-details-page.c +++ b/src/gs-details-page.c @@ -135,6 +135,8 @@ struct _GsDetailsPage GtkWidget *button_update; GtkWidget *button_remove; GsProgressButton *button_cancel; + GtkWidget *infobar_details_untrusted; + GtkWidget *infobar_details_label_untrusted; GtkWidget *infobar_details_eol; GtkWidget *label_eol; GtkWidget *infobar_details_problems_label; @@ -1304,6 +1306,27 @@ gs_details_page_refresh_all (GsDetailsPage *self) const gchar *tmp; g_autoptr(GPtrArray) version_history = NULL; gboolean link_rows_visible; + gboolean show_untrusted_card = FALSE; + + tmp = gs_app_get_origin_hostname(self->app); + if (g_settings_get_boolean(self->settings, "enable-hostname-whitelist") && gs_app_get_bundle_kind(self->app) != AS_BUNDLE_KIND_PACKAGE) { + if (tmp != NULL && tmp[0] != '\0') { + if (!g_strv_contains((const gchar * const*) g_settings_get_strv(self->settings, "hostname-whitelist"), tmp)) { + show_untrusted_card = TRUE; + } + } else { + show_untrusted_card = TRUE; + } + } + + gtk_label_set_label( + GTK_LABEL(self->infobar_details_label_untrusted), + g_strdup_printf( + _("Use caution when accessing third party content shown here, as it may contain executable code that hasn't been tested by %s for safety, stability, or quality."), + g_get_os_info(G_OS_INFO_KEY_NAME) + ) + ); + gtk_widget_set_visible(self->infobar_details_untrusted, show_untrusted_card); /* change widgets */ tmp = gs_app_get_name (self->app); @@ -2780,6 +2803,8 @@ gs_details_page_class_init (GsDetailsPageClass *klass) gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_update); gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_remove); gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, button_cancel); + gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_untrusted); + gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_label_untrusted); gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_eol); gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, label_eol); gtk_widget_class_bind_template_child (widget_class, GsDetailsPage, infobar_details_problems_label); diff --git a/src/gs-details-page.ui b/src/gs-details-page.ui index 460ea926c..3d98bc9fc 100644 --- a/src/gs-details-page.ui +++ b/src/gs-details-page.ui @@ -390,6 +390,44 @@ + + + + 860 + + 576 + 12 + 12 + + + vertical + + + center + This application is distributed through a third party source! + True + + + + + + center + + True + + + + + + + + 860 diff --git a/src/style.css b/src/style.css index 9790ceed2..f36e9c5a4 100644 --- a/src/style.css +++ b/src/style.css @@ -202,6 +202,11 @@ clamp.large .category-tile:not(.category-tile-iconless) { color: @window_fg_color; } +.card.error { + background-color: mix(@error_bg_color, @window_bg_color, .7); + color: @window_fg_color; +} + .infobox { border-spacing: 6px; padding: 12px;