📄 gauthinfo.c
字号:
/***************************************************************************//* This code is part of WWW grabber called pavuk *//* Copyright (c) 1997 - 2001 Stefan Ondrejicka *//* Distributed under GPL 2 or later *//***************************************************************************/#include "config.h"#ifdef GTK_FACE#include <stdio.h>#include <string.h>#include "authinfo.h"#include "gauthinfo.h"#include "gui.h"#include "icons/ok.xpm"#include "icons/cancel.xpm"#include "icons/append.xpm"#include "icons/apply.xpm"#include "icons/clear.xpm"#include "icons/delete.xpm"#include "icons/modify.xpm"#include "icons/save.xpm"#include "icons/load.xpm"static GtkWidget *list;static GtkWidget *topl = NULL;static GtkWidget *w_prot;static GtkWidget *w_host;static GtkWidget *w_user;static GtkWidget *w_pass;static GtkWidget *w_base;static GtkWidget *w_realm;static GtkWidget *w_type[4];static void fill_list(GtkWidget * clist){ dllist *ptr; LOCK_AUTHINFO; ptr = authdata; while(ptr) { authinfo *ai = (authinfo *) ptr->data; char *ad[7]; char pom[10]; char host[100]; ad[0] = prottable[ai->prot].urlid; snprintf(host, sizeof(host), "%s:%d", ai->host, ai->port); ad[1] = host; ad[2] = ai->user ? ai->user : ""; ad[3] = ai->pass ? ai->pass : ""; ad[4] = ai->base ? ai->base : ""; ad[5] = ai->realm ? ai->realm : ""; sprintf(pom, "%d", ai->type); ad[6] = pom; gtk_clist_append(GTK_CLIST(clist), ad); ptr = ptr->next; } UNLOCK_AUTHINFO;}static void PopdownW(GtkObject * object, gpointer func_data){ gtk_widget_destroy(GTK_WIDGET(func_data));}static void SaveAI(GtkWidget * w, gpointer data){ char *fn = (gchar *) gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); if(authinfo_save(fn)) { gdk_beep(); } else gtk_widget_destroy(GTK_WIDGET(data));}static void Save(GtkWidget * w, gpointer data){ static GtkWidget *fn = NULL; if(fn) { gtk_widget_show_all(fn); if(GTK_WIDGET_REALIZED(fn)) gdk_window_raise(fn->window); return; } fn = gtk_file_selection_new(gettext("Pavuk: Save auth. info file")); gtk_signal_connect(GTK_OBJECT(fn), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->ok_button), "clicked", GTK_SIGNAL_FUNC(SaveAI), fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->cancel_button), "clicked", GTK_SIGNAL_FUNC(PopdownW), fn); if(cfg.auth_file) gtk_file_selection_set_filename(GTK_FILE_SELECTION(fn), cfg.auth_file); gtk_widget_show_all(fn);}static void LoadAI(GtkWidget * w, gpointer data){ char *fn = (gchar *) gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); if(authinfo_load(fn)) { gdk_beep(); } else { gtk_clist_freeze(GTK_CLIST(list)); gtk_clist_clear(GTK_CLIST(list)); fill_list(list); gtk_clist_thaw(GTK_CLIST(list)); gtk_widget_destroy(GTK_WIDGET(data)); }}static void Load(GtkWidget * w, gpointer data){ static GtkWidget *fn = NULL; if(fn) { gtk_widget_show_all(fn); if(GTK_WIDGET_REALIZED(fn)) gdk_window_raise(fn->window); return; } fn = gtk_file_selection_new(gettext("Pavuk: Load auth. info file")); gtk_signal_connect(GTK_OBJECT(fn), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->ok_button), "clicked", GTK_SIGNAL_FUNC(LoadAI), fn); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fn)->cancel_button), "clicked", GTK_SIGNAL_FUNC(PopdownW), fn); if(cfg.auth_file) gtk_file_selection_set_filename(GTK_FILE_SELECTION(fn), cfg.auth_file); gtk_widget_show_all(fn);}static void Apply(GtkObject * object, gpointer func_data){ int i, j; LOCK_AUTHINFO; while(authdata) { authinfo *ai = (authinfo *) authdata->data; free_deep_authinfo(ai); authdata = dllist_remove_entry(authdata, authdata); } for(i = 0; i < GTK_CLIST(func_data)->rows; i++) { char *ld[7]; char *p; authinfo *ai; for(j = 0; j < 7; j++) gtk_clist_get_text(GTK_CLIST(func_data), i, j, &ld[j]); ai = _malloc(sizeof(authinfo)); for(j = 0; j < NUM_ELEM(prottable); j++) { if(prottable[j].urlid && !strcmp(ld[0], prottable[j].urlid)) { ai->prot = j; break; } } p = strchr(ld[1], ':'); ai->host = p ? new_n_string(ld[1], p - ld[1]) : new_string(ld[1]); ai->port = p ? atoi(p + 1) : prottable[ai->prot].default_port; ai->user = new_string(ld[2]); ai->pass = new_string(ld[3]); ai->base = ld[4] && *ld[4] ? new_string(ld[4]) : NULL; ai->realm = ld[5] && *ld[5] ? new_string(ld[5]) : NULL; ai->type = atoi(ld[6]); authdata = dllist_append(authdata, (dllist_t)ai); } UNLOCK_AUTHINFO;}static void CopyFromList(GtkObject * object, int row, int col, GdkEvent * event, gpointer data){ char *p; int i, j; if(GTK_CLIST(object)->selection) { gtk_clist_get_text(GTK_CLIST(object), row, 0, &p); for(i = 0, j = 0; i < NUM_ELEM(prottable); i++) { if(prottable[i].urlid && !strcmp(p, prottable[i].urlid)) { gtk_option_menu_set_history(GTK_OPTION_MENU(w_prot), j); break; } if(prottable[i].supported) j++; } gtk_clist_get_text(GTK_CLIST(object), row, 1, &p); gtk_entry_set_text(GTK_ENTRY(w_host), p); gtk_clist_get_text(GTK_CLIST(object), row, 2, &p); gtk_entry_set_text(GTK_ENTRY(w_user), p); gtk_clist_get_text(GTK_CLIST(object), row, 3, &p); gtk_entry_set_text(GTK_ENTRY(w_pass), p); gtk_clist_get_text(GTK_CLIST(object), row, 4, &p); gtk_entry_set_text(GTK_ENTRY(w_base), p); gtk_clist_get_text(GTK_CLIST(object), row, 5, &p); gtk_entry_set_text(GTK_ENTRY(w_realm), p); gtk_clist_get_text(GTK_CLIST(object), row, 6, &p); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w_type[atoi(p) ? atoi(p) - 1 : 1]), TRUE); }}static void NewRow(int row, GtkWidget * list){ char *ad[7]; char pom[10]; ad[0] = prottable[(long) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(w_prot)->menu_item))]. urlid; ad[1] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_host)); ad[2] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_user)); ad[3] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_pass)); ad[4] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_base)); ad[5] = (gchar *) gtk_entry_get_text(GTK_ENTRY(w_realm));#ifdef ENABLE_NTLM sprintf(pom, "%d", GTK_TOGGLE_BUTTON(w_type[0])->active ? 1 : (GTK_TOGGLE_BUTTON(w_type[1])-> active ? 2 : (GTK_TOGGLE_BUTTON(w_type[2])->active ? 3 : 4)));#else sprintf(pom, "%d", GTK_TOGGLE_BUTTON(w_type[0])->active ? 1 : (GTK_TOGGLE_BUTTON(w_type[1])-> active ? 2 : 3));#endif ad[6] = pom; if(ad[1] && *ad[1] && ad[2] && *ad[2] && ad[3] && *ad[3]) { if(row < 0) gtk_clist_append(GTK_CLIST(list), ad); else { int i; for(i = 0; i < 7; i++) gtk_clist_set_text(GTK_CLIST(list), row, i, ad[i]); } } else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -