Commit ba2a2d286a0ca4e75e6ca24abea6bdf5b383d26c
1 parent
b6fec630
Exists in
master
and in
5 other branches
Melhorando tratamento de timeouts durante a transferência de arquivos.
Showing
2 changed files
with
30 additions
and
15 deletions
Show diff stats
src/pw3270/v3270ft/private.h
... | ... | @@ -143,6 +143,7 @@ |
143 | 143 | |
144 | 144 | struct v3270ft_entry * active; ///< Transferência em andamento. |
145 | 145 | H3270 * session; ///< lib3270 session handle. |
146 | + unsigned long current; ///< Quantidade de bytes recebidos/enviados. | |
146 | 147 | time_t timeout; ///< When the transfer will fail with timeout. |
147 | 148 | |
148 | 149 | GtkEntry * info[PROGRESS_FIELD_COUNT]; ///< Widgets com informações da transferência atual. | ... | ... |
src/pw3270/v3270ft/v3270ftprogress.c
... | ... | @@ -497,10 +497,17 @@ void v3270ftprogress_update(GtkWidget *widget, unsigned long current, unsigned l |
497 | 497 | gchar * text; |
498 | 498 | v3270ftprogress * dialog = GTK_V3270FTPROGRESS(widget); |
499 | 499 | |
500 | + debug("%s(current=%lu total=%lu kbytes/sec=%u)",__FUNCTION__,current,total,(unsigned int) kbytes_sec); | |
501 | + | |
500 | 502 | if(current) { |
501 | 503 | |
502 | - // Tem dados, atualiza | |
503 | - dialog->timeout = time(NULL) + 10; | |
504 | + if(current != dialog->current) { | |
505 | + | |
506 | + // Recebi um bloco de dados, cancelo timeout por 10 segundos. | |
507 | + dialog->timeout = time(NULL) + 10; | |
508 | + dialog->current = current; | |
509 | + | |
510 | + } | |
504 | 511 | |
505 | 512 | if(total) { |
506 | 513 | |
... | ... | @@ -528,27 +535,34 @@ void v3270ftprogress_update(GtkWidget *widget, unsigned long current, unsigned l |
528 | 535 | |
529 | 536 | gtk_progress_bar_set_fraction(dialog->progress, ((gdouble) current) / ((gdouble) total)); |
530 | 537 | |
531 | - } | |
538 | + text = g_strdup_printf("%lu",total); | |
539 | + gtk_entry_set_text(dialog->info[PROGRESS_FIELD_TOTAL],text); | |
540 | + g_free(text); | |
532 | 541 | |
533 | - } | |
542 | + } else { | |
534 | 543 | |
535 | - debug("%s(current=%lu total=%lu kbytes/sec=%u)",__FUNCTION__,current,total,(unsigned int) kbytes_sec); | |
544 | + gtk_entry_set_text(dialog->info[PROGRESS_FIELD_TOTAL],_("N/A")); | |
536 | 545 | |
537 | - text = g_strdup_printf("%lu",current); | |
538 | - gtk_entry_set_text(dialog->info[PROGRESS_FIELD_CURRENT],text); | |
539 | - g_free(text); | |
546 | + } | |
540 | 547 | |
541 | - if(total) { | |
542 | - text = g_strdup_printf("%lu",total); | |
543 | - gtk_entry_set_text(dialog->info[PROGRESS_FIELD_TOTAL],text); | |
548 | + text = g_strdup_printf("%lu",current); | |
549 | + gtk_entry_set_text(dialog->info[PROGRESS_FIELD_CURRENT],text); | |
544 | 550 | g_free(text); |
551 | + | |
545 | 552 | } else { |
546 | - gtk_entry_set_text(dialog->info[PROGRESS_FIELD_TOTAL],_("N/A")); | |
553 | + | |
554 | + // Não tem posição de arquivo | |
555 | + gtk_entry_set_text(dialog->info[PROGRESS_FIELD_CURRENT],_("N/A")); | |
556 | + | |
547 | 557 | } |
548 | 558 | |
549 | - text = g_strdup_printf("%ld KB/s",(unsigned long) kbytes_sec); | |
550 | - gtk_entry_set_text(dialog->info[PROGRESS_FIELD_SPEED],text); | |
551 | - g_free(text); | |
559 | + if(kbytes_sec > 0) { | |
560 | + text = g_strdup_printf("%ld KB/s",(unsigned long) kbytes_sec); | |
561 | + gtk_entry_set_text(dialog->info[PROGRESS_FIELD_SPEED],text); | |
562 | + g_free(text); | |
563 | + } else { | |
564 | + gtk_entry_set_text(dialog->info[PROGRESS_FIELD_SPEED],""); | |
565 | + } | |
552 | 566 | |
553 | 567 | |
554 | 568 | } | ... | ... |