X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=clients%2Fgui-shell%2Fdsh.c;h=9aa6a8e854d3d4094f9e7f10a645d40bb8661375;hb=a415902212d50526dbe9b53bb99f40de25a3ce3d;hp=e5310cdbed421e9a1f8b124fc6774e4a215ed09d;hpb=0c095756cfd2f771ecf762ff15220311c0e6fa39;p=doldaconnect.git diff --git a/clients/gui-shell/dsh.c b/clients/gui-shell/dsh.c index e5310cd..9aa6a8e 100644 --- a/clients/gui-shell/dsh.c +++ b/clients/gui-shell/dsh.c @@ -48,12 +48,14 @@ struct trinfo { int ostate; int opos, spos, speed; time_t lastprog; + int warned; double sprog; }; void updatewrite(void); int remote = 0; +char *server; GtkStatusIcon *tray; pid_t dpid = 0, dcpid = 0; int connected = 0; @@ -229,11 +231,11 @@ void updatetooltip(void) } buf = NULL; bufsize = bufdata = 0; - bprintf(buf, "Transfers: %i", t); + bprintf(buf, "%s: %i", _("Transfers"), t); if(t > 0) bprintf(buf, " (%i/%i)", i, a); if(bt > 0) - bprintf(buf, ", %.1f%%", (double)bc / (double)bt); + bprintf(buf, ", %.1f%%", ((double)bc / (double)bt) * 100.0); if(st != -1) bprintf(buf, ", %s/s", bytes2si(st)); addtobuf(buf, 0); @@ -287,11 +289,14 @@ void updatetrinfo(void) if(tri->opos != tr->curpos) { tri->opos = tr->curpos; tri->lastprog = now; + tri->warned = 0; } -#ifdef NOTIFY - if((tr->state = DC_TRNS_MAIN) && (now - tri->lastprog > 600)) { - if(dcpid == 0) +#ifdef HAVE_NOTIFY + if((tr->state = DC_TRNS_MAIN) && (now - tri->lastprog > 600) && !tri->warned) { + if(dcpid == 0) { notify(&trnote, "transfer.error", _("Transfer stalled"), _("The transfer of %ls from %ls has not made progress for 10 minutes"), getfilename(tr->path), tr->peernick); + tri->warned = 1; + } } #endif if((tr->state == DC_TRNS_MAIN) && (dnow - tri->sprog > 10)) { @@ -378,7 +383,7 @@ void updatewrite(void) void connectdc(void) { - if((dcfd = dc_connect(remote?NULL:dc_srv_local)) < 0) { + if((dcfd = dc_connect(server)) < 0) { msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not connect to server: %s"), strerror(errno)); exit(1); } @@ -391,6 +396,7 @@ void startdaemon(void) { char pf[1024]; int pfd[2], i; + sigset_t ss; if(getenv("HOME") != NULL) snprintf(pf, sizeof(pf), "%s/.doldacond.pid", getenv("HOME")); @@ -398,7 +404,11 @@ void startdaemon(void) snprintf(pf, sizeof(pf), "%s/.doldacond.pid", getpwuid(getuid())->pw_dir); if(access(pf, F_OK) || !running(pf)) { pipe(pfd); + sigemptyset(&ss); + sigaddset(&ss, SIGCHLD); + sigprocmask(SIG_BLOCK, &ss, NULL); if((dpid = fork()) == 0) { + sigprocmask(SIG_UNBLOCK, &ss, NULL); dup2(pfd[1], 2); for(i = 3; i < FD_SETSIZE; i++) close(i); @@ -414,6 +424,7 @@ void startdaemon(void) create_start_wnd(); gtk_widget_show(start_wnd); gtk_status_icon_set_tooltip(tray, _("Starting...")); + sigprocmask(SIG_UNBLOCK, &ss, NULL); } else { connectdc(); } @@ -543,14 +554,20 @@ int main(int argc, char **argv) textdomain(PACKAGE); signal(SIGCHLD, sighandler); dc_init(); + server = dc_srv_local; gtk_init(&argc, &argv); #ifdef HAVE_NOTIFY notify_init("Dolda Connect"); #endif - while((c = getopt(argc, argv, "rh")) != -1) { + while((c = getopt(argc, argv, "rhs:")) != -1) { switch(c) { case 'r': remote = 1; + server = NULL; + break; + case 's': + remote = 1; + server = optarg; break; case 'h': printf("usage: doldacond-shell [-hr]\n");