]> git.ipfire.org Git - pakfire.git/blob - src/libpakfire/include/pakfire/progress.h
progress: Implement setting the title as a separate call
[pakfire.git] / src / libpakfire / include / pakfire / progress.h
1 /*#############################################################################
2 # #
3 # Pakfire - The IPFire package management system #
4 # Copyright (C) 2023 Pakfire development team #
5 # #
6 # This program is free software: you can redistribute it and/or modify #
7 # it under the terms of the GNU General Public License as published by #
8 # the Free Software Foundation, either version 3 of the License, or #
9 # (at your option) any later version. #
10 # #
11 # This program is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
15 # #
16 # You should have received a copy of the GNU General Public License #
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
18 # #
19 #############################################################################*/
20
21 #ifndef PAKFIRE_PROGRESS_H
22 #define PAKFIRE_PROGRESS_H
23
24 #include <time.h>
25
26 struct pakfire_progress;
27
28 enum pakfire_progress_flags {
29 PAKFIRE_PROGRESS_NO_PROGRESS = (1 << 0),
30 PAKFIRE_PROGRESS_SHOW_PERCENTAGE = (1 << 1),
31 PAKFIRE_PROGRESS_SHOW_BYTES_TRANSFERRED = (1 << 2),
32 PAKFIRE_PROGRESS_SHOW_COUNTER = (1 << 3),
33 PAKFIRE_PROGRESS_SHOW_ELAPSED_TIME = (1 << 4),
34 PAKFIRE_PROGRESS_SHOW_ETA = (1 << 5),
35 PAKFIRE_PROGRESS_SHOW_TRANSFER_SPEED = (1 << 6),
36 };
37
38 int pakfire_progress_has_flag(struct pakfire_progress* p, int flag);
39
40 /*
41 Callbacks
42 */
43 typedef int (*pakfire_progress_start_callback)
44 (struct pakfire* pakfire, struct pakfire_progress* progress, void* data, unsigned long int value);
45 typedef int (*pakfire_progress_finish_callback)
46 (struct pakfire* pakfire, struct pakfire_progress* progress, void* data);
47 typedef int (*pakfire_progress_update_callback)
48 (struct pakfire* pakfire, struct pakfire_progress* progress, void* data, unsigned long int value);
49 typedef void (*pakfire_progress_free_callback)
50 (struct pakfire* pakfire, struct pakfire_progress* progress, void* data);
51
52 void pakfire_progress_set_callback_data(struct pakfire_progress* p, void* data);
53
54 void pakfire_progress_set_start_callback(
55 struct pakfire_progress* p, pakfire_progress_start_callback callback);
56 void pakfire_progress_set_finish_callback(
57 struct pakfire_progress* p, pakfire_progress_finish_callback callback);
58 void pakfire_progress_set_update_callback(
59 struct pakfire_progress* p, pakfire_progress_update_callback callback);
60 void pakfire_progress_set_free_callback(
61 struct pakfire_progress* p, pakfire_progress_free_callback callback);
62
63 unsigned long int pakfire_progress_get_value(struct pakfire_progress* p);
64 unsigned long int pakfire_progress_get_max_value(struct pakfire_progress* p);
65 const char* pakfire_progress_get_title(struct pakfire_progress* p);
66 double pakfire_progress_get_percentage(struct pakfire_progress* p);
67 time_t pakfire_progress_get_elapsed_time(struct pakfire_progress* p);
68 time_t pakfire_progress_get_eta(struct pakfire_progress* p);
69 double pakfire_progress_get_transfer_speed(struct pakfire_progress* p);
70
71 #ifdef PAKFIRE_PRIVATE
72
73 #include <pakfire/pakfire.h>
74
75 int pakfire_progress_create(struct pakfire_progress** progress,
76 struct pakfire* pakfire, int flags);
77
78 struct pakfire_progress* pakfire_progress_ref(struct pakfire_progress* p);
79 struct pakfire_progress* pakfire_progress_unref(struct pakfire_progress* p);
80
81 int pakfire_progress_start(struct pakfire_progress* p, unsigned long int value);
82 int pakfire_progress_finish(struct pakfire_progress* p);
83 int pakfire_progress_update(struct pakfire_progress* p, unsigned long int value);
84 int pakfire_progress_increment(struct pakfire_progress* p, unsigned long int value);
85
86 int pakfire_progress_set_title(struct pakfire_progress* p, const char* format, ...);
87
88 #endif
89
90 #endif /* PAKFIRE_PROGRESS_H */