summaryrefslogtreecommitdiffstats
path: root/lib/gs-utils.h
blob: 855e9845a60d90c2dd4d9a8186c316042cb807f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
 * vi:set noexpandtab tabstop=8 shiftwidth=8:
 *
 * Copyright (C) 2013-2016 Richard Hughes <richard@hughsie.com>
 * Copyright (C) 2018 Kalev Lember <klember@redhat.com>
 *
 * SPDX-License-Identifier: GPL-2.0+
 */

#pragma once

#include <gio/gdesktopappinfo.h>
#include <gtk/gtk.h>

#include "gs-app.h"

G_BEGIN_DECLS

/**
 * GsUtilsCacheFlags:
 * @GS_UTILS_CACHE_FLAG_NONE:		No flags set
 * @GS_UTILS_CACHE_FLAG_WRITEABLE:	A writable directory is required
 * @GS_UTILS_CACHE_FLAG_USE_HASH:	Prefix a hash to the filename
 * @GS_UTILS_CACHE_FLAG_ENSURE_EMPTY:	Clear existing cached items
 * @GS_UTILS_CACHE_FLAG_CREATE_DIRECTORY:	Create the cache directory (Since: 40)
 *
 * The cache flags.
 **/
typedef enum {
	GS_UTILS_CACHE_FLAG_NONE		= 0,
	GS_UTILS_CACHE_FLAG_WRITEABLE		= 1 << 0,
	GS_UTILS_CACHE_FLAG_USE_HASH		= 1 << 1,
	GS_UTILS_CACHE_FLAG_ENSURE_EMPTY	= 1 << 2,
	GS_UTILS_CACHE_FLAG_CREATE_DIRECTORY	= 1 << 3,
	GS_UTILS_CACHE_FLAG_LAST  /*< skip >*/
} GsUtilsCacheFlags;

guint64		 gs_utils_get_file_age		(GFile		*file);
gchar		*gs_utils_get_content_type	(GFile		*file,
						 GCancellable	*cancellable,
						 GError		**error);
gboolean	 gs_utils_symlink		(const gchar	*target,
						 const gchar	*linkpath,
						 GError		**error);
gboolean	 gs_utils_unlink		(const gchar	*filename,
						 GError		**error);
gboolean	 gs_mkdir_parent		(const gchar	*path,
						 GError		**error);
gchar		*gs_utils_get_cache_filename	(const gchar	*kind,
						 const gchar	*resource,
						 GsUtilsCacheFlags flags,
						 GError		**error);
gchar		*gs_utils_get_user_hash		(GError		**error);
GPermission	*gs_utils_get_permission	(const gchar	*id,
						 GCancellable	*cancellable,
						 GError		**error);
void		 gs_utils_get_permission_async	(const gchar		*id,
						 GCancellable		*cancellable,
						 GAsyncReadyCallback	 callback,
						 gpointer		 user_data);
GPermission	*gs_utils_get_permission_finish	(GAsyncResult	*result,
						 GError		**error);
gboolean	 gs_utils_strv_fnmatch		(gchar		**strv,
						 const gchar	*str);
gchar           *gs_utils_sort_key		(const gchar    *str);
gint             gs_utils_sort_strcmp		(const gchar    *str1,
						 const gchar	*str2);
GDesktopAppInfo *gs_utils_get_desktop_app_info	(const gchar	*id);
gboolean	 gs_utils_rmtree		(const gchar	*directory,
						 GError		**error);
gint		 gs_utils_get_wilson_rating	(guint64	 star1,
						 guint64	 star2,
						 guint64	 star3,
						 guint64	 star4,
						 guint64	 star5);
void		 gs_utils_error_add_app_id	(GError		**error,
						 GsApp		*app);
void		 gs_utils_error_add_origin_id	(GError		**error,
						 GsApp		*origin);
gchar		*gs_utils_error_strip_app_id	(GError		*error);
gchar		*gs_utils_error_strip_origin_id	(GError		*error);
gboolean	 gs_utils_error_convert_gio	(GError		**perror);
gboolean	 gs_utils_error_convert_gresolver (GError	**perror);
gboolean	 gs_utils_error_convert_gdbus	(GError		**perror);
gboolean	 gs_utils_error_convert_gdk_pixbuf(GError	**perror);
gboolean	 gs_utils_error_convert_appstream (GError	**perror);

gchar		*gs_utils_get_url_scheme	(const gchar	*url);
gchar		*gs_utils_get_url_path		(const gchar	*url);
const gchar	*gs_user_agent			(void);
void		 gs_utils_append_key_value	(GString	*str,
						 gsize		 align_len,
						 const gchar	*key,
						 const gchar	*value);
guint		 gs_utils_get_memory_total	(void);
gboolean	 gs_utils_parse_evr		(const gchar	 *evr,
						 gchar		**out_epoch,
						 gchar		**out_version,
						 gchar		**out_release);
void		 gs_utils_set_online_updates_timestamp (GSettings *settings);

gchar		*gs_utils_unique_id_compat_convert	(const gchar	*data_id);

gchar		*gs_utils_build_unique_id	(AsComponentScope scope,
						 AsBundleKind bundle_kind,
						 const gchar *origin,
						 const gchar *cid,
						 const gchar *branch);

void		 gs_utils_pixbuf_blur		(GdkPixbuf	*src,
						 guint		radius,
						 guint		iterations);

/**
 * GsFileSizeIncludeFunc:
 * @filename: file name to check
 * @file_kind: the file kind, one of #GFileTest enums
 * @user_data: a user data passed to the gs_utils_get_file_size()
 *
 * Check whether include the @filename in the size calculation.
 * The @filename is a relative path to the file name passed to
 * the #GsFileSizeIncludeFunc.
 *
 * Returns: Whether to include the @filename in the size calculation
 *
 * Since: 41
 **/
typedef gboolean (*GsFileSizeIncludeFunc)	(const gchar		*filename,
						 GFileTest		 file_kind,
						 gpointer		 user_data);

guint64		 gs_utils_get_file_size		(const gchar		*filename,
						 GsFileSizeIncludeFunc	 include_func,
						 gpointer		 user_data,
						 GCancellable		*cancellable);
gchar *		 gs_utils_get_file_etag		(GFile			*file,
						 GDateTime		**last_modified_date_out,
						 GCancellable		*cancellable);
gboolean	 gs_utils_set_file_etag		(GFile			*file,
						 const gchar		*etag,
						 GCancellable		*cancellable);

gchar		*gs_utils_get_upgrade_background (const gchar		*version);

gint		 gs_utils_app_sort_name		(GsApp			*app1,
						 GsApp			*app2,
						 gpointer		 user_data);
gint		 gs_utils_app_sort_match_value	(GsApp			*app1,
						 GsApp			*app2,
						 gpointer		 user_data);
gint		 gs_utils_app_sort_priority	(GsApp			*app1,
						 GsApp			*app2,
						 gpointer		 user_data);

G_END_DECLS