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