From 6f0f7d1b40a8fa8d46a2d6f4317600001cdbbb18 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:57:27 +0200 Subject: Adding upstream version 43.5. Signed-off-by: Daniel Baumann --- src/gs-vendor.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/gs-vendor.c (limited to 'src/gs-vendor.c') diff --git a/src/gs-vendor.c b/src/gs-vendor.c new file mode 100644 index 0000000..bc4bc27 --- /dev/null +++ b/src/gs-vendor.c @@ -0,0 +1,127 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + * vi:set noexpandtab tabstop=8 shiftwidth=8: + * + * Copyright (C) 2008 Richard Hughes + * Copyright (C) 2015 Kalev Lember + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include "config.h" + +#include "gs-vendor.h" + +struct _GsVendor +{ + GObject parent_instance; + + GKeyFile *file; +}; + +G_DEFINE_TYPE (GsVendor, gs_vendor, G_TYPE_OBJECT) + +#ifdef HAVE_PACKAGEKIT +static const gchar * +gs_vendor_type_to_string (GsVendorUrlType type) +{ + if (type == GS_VENDOR_URL_TYPE_CODEC) + return "CodecUrl"; + if (type == GS_VENDOR_URL_TYPE_FONT) + return "FontUrl"; + if (type == GS_VENDOR_URL_TYPE_MIME) + return "MimeUrl"; + if (type == GS_VENDOR_URL_TYPE_HARDWARE) + return "HardwareUrl"; + return "DefaultUrl"; +} +#endif + +gchar * +gs_vendor_get_not_found_url (GsVendor *vendor, GsVendorUrlType type) +{ +#ifdef HAVE_PACKAGEKIT + const gchar *key; + gchar *url = NULL; + + /* get data */ + key = gs_vendor_type_to_string (type); + url = g_key_file_get_string (vendor->file, "PackagesNotFound", key, NULL); + + /* none is a special value */ + if (g_strcmp0 (url, "none") == 0) { + g_free (url); + url = NULL; + } + + /* got a valid URL */ + if (url != NULL) + goto out; + + /* default has no fallback */ + if (type == GS_VENDOR_URL_TYPE_DEFAULT) + goto out; + + /* get fallback data */ + g_debug ("using fallback"); + key = gs_vendor_type_to_string (GS_VENDOR_URL_TYPE_DEFAULT); + url = g_key_file_get_string (vendor->file, "PackagesNotFound", key, NULL); + + /* none is a special value */ + if (g_strcmp0 (url, "none") == 0) { + g_free (url); + url = NULL; + } +out: + g_debug ("url=%s", url); + return url; +#else + return NULL; +#endif +} + +static void +gs_vendor_init (GsVendor *vendor) +{ +#ifdef HAVE_PACKAGEKIT + g_autoptr(GError) local_error = NULL; + const gchar *fn = "/etc/PackageKit/Vendor.conf"; + gboolean ret; + + vendor->file = g_key_file_new (); + ret = g_key_file_load_from_file (vendor->file, fn, G_KEY_FILE_NONE, &local_error); + if (!ret && local_error && !g_error_matches (local_error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) + g_warning ("Failed to read '%s': %s", fn, local_error->message); +#endif +} + +static void +gs_vendor_finalize (GObject *object) +{ + GsVendor *vendor = GS_VENDOR (object); + + if (vendor->file != NULL) + g_key_file_free (vendor->file); + + G_OBJECT_CLASS (gs_vendor_parent_class)->finalize (object); +} + +static void +gs_vendor_class_init (GsVendorClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + object_class->finalize = gs_vendor_finalize; +} + +/** + * gs_vendor_new: + * + * Return value: a new GsVendor object. + **/ +GsVendor * +gs_vendor_new (void) +{ + GsVendor *vendor; + vendor = g_object_new (GS_TYPE_VENDOR, NULL); + return GS_VENDOR (vendor); +} + -- cgit v1.2.3