0
|
1 #include <packagekit-glib2/packagekit.h>
|
|
2 #include "packagekit.h"
|
|
3
|
|
4 void process(PkPackage *pkg, struct UpdatesInfo *info)
|
|
5 {
|
|
6 PkInfoEnum e = pk_package_get_info(pkg);
|
|
7 switch (e) {
|
|
8 case PK_INFO_ENUM_LOW:
|
|
9 case PK_INFO_ENUM_ENHANCEMENT:
|
|
10 case PK_INFO_ENUM_NORMAL:
|
|
11 info->normal++;
|
|
12 break;
|
|
13 case PK_INFO_ENUM_BUGFIX:
|
|
14 case PK_INFO_ENUM_IMPORTANT:
|
|
15 case PK_INFO_ENUM_SECURITY:
|
|
16 info->critical++;
|
|
17 break;
|
|
18 default:
|
|
19 break;
|
|
20 }
|
|
21 }
|
|
22
|
|
23 void query_packagekit(struct UpdatesInfo *info)
|
|
24 {
|
|
25 PkClient *client = NULL;
|
|
26 PkResults *res = NULL;
|
|
27 GPtrArray *list = NULL;
|
|
28 GFunc process_func = (GFunc)process;
|
|
29 client = pk_client_new();
|
|
30 res = pk_client_get_updates(client, pk_bitfield_value(PK_FILTER_ENUM_NEWEST), NULL, NULL, NULL, NULL);
|
|
31 if (!res) {
|
|
32 goto out;
|
|
33 }
|
|
34 list = pk_results_get_package_array(res);
|
|
35 if (!list) {
|
|
36 goto out;
|
|
37 }
|
|
38 info->normal = 0;
|
|
39 info->critical = 0;
|
|
40 g_ptr_array_foreach(list, process_func, info);
|
|
41 out:
|
|
42 if (list != NULL)
|
|
43 g_ptr_array_unref(list);
|
|
44 if(res != NULL)
|
|
45 g_object_unref(res);
|
|
46 if(client != NULL)
|
|
47 g_object_unref(client);
|
|
48 }
|