1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- 2 * 3 * Copyright (C) 2014 Richard Hughes <richard@hughsie.com> 4 * 5 * SPDX-License-Identifier: LGPL-2.1+ 6 */ 7 8 #pragma once 9 10 #include <glib-object.h> 11 #include <gmodule.h> 12 #include <gio/gio.h> 13 #include <appstream-glib.h> 14 15 #include "asb-app.h" 16 #include "asb-context.h" 17 #include "asb-package.h" 18 #include "asb-utils.h" 19 20 G_BEGIN_DECLS 21 22 typedef struct AsbPluginPrivate AsbPluginPrivate; 23 typedef struct AsbPlugin AsbPlugin; 24 25 struct AsbPlugin { 26 GModule *module; 27 gboolean enabled; 28 gchar *name; 29 AsbPluginPrivate *priv; 30 AsbContext *ctx; 31 }; 32 33 typedef enum { 34 ASB_PLUGIN_ERROR_FAILED, 35 ASB_PLUGIN_ERROR_NOT_SUPPORTED, 36 ASB_PLUGIN_ERROR_IGNORE, 37 ASB_PLUGIN_ERROR_LAST 38 } AsbPluginError; 39 40 /* helpers */ 41 #define ASB_PLUGIN_ERROR 1 42 #define ASB_PLUGIN_GET_PRIVATE(x) g_new0 (x,1) 43 #define ASB_PLUGIN(x) ((AsbPlugin *) x); 44 45 typedef const gchar *(*AsbPluginGetNameFunc) (void); 46 typedef void (*AsbPluginFunc) (AsbPlugin *plugin); 47 typedef void (*AsbPluginGetGlobsFunc) (AsbPlugin *plugin, 48 GPtrArray *array); 49 typedef void (*AsbPluginMergeFunc) (AsbPlugin *plugin, 50 GList *apps); 51 typedef gboolean (*AsbPluginCheckFilenameFunc) (AsbPlugin *plugin, 52 const gchar *filename); 53 typedef GList *(*AsbPluginProcessFunc) (AsbPlugin *plugin, 54 AsbPackage *pkg, 55 const gchar *tmp_dir, 56 GError **error); 57 typedef gboolean (*AsbPluginProcessAppFunc) (AsbPlugin *plugin, 58 AsbPackage *pkg, 59 AsbApp *app, 60 const gchar *tmpdir, 61 GError **error); 62 63 const gchar *asb_plugin_get_name (void); 64 void asb_plugin_initialize (AsbPlugin *plugin); 65 void asb_plugin_destroy (AsbPlugin *plugin); 66 GList *asb_plugin_process (AsbPlugin *plugin, 67 AsbPackage *pkg, 68 const gchar *tmpdir, 69 GError **error); 70 void asb_plugin_add_globs (AsbPlugin *plugin, 71 GPtrArray *globs); 72 void asb_plugin_merge (AsbPlugin *plugin, 73 GList *list); 74 gboolean asb_plugin_process_app (AsbPlugin *plugin, 75 AsbPackage *pkg, 76 AsbApp *app, 77 const gchar *tmp_dir, 78 GError **error); 79 gboolean asb_plugin_check_filename (AsbPlugin *plugin, 80 const gchar *filename); 81 void asb_plugin_add_app (GList **list, 82 AsApp *app); 83 void asb_plugin_add_glob (GPtrArray *array, 84 const gchar *glob); 85 gboolean asb_plugin_match_glob (const gchar *glob, 86 const gchar *value); 87 88 G_END_DECLS 89