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