1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
2  *
3  * Copyright (C) 2014-2018 Richard Hughes <richard@hughsie.com>
4  * Copyright (C) 2018 Matthias Klumpp <matthias@tenstral.net>
5  *
6  * SPDX-License-Identifier: LGPL-2.1+
7  */
8 
9 #pragma once
10 
11 #if !defined (__APPSTREAM_GLIB_H_INSIDE__) && !defined (AS_COMPILATION)
12 #error "Only <appstream-glib.h> can be included directly."
13 #endif
14 
15 #include <glib-object.h>
16 
17 #include "as-checksum.h"
18 
19 G_BEGIN_DECLS
20 
21 #define AS_TYPE_RELEASE	(as_release_get_type ())
22 G_DECLARE_DERIVABLE_TYPE (AsRelease, as_release, AS, RELEASE, GObject)
23 
24 struct _AsReleaseClass
25 {
26 	GObjectClass		parent_class;
27 	/*< private >*/
28 	void (*_as_reserved1)	(void);
29 	void (*_as_reserved2)	(void);
30 	void (*_as_reserved3)	(void);
31 	void (*_as_reserved4)	(void);
32 	void (*_as_reserved5)	(void);
33 	void (*_as_reserved6)	(void);
34 	void (*_as_reserved7)	(void);
35 	void (*_as_reserved8)	(void);
36 };
37 
38 /**
39  * AsReleaseKind:
40  * @AS_RELEASE_KIND_UNKNOWN:		Unknown release type
41  * @AS_RELEASE_KIND_STABLE:		A stable release
42  * @AS_RELEASE_KIND_DEVELOPMENT:	A development release
43  *
44  * The release size kind.
45  *
46  * Since: 0.7.6
47  **/
48 typedef enum {
49 	AS_RELEASE_KIND_UNKNOWN,		/* Since: 0.7.6 */
50 	AS_RELEASE_KIND_STABLE,			/* Since: 0.7.6 */
51 	AS_RELEASE_KIND_DEVELOPMENT,		/* Since: 0.7.6 */
52 	/*< private >*/
53 	AS_RELEASE_KIND_LAST
54 } AsReleaseKind;
55 
56 /**
57  * AsReleaseState:
58  * @AS_RELEASE_STATE_UNKNOWN:			Unknown state
59  * @AS_RELEASE_STATE_INSTALLED:			Release is installed
60  * @AS_RELEASE_STATE_AVAILABLE:			Release is available
61  *
62  * The release state.
63  **/
64 typedef enum {
65 	AS_RELEASE_STATE_UNKNOWN,		/* Since: 0.5.8 */
66 	AS_RELEASE_STATE_INSTALLED,		/* Since: 0.5.8 */
67 	AS_RELEASE_STATE_AVAILABLE,		/* Since: 0.5.8 */
68 	/*< private >*/
69 	AS_RELEASE_STATE_LAST
70 } AsReleaseState;
71 
72 AsRelease	*as_release_new			(void);
73 gint		 as_release_vercmp		(AsRelease	*rel1,
74 						 AsRelease	*rel2);
75 
76 AsReleaseKind	 as_release_kind_from_string	(const gchar	*kind_str);
77 const gchar	*as_release_kind_to_string	(AsReleaseKind	 kind);
78 AsReleaseState	 as_release_state_from_string	(const gchar	*state);
79 const gchar	*as_release_state_to_string	(AsReleaseState	 state);
80 
81 /* getters */
82 const gchar	*as_release_get_version		(AsRelease	*release);
83 GBytes		*as_release_get_blob		(AsRelease	*release,
84 						 const gchar	*filename);
85 guint64		 as_release_get_timestamp	(AsRelease	*release);
86 guint64		 as_release_get_install_duration(AsRelease	*release);
87 const gchar	*as_release_get_description	(AsRelease	*release,
88 						 const gchar	*locale);
89 GPtrArray	*as_release_get_locations	(AsRelease	*release);
90 const gchar	*as_release_get_location_default (AsRelease	*release);
91 AsChecksum	*as_release_get_checksum_by_fn	(AsRelease	*release,
92 						 const gchar	*fn);
93 AsChecksum	*as_release_get_checksum_by_target (AsRelease	*release,
94 						 AsChecksumTarget target);
95 GPtrArray	*as_release_get_checksums	(AsRelease	*release);
96 AsUrgencyKind	 as_release_get_urgency		(AsRelease	*release);
97 AsReleaseKind	 as_release_get_kind		(AsRelease	*release);
98 AsReleaseState	 as_release_get_state		(AsRelease	*release);
99 guint64		 as_release_get_size		(AsRelease	*release,
100 						 AsSizeKind	 kind);
101 const gchar	*as_release_get_url		(AsRelease	*release,
102 						 AsUrlKind	 url_kind);
103 
104 /* setters */
105 void		 as_release_set_version		(AsRelease	*release,
106 						 const gchar	*version);
107 void		 as_release_set_blob		(AsRelease	*release,
108 						 const gchar	*filename,
109 						 GBytes		*blob);
110 void		 as_release_set_timestamp	(AsRelease	*release,
111 						 guint64	 timestamp);
112 void		 as_release_set_install_duration(AsRelease	*release,
113 						 guint64	 install_duration);
114 void		 as_release_set_description	(AsRelease	*release,
115 						 const gchar	*locale,
116 						 const gchar	*description);
117 void		 as_release_add_location	(AsRelease	*release,
118 						 const gchar	*location);
119 void		 as_release_add_checksum	(AsRelease	*release,
120 						 AsChecksum	*checksum);
121 void		 as_release_set_urgency		(AsRelease	*release,
122 						 AsUrgencyKind	 urgency);
123 void		 as_release_set_kind		(AsRelease	*release,
124 						 AsReleaseKind	 kind);
125 void		 as_release_set_state		(AsRelease	*release,
126 						 AsReleaseState	 state);
127 void		 as_release_set_size		(AsRelease	*release,
128 						 AsSizeKind	 kind,
129 						 guint64	 size);
130 void		 as_release_set_url		(AsRelease	*release,
131 						 AsUrlKind	 url_kind,
132 						 const gchar	*url);
133 
134 G_END_DECLS
135