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
|