1 #include <glib.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <librepo/librepo.h>
5
6 #define FEDORA_VERSION "19"
7 #define FEDORA_BASEARCH "x86_64"
8
9 static void
log_handler_cb(const gchar * log_domain G_GNUC_UNUSED,GLogLevelFlags log_level G_GNUC_UNUSED,const gchar * message,gpointer user_data G_GNUC_UNUSED)10 log_handler_cb(const gchar *log_domain G_GNUC_UNUSED,
11 GLogLevelFlags log_level G_GNUC_UNUSED,
12 const gchar *message,
13 gpointer user_data G_GNUC_UNUSED)
14 {
15 g_print ("%s\n", message);
16 }
17
18 static int
progress_callback(G_GNUC_UNUSED void * data,double total_to_download,double now_downloaded)19 progress_callback(G_GNUC_UNUSED void *data,
20 double total_to_download,
21 double now_downloaded)
22 {
23 printf("\r%f / %f", total_to_download, now_downloaded);
24 fflush(stdout);
25 return 0;
26 }
27
28 int
main(void)29 main(void)
30 {
31 int rc = EXIT_SUCCESS;
32 GError *tmp_err = NULL;
33
34 // Setup logging (useful for debugging)
35 //g_log_set_handler("librepo", G_LOG_LEVEL_ERROR |
36 // G_LOG_LEVEL_CRITICAL |
37 // G_LOG_LEVEL_DEBUG |
38 // G_LOG_LEVEL_WARNING,
39 // log_handler_cb, NULL);
40
41 // Prepare list of variable substitutions
42 LrUrlVars *urlvars = NULL;
43 urlvars = lr_urlvars_set(urlvars, "releasever", FEDORA_VERSION);
44 urlvars = lr_urlvars_set(urlvars, "basearch", FEDORA_BASEARCH);
45
46 // Download only this metadata
47 char *download_list[] = { "group_gz", "pkgtags", NULL };
48
49 LrHandle *h = lr_handle_init();
50 lr_handle_setopt(h, NULL, LRO_METALINKURL,
51 "https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch");
52 lr_handle_setopt(h, NULL, LRO_REPOTYPE, LR_YUMREPO);
53 lr_handle_setopt(h, NULL, LRO_YUMDLIST, download_list);
54 lr_handle_setopt(h, NULL, LRO_VARSUB, urlvars);
55 lr_handle_setopt(h, NULL, LRO_PROGRESSCB, progress_callback);
56
57 LrResult *r = lr_result_init();
58 gboolean ret = lr_handle_perform(h, r, &tmp_err);
59 printf("\n");
60
61 char *destdir;
62 lr_handle_getinfo(h, NULL, LRI_DESTDIR, &destdir);
63
64 if (ret) {
65 printf("Download successful (Destination dir: %s)\n", destdir);
66 } else {
67 fprintf(stderr, "Error encountered: %s\n", tmp_err->message);
68 g_error_free(tmp_err);
69 rc = EXIT_FAILURE;
70 }
71
72 lr_result_free(r);
73 lr_handle_free(h);
74
75 return rc;
76 }
77