Allow connecting to any server in dsh.
[doldaconnect.git] / clients / gui-shell / dsh.c
index 41291e9..62cf0e4 100644 (file)
@@ -54,6 +54,7 @@ struct trinfo {
 void updatewrite(void);
 
 int remote = 0;
+char *server;
 GtkStatusIcon *tray;
 pid_t dpid = 0, dcpid = 0;
 int connected = 0;
@@ -200,12 +201,12 @@ void updatetooltip(void)
 {
     struct dc_transfer *tr;
     struct trinfo *tri;
-    int t, i, a, st;
+    int t, i, a, st, bc, bt;
     char *buf;
     size_t bufsize, bufdata;
     
     t = i = a = 0;
-    st = -1;
+    st = bc = bt = -1;
     for(tr = dc_transfers; tr != NULL; tr = tr->next) {
        if(tr->dir != DC_TRNSD_DOWN)
            continue;
@@ -215,20 +216,27 @@ void updatetooltip(void)
            i++;
        else if((tr->state == DC_TRNS_HS) || (tr->state == DC_TRNS_MAIN))
            a++;
-       if((tr->state == DC_TRNS_MAIN) && (tri->speed != -1)) {
-           if(st == -1)
-               st = 0;
-           st += tri->speed;
+       if((tr->state == DC_TRNS_MAIN)) {
+           if(bt == -1)
+               bc = bt = 0;
+           bc += tr->curpos;
+           bt += tr->size;
+           if(tri->speed != -1) {
+               if(st == -1)
+                   st = 0;
+               st += tri->speed;
+           }
        }
     }
     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(st != -1) {
+    if(bt > 0)
+       bprintf(buf, ", %.1f%%", ((double)bc / (double)bt) * 100.0);
+    if(st != -1)
        bprintf(buf, ", %s/s", bytes2si(st));
-    }
     addtobuf(buf, 0);
     gtk_status_icon_set_tooltip(tray, buf);
     free(buf);
@@ -371,7 +379,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);
     }
@@ -536,14 +544,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");