diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2014-08-17 16:44:43 -0500 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-08-17 16:44:43 -0500 |
commit | 8856ccea10f9a33e9e3b70c75dd6720f152743c0 (patch) | |
tree | 4cb1f6569779ceb30e5dd6ed927aed5438cf5226 | |
parent | 16515a970f01dad8005de2d29c813ae06de2a1c5 (diff) | |
download | subsurface-8856ccea10f9a33e9e3b70c75dd6720f152743c0.tar.gz |
Uemis downloader: show the timestamp for dives while downloading
If we can easily decode the start time of the dive that is currently being
parsed (i.e., if the information doesn't happen to straddle a block
boundary) then show that in the dialog's progress bar.
Make the explanatory text before it shorter so there's enough space.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | uemis-downloader.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/uemis-downloader.c b/uemis-downloader.c index 5d8b07c01..608d3c6ea 100644 --- a/uemis-downloader.c +++ b/uemis-downloader.c @@ -340,6 +340,11 @@ static bool next_file(int max) return true; } +/* try and do a quick decode - without trying to get to fancy in case the data + * straddles a block boundary... + * we are parsing something that looks like this: + * object_id{int{2{date{ts{2011-04-05T12:38:04{duration{float{12.000... + */ static char *first_object_id_val(char *buf) { char *object, *bufend; @@ -349,7 +354,7 @@ static char *first_object_id_val(char *buf) object = strstr(buf, "object_id"); if (object && object + 14 < bufend) { /* get the value */ - char tmp[10]; + char tmp[36]; char *p = object + 14; char *t = tmp; @@ -362,6 +367,18 @@ static char *first_object_id_val(char *buf) while (p < bufend && *p != '{' && t < tmp + 9) *t++ = *p++; if (*p == '{') { + /* found the object_id - let's quickly look for the date */ + if (strncmp(p, "{date{ts{", 9) == 0 && strstr(p, "{duration{") != NULL) { + /* cool - that was easy */ + *t++ = ','; + *t++ = ' '; + /* skip the 9 characters we just found and take the date, ignoring the seconds + * and replace the silly 'T' in the middle with a space */ + strncpy(t, p + 9, 16); + if (*(t + 10) == 'T') + *(t + 10) = ' '; + t += 16; + } *t = '\0'; return strdup(tmp); } @@ -378,9 +395,9 @@ static void show_progress(char *buf, const char *what) if (val) { /* let the user know what we are working on */ #if UEMIS_DEBUG & 2 - fprintf(debugfile, "reading %s %s\n", what, val); + fprintf(stderr, "reading %s %s %s\n", what, val, buf); #endif - uemis_info(translate("gettextFromC", "Reading %s %s"), what, val); + uemis_info(translate("gettextFromC", "%s %s"), what, val); free(val); } } @@ -421,11 +438,11 @@ static bool uemis_get_answer(const char *path, char *request, int n_param_in, answer_in_mbuf = true; str_append_with_delim(sb, ""); if (!strcmp(request, "getDivelogs")) - what = translate("gettextFromC", "divelog entry id"); + what = translate("gettextFromC", "divelog #"); else if (!strcmp(request, "getDivespot")) - what = translate("gettextFromC", "divespot data id"); + what = translate("gettextFromC", "divespot #"); else if (!strcmp(request, "getDive")) - what = translate("gettextFromC", "more data dive id"); + what = translate("gettextFromC", "details for #"); } str_append_with_delim(sb, ""); file_length = strlen(sb); |