summaryrefslogtreecommitdiff
path: root/tools/obexctl.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2013-09-24 17:28:35 +0300
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2013-10-15 16:50:20 +0300
commit0998328a5b7679ff647052e842bc5f11210ad389 (patch)
treea4c6d82ef629fee0df134a460d374610f29eff60 /tools/obexctl.c
parent260346d7be2358a532955604d3453f92ecaf6aa0 (diff)
downloadbluez-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.c45
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);
}