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 #if !defined (__APPSTREAM_GLIB_PRIVATE_H) && !defined (AS_COMPILATION)
11 #error "Only <appstream-glib.h> can be included directly."
12 #endif
13 
14 #include <glib-object.h>
15 
16 #include "as-app.h"
17 #include "as-node-private.h"
18 #include "as-stemmer.h"
19 
20 G_BEGIN_DECLS
21 
22 /**
23  * AsAppProblems:
24  * @AS_APP_PROBLEM_NONE:			No problems detected
25  * @AS_APP_PROBLEM_NO_XML_HEADER:		No XML header found
26  * @AS_APP_PROBLEM_NO_COPYRIGHT_INFO:		No copyright header found
27  * @AS_APP_PROBLEM_DEPRECATED_LICENCE:		Deprecated <license> tag
28  * @AS_APP_PROBLEM_MULTIPLE_ENTRIES:		Multiple <components> defined
29  * @AS_APP_PROBLEM_INTLTOOL_NAME:		<_name> tag detected
30  * @AS_APP_PROBLEM_INTLTOOL_SUMMARY:		<_summary> tag detected
31  * @AS_APP_PROBLEM_INTLTOOL_DESCRIPTION:	<_p>, <_li> tag detected
32  * @AS_APP_PROBLEM_NOT_VALID_UTF8:		Text with invalid UTF-8
33  * @AS_APP_PROBLEM_PREFORMATTED_DESCRIPTION:	Preformatted description found
34  * @AS_APP_PROBLEM_TRANSLATED_ID:		The <id> value was translated
35  * @AS_APP_PROBLEM_TRANSLATED_LICENSE:		The <license> value was translated
36  * @AS_APP_PROBLEM_TRANSLATED_PROJECT_GROUP:	The <project_group> value was translated
37  * @AS_APP_PROBLEM_UPDATECONTACT_FALLBACK:	The file used <updatecontact> without a space
38  * @AS_APP_PROBLEM_INVALID_PROJECT_GROUP:	Invalid project group detected
39  * @AS_APP_PROBLEM_INVALID_XML_TAG:		Invalid XML tag name detected
40  * @AS_APP_PROBLEM_EXPECTED_CHILDREN:		Children tags expected
41  * @AS_APP_PROBLEM_INVALID_KEYWORDS:		One or more keywords was invalid
42  * @AS_APP_PROBLEM_DUPLICATE_RELEASE:		More than one release with the same version
43  * @AS_APP_PROBLEM_DUPLICATE_SCREENSHOT:	More than one screenshot with the same URL
44  * @AS_APP_PROBLEM_DUPLICATE_CONTENT_RATING:	More than one content rating with the same kind
45  * @AS_APP_PROBLEM_DUPLICATE_AGREEMENT:		More than one agreement with the same kind
46  *
47  * The application problems detected when loading.
48  **/
49 typedef enum {
50 	AS_APP_PROBLEM_NONE			= 0,
51 	AS_APP_PROBLEM_NO_XML_HEADER		= 1 << 0,
52 	AS_APP_PROBLEM_NO_COPYRIGHT_INFO	= 1 << 1,
53 	AS_APP_PROBLEM_DEPRECATED_LICENCE	= 1 << 2,
54 	AS_APP_PROBLEM_MULTIPLE_ENTRIES		= 1 << 3,
55 	AS_APP_PROBLEM_INTLTOOL_NAME		= 1 << 4,
56 	AS_APP_PROBLEM_INTLTOOL_SUMMARY		= 1 << 5,
57 	AS_APP_PROBLEM_INTLTOOL_DESCRIPTION	= 1 << 6,
58 	AS_APP_PROBLEM_NOT_VALID_UTF8		= 1 << 7,
59 	AS_APP_PROBLEM_PREFORMATTED_DESCRIPTION	= 1 << 8,
60 	AS_APP_PROBLEM_TRANSLATED_ID		= 1 << 9,
61 	AS_APP_PROBLEM_TRANSLATED_LICENSE	= 1 << 10,
62 	AS_APP_PROBLEM_TRANSLATED_PROJECT_GROUP	= 1 << 11,
63 	AS_APP_PROBLEM_UPDATECONTACT_FALLBACK	= 1 << 12,
64 	AS_APP_PROBLEM_INVALID_PROJECT_GROUP	= 1 << 13,
65 	AS_APP_PROBLEM_INVALID_XML_TAG		= 1 << 14,
66 	AS_APP_PROBLEM_EXPECTED_CHILDREN	= 1 << 15,
67 	AS_APP_PROBLEM_INVALID_KEYWORDS		= 1 << 16,
68 	AS_APP_PROBLEM_DUPLICATE_RELEASE	= 1 << 17,
69 	AS_APP_PROBLEM_DUPLICATE_SCREENSHOT	= 1 << 18,
70 	AS_APP_PROBLEM_DUPLICATE_CONTENT_RATING	= 1 << 19,
71 	AS_APP_PROBLEM_DUPLICATE_AGREEMENT	= 1 << 20,
72 	/*< private >*/
73 	AS_APP_PROBLEM_LAST
74 } AsAppProblems;
75 
76 /* some useful constants */
77 #define AS_APP_ICON_MIN_HEIGHT			32
78 #define AS_APP_ICON_MIN_WIDTH			32
79 
80 /* unique */
81 #define AS_APP_UNIQUE_WILDCARD			"*"
82 
83 AsAppProblems	 as_app_get_problems		(AsApp		*app);
84 guint		 as_app_get_name_size		(AsApp		*app);
85 guint		 as_app_get_comment_size	(AsApp		*app);
86 guint		 as_app_get_description_size	(AsApp		*app);
87 GPtrArray	*as_app_get_search_tokens	(AsApp		*app);
88 AsBundleKind	 as_app_get_bundle_kind		(AsApp		*app);
89 
90 GNode		*as_app_node_insert		(AsApp		*app,
91 						 GNode		*parent,
92 						 AsNodeContext	*ctx);
93 gboolean	 as_app_node_parse		(AsApp		*app,
94 						 GNode		*node,
95 						 AsNodeContext	*ctx,
96 						 GError		**error);
97 gboolean	 as_app_node_parse_dep11	(AsApp		*app,
98 						 GNode		*node,
99 						 AsNodeContext	*ctx,
100 						 GError		**error);
101 gboolean	 as_app_parse_desktop_file	(AsApp		*app,
102 						 const gchar	*filename,
103 						 AsAppParseFlags flags,
104 						 GError		**error);
105 gboolean	 as_app_parse_desktop_data	(AsApp		*app,
106 						 GBytes		*data,
107 						 AsAppParseFlags flags,
108 						 GError		**error);
109 gboolean	 as_app_parse_inf_file		(AsApp		*app,
110 						 const gchar	*filename,
111 						 AsAppParseFlags flags,
112 						 GError		**error);
113 void		 as_app_set_stemmer		(AsApp		*app,
114 						 AsStemmer	*stemmer);
115 void		 as_app_set_search_blacklist	(AsApp		*app,
116 						 GHashTable	*search_blacklist);
117 void		 as_app_set_icon_path_rstr	(AsApp		*app,
118 						 AsRefString	*rstr);
119 void		 as_app_set_origin_rstr		(AsApp		*app,
120 						 AsRefString	*rstr);
121 
122 G_END_DECLS
123