X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=clients%2Fgtk2%2Fmain.c;h=5b286f3627fa88ae0d9793b1bd22d02dc4dd9afc;hb=48f7dc10b52a13f7c5dfc11e84b428c4e3e26550;hp=852ee59856b9de752908e2fef643dcbdaab60860;hpb=9ebbbe20f114de564e85fc9562f481fa82299714;p=doldaconnect.git diff --git a/clients/gtk2/main.c b/clients/gtk2/main.c index 852ee59..5b286f3 100644 --- a/clients/gtk2/main.c +++ b/clients/gtk2/main.c @@ -21,10 +21,10 @@ * inability to structure GUI programs properly. Looking at it too * closely may cause ocular hemorrhaging. */ +#include #include #include #include -#include #include #include #include @@ -102,7 +102,7 @@ pid_t pubhubproc = 0; char *pubhubaddr = NULL; char *connectas = NULL; char *dcserver = NULL; -int autoconn = 0; +int autoconn = 1; int srchautoupdate = 0; int cursrch = -1, nextsrch = -1; time_t srcheta; @@ -135,6 +135,7 @@ void cb_main_srhash_activate(GtkWidget *widget, gpointer data); void cb_main_srcopy_activate(GtkWidget *widget, gpointer data); void cb_main_trhash_activate(GtkWidget *widget, gpointer data); void cb_main_trcopy_activate(GtkWidget *widget, gpointer data); +void cb_main_trreset_activate(GtkWidget *widget, gpointer data); void cb_main_trcancel_activate(GtkWidget *widget, gpointer data); gboolean cb_main_srpopup(GtkWidget *widget, GdkEventButton *event, gpointer data); gboolean cb_main_trpopup(GtkWidget *widget, GdkEventButton *event, gpointer data); @@ -363,7 +364,7 @@ void percentagefunc(GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel float val; char buf[64]; - colnum = (int)data; + colnum = GPOINTER_TO_INT(data); gtk_tree_model_get(model, iter, colnum, &val, -1); snprintf(buf, 64, "%.2f%%", (double)(val * 100.0)); g_object_set(rend, "text", buf, NULL); @@ -374,7 +375,7 @@ void transnicebytefunc(GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeMod int colnum, val; char buf[64]; - colnum = (int)data; + colnum = GPOINTER_TO_INT(data); gtk_tree_model_get(model, iter, colnum, &val, -1); if(val >= 0) snprintf(buf, 64, "%'i", val); @@ -389,7 +390,7 @@ void transnicebytefunc2(GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeMo long long val; char buf[64]; - colnum = (int)data; + colnum = GPOINTER_TO_INT(data); gtk_tree_model_get(model, iter, colnum, &val, -1); if(val >= 0) strcpy(buf, bytes2si(val)); @@ -403,7 +404,7 @@ void hidezerofunc(GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *m int colnum, val; char buf[64]; - colnum = (int)data; + colnum = GPOINTER_TO_INT(data); gtk_tree_model_get(model, iter, colnum, &val, -1); if(val > 0) snprintf(buf, 64, "%i", val); @@ -695,6 +696,12 @@ char *inputbox(char *title, char *prompt, char *def, int echo) } int msgbox(int type, int buttons, char *format, ...) +#if defined(__GNUC__) + __attribute__ ((format (printf, 3, 4))) +#endif +; + +int msgbox(int type, int buttons, char *format, ...) { GtkWidget *swnd; va_list args; @@ -1043,7 +1050,7 @@ gint ksupdatecb(gpointer data) } } addtobuf(users, NULL); - ksquerytag = dc_queuecmd(NULL, NULL, L"filtercmd", L"userspeeda", L"%%a", users, NULL); + ksquerytag = dc_queuecmd(NULL, NULL, L"filtercmd", L"userspeeda", L"%a", users, NULL); dc_freewcsarr(users); } return(TRUE); @@ -1067,16 +1074,20 @@ void handleresps(void) { if(!wcscmp(resp->cmdname, L".connect")) { - if(resp->code == 200) + if(resp->code != 201) { - tosbuf = 0x10; /* Minimum cost */ - setsockopt(dcfd, SOL_IP, IP_TOS, &tosbuf, sizeof(tosbuf)); - updatesbar(_("Connected")); - dc_loginasync(connectas, 1, loginconv, logincallback, NULL); - } else { msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("The server refused the connection")); dc_disconnect(); dcdisconnected(); + } else if(dc_checkprotocol(resp, DC_LATEST)) { + msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Server protocol revision mismatch")); + dc_disconnect(); + dcdisconnected(); + } else { + tosbuf = 0x10; /* Minimum delay */ + setsockopt(dcfd, IPPROTO_IP, IP_TOS, &tosbuf, sizeof(tosbuf)); + updatesbar(_("Connected")); + dc_loginasync(connectas, 1, loginconv, logincallback, NULL); } } else if(!wcscmp(resp->cmdname, L".notify")) { dc_uimisc_handlenotify(resp); @@ -1141,7 +1152,7 @@ void handleresps(void) if(ires->argv[0].val.num == nextsrch) { if(cursrch != -1) - dc_queuecmd(NULL, NULL, L"cansrch", L"%%i", cursrch, NULL); + dc_queuecmd(NULL, NULL, L"cansrch", L"%i", cursrch, NULL); cursrch = nextsrch; nextsrch = -1; gtk_widget_set_sensitive(main_realsrch, TRUE); @@ -1361,7 +1372,7 @@ void cb_main_lsres_activate(GtkWidget *widget, gpointer data) void dcconnect(char *host) { - dcfd = dc_connect(host, -1); + dcfd = dc_connect(host); if(dcfd < 0) { msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not connect:\n\n%s"), strerror(errno)); @@ -1428,7 +1439,7 @@ void cb_main_fnaddr_activate(GtkWidget *widget, gpointer data) toks[0] = srealloc(toks[0], (wcslen(toks[0]) + 5) * sizeof(wchar_t)); wcscat(toks[0], L":411"); } - tag = dc_queuecmd(NULL, NULL, L"cnct", L"dc", L"%%a", toks, NULL); + tag = dc_queuecmd(NULL, NULL, L"cnct", L"dc", L"%a", toks, NULL); dc_freewcsarr(toks); if((resp = dc_gettaggedrespsync(tag)) != NULL) { @@ -1460,7 +1471,7 @@ void setpubhubmodel(GtkTreeModel *model, int sortcol, int numcols, int *cols, ch gtk_tree_view_column_set_title(col, names[i]); rnd = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col, rnd, TRUE); - gtk_tree_view_column_set_cell_data_func(col, rnd, transnicebytefunc2, (gpointer)cols[i], NULL); + gtk_tree_view_column_set_cell_data_func(col, rnd, transnicebytefunc2, GINT_TO_POINTER(cols[i]), NULL); } else { col = gtk_tree_view_column_new_with_attributes(names[i], gtk_cell_renderer_text_new(), "text", cols[i], NULL); } @@ -1514,6 +1525,11 @@ int pubhubxmlhandler(int op, char *buf, size_t *len) } break; case PHO_EOF: + if(ctxt == NULL) + { + msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("A hub list could not be read from %s"), pubhubaddr); + break; + } xmlParseChunk(ctxt, NULL, 0, 1); if(!ctxt->wellFormed) { @@ -1578,7 +1594,7 @@ int pubhubxmlhandler(int op, char *buf, size_t *len) } if(i == numcols) { - msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("The hub list at %s did not contain the address to any hubs")); + msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("The hub list at %s did not contain the address to any hubs"), pubhubaddr); break; } model = gtk_list_store_newv(numcols, types); @@ -1853,7 +1869,7 @@ void cb_main_dcnctbtn_clicked(GtkWidget *widget, gpointer data) return; } gtk_tree_model_get(GTK_TREE_MODEL(fnmodel), &iter, 0, &id, -1); - tag = dc_queuecmd(NULL, NULL, L"dcnct", L"%%i", id, NULL); + tag = dc_queuecmd(NULL, NULL, L"dcnct", L"%i", id, NULL); if((resp = dc_gettaggedrespsync(tag)) != NULL) { if(resp->code == 502) @@ -1898,7 +1914,7 @@ void cb_main_phublist_activate(GtkWidget *widget, GtkTreePath *path, GtkTreeView buf = g_realloc(buf, strlen(buf) + 5); strcat(buf, ":411"); } - tag = dc_queuecmd(NULL, NULL, L"cnct", L"dc", L"%%s", buf, NULL); + tag = dc_queuecmd(NULL, NULL, L"cnct", L"dc", L"%s", buf, NULL); g_free(buf); gtk_entry_set_text(GTK_ENTRY(main_fnaddr), ""); if((resp = dc_gettaggedrespsync(tag)) != NULL) @@ -1959,7 +1975,7 @@ void cb_main_chatstr_activate(GtkWidget *widget, gpointer data) return; } buf = gtk_entry_get_text(GTK_ENTRY(main_chatstr)); - tag = dc_queuecmd(NULL, NULL, L"sendchat", L"%%i", curchat, L"1", L"", L"%%s", buf, NULL); + tag = dc_queuecmd(NULL, NULL, L"sendchat", L"%i", curchat, L"1", L"", L"%s", buf, NULL); if((resp = dc_gettaggedrespsync(tag)) != NULL) { if(resp->code == 502) @@ -2049,7 +2065,7 @@ void cb_main_srchbtn_clicked(GtkWidget *widget, gpointer data) msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Please enter a search expression before searching")); return; } - tag = dc_queuecmd(NULL, NULL, L"search", L"all", L"%%a", toks, NULL); + tag = dc_queuecmd(NULL, NULL, L"search", L"all", L"%a", toks, NULL); dc_freewcsarr(toks); if((resp = dc_gettaggedrespsync(tag)) != NULL) { @@ -2084,7 +2100,7 @@ void cb_main_srchcanbtn_clicked(GtkWidget *widget, gpointer data) { if(nextsrch == -1) return; - dc_queuecmd(NULL, NULL, L"cansrch", L"%%i", nextsrch, NULL); + dc_queuecmd(NULL, NULL, L"cansrch", L"%i", nextsrch, NULL); nextsrch = -1; gtk_widget_set_sensitive(main_realsrch, TRUE); gtk_widget_set_sensitive(main_simplesrch, TRUE); @@ -2107,7 +2123,7 @@ gboolean cb_main_trlist_keypress(GtkWidget *widget, GdkEventKey *event, gpointer if(gtk_tree_selection_get_selected(sel, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, &id, -1); - tag = dc_queuecmd(NULL, NULL, L"cancel", L"%%i", id, NULL); + tag = dc_queuecmd(NULL, NULL, L"cancel", L"%i", id, NULL); if((resp = dc_gettaggedrespsync(tag)) != NULL) { if(resp->code == 502) @@ -2171,9 +2187,9 @@ void cb_main_srchres_activate(GtkWidget *widget, GtkTreePath *path, GtkTreeViewC g_free(tfilename); arg = (char *)gtk_entry_get_text(GTK_ENTRY(main_dlarg)); if(*arg) - tag = dc_queuecmd(NULL, NULL, L"download", fnet, L"%%ls", peerid, L"%%ls", filename, L"%%i", size, L"hash", L"%%ls", (hash == NULL)?L"":hash, L"user", L"%%s", arg, NULL); + tag = dc_queuecmd(NULL, NULL, L"download", fnet, L"%ls", peerid, L"%ls", filename, L"%i", size, L"hash", L"%ls", (hash == NULL)?L"":hash, L"user", L"%s", arg, NULL); else - tag = dc_queuecmd(NULL, NULL, L"download", fnet, L"%%ls", peerid, L"%%ls", filename, L"%%i", size, L"hash", L"%%ls", (hash == NULL)?L"":hash, NULL); + tag = dc_queuecmd(NULL, NULL, L"download", fnet, L"%ls", peerid, L"%ls", filename, L"%i", size, L"hash", L"%ls", (hash == NULL)?L"":hash, NULL); free(fnet); free(peerid); free(filename); @@ -2291,7 +2307,7 @@ void cb_main_trcopy_activate(GtkWidget *widget, gpointer data) g_free(hash); } -void cb_main_trcancel_activate(GtkWidget *widget, gpointer data) +void cb_main_trreset_activate(GtkWidget *widget, gpointer data) { GtkTreeSelection *sel; GtkTreeModel *model; @@ -2299,13 +2315,38 @@ void cb_main_trcancel_activate(GtkWidget *widget, gpointer data) int id, tag; struct dc_response *resp; - if(nextsrch != -1) + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(main_downloads)); + if(gtk_tree_selection_get_selected(sel, &model, &iter)) + { + gtk_tree_model_get(model, &iter, 0, &id, -1); + tag = dc_queuecmd(NULL, NULL, L"reset", L"%i", id, NULL); + if((resp = dc_gettaggedrespsync(tag)) != NULL) + { + if(resp->code == 502) + msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("You do not have permission to do that")); + else if(resp->code != 200) + msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("An error occurred while trying to reset (%i)"), resp->code); + dc_freeresp(resp); + } + handleresps(); + } else { return; + } +} + +void cb_main_trcancel_activate(GtkWidget *widget, gpointer data) +{ + GtkTreeSelection *sel; + GtkTreeModel *model; + GtkTreeIter iter; + int id, tag; + struct dc_response *resp; + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(main_downloads)); if(gtk_tree_selection_get_selected(sel, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, &id, -1); - tag = dc_queuecmd(NULL, NULL, L"cancel", L"%%i", id, NULL); + tag = dc_queuecmd(NULL, NULL, L"cancel", L"%i", id, NULL); if((resp = dc_gettaggedrespsync(tag)) != NULL) { if(resp->code == 502) @@ -2411,7 +2452,7 @@ int rmres(char *id) struct dc_response *resp; ret = -1; - tag = dc_queuecmd(NULL, NULL, L"filtercmd", L"rmres", L"%%s", id, NULL); + tag = dc_queuecmd(NULL, NULL, L"filtercmd", L"rmres", L"%s", id, NULL); if((resp = dc_gettaggedrespsync(tag)) != NULL) { if(resp->numlines > 0) @@ -2575,7 +2616,7 @@ int main(int argc, char **argv) dc_init(); signal(SIGCHLD, SIG_IGN); pubhubaddr = sstrdup("http://www.hublist.org/PublicHubList.xml.bz2"); - dcserver = sstrdup("localhost"); + dcserver = sstrdup(""); if((pwent = getpwuid(getuid())) == NULL) { fprintf(stderr, "could not get your passwd data");