diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2013-09-24 17:28:35 +0300 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2013-10-15 16:50:20 +0300 |
commit | 0998328a5b7679ff647052e842bc5f11210ad389 (patch) | |
tree | a4c6d82ef629fee0df134a460d374610f29eff60 /tools/obexctl.c | |
parent | 260346d7be2358a532955604d3453f92ecaf6aa0 (diff) | |
download | bluez-0998328a5b7679ff647052e842bc5f11210ad389.tar.gz |
tools/obexctl: Print ETA time when transfer size is known
This prints ETA together with the speed if property Size is set.
Diffstat (limited to 'tools/obexctl.c')
-rw-r--r-- | tools/obexctl.c | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/tools/obexctl.c b/tools/obexctl.c index 88b9c9a74..b943fbb18 100644 --- a/tools/obexctl.c +++ b/tools/obexctl.c @@ -66,6 +66,7 @@ static GDBusProxy *client = NULL; struct transfer_data { uint64_t transferred; + uint64_t size; }; static void connect_handler(DBusConnection *connection, void *user_data) @@ -1349,6 +1350,30 @@ static void session_added(GDBusProxy *proxy) print_proxy(proxy, "Session", COLORED_NEW); } +static void print_transferred(struct transfer_data *data, const char *str, + DBusMessageIter *iter) +{ + dbus_uint64_t valu64; + uint64_t speed; + int seconds, minutes; + + dbus_message_iter_get_basic(iter, &valu64); + speed = valu64 - data->transferred; + data->transferred = valu64; + + if (data->size == 0) { + rl_printf("%sTransferred: %" PRIu64 " (@%" PRIu64 "KB/s)\n", + str, valu64, speed / 1000); + return; + } + + seconds = (data->size - data->transferred) / speed; + minutes = seconds / 60; + seconds %= 60; + rl_printf("%sTransferred: %" PRIu64 " (@%" PRIu64 "KB/s %02u:%02u)\n", + str, valu64, speed / 1000, minutes, seconds); +} + static void transfer_property_changed(GDBusProxy *proxy, const char *name, DBusMessageIter *iter, void *user_data) { @@ -1356,15 +1381,18 @@ static void transfer_property_changed(GDBusProxy *proxy, const char *name, char *str; str = proxy_description(proxy, "Transfer", COLORED_CHG); + if (strcmp(name, "Transferred") == 0) { - dbus_uint64_t valu64; - dbus_message_iter_get_basic(iter, &valu64); - rl_printf("%s%s: %" PRIu64 " (@%" PRIu64 "KB/s)\n", str, name, - valu64, (valu64 - data->transferred) / 1000); - data->transferred = valu64; - } else - print_iter(str, name, iter); + print_transferred(data, str, iter); + goto done; + } + + if (strcmp(name, "Size") == 0) + dbus_message_iter_get_basic(iter, &data->size); + print_iter(str, name, iter); + +done: g_free(str); } @@ -1389,6 +1417,9 @@ static void transfer_added(GDBusProxy *proxy) if (g_dbus_proxy_get_property(proxy, "Transfered", &iter)) dbus_message_iter_get_basic(&iter, &data->transferred); + if (g_dbus_proxy_get_property(proxy, "Size", &iter)) + dbus_message_iter_get_basic(&iter, &data->size); + g_dbus_proxy_set_property_watch(proxy, transfer_property_changed, data); g_dbus_proxy_set_removed_watch(proxy, transfer_destroy, data); } |