📄 fe_gtk_site_ops.c
字号:
/* * XSitecopy, for managing remote web sites with a GNOME interface. * Copyright (C) 1999, Lee Mallabone <lee0@callnetuk.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include "sites.h"#include "common.h"#include "rcfile.h"#include "fe_gnome_common.h"#include "fe_gtk_main.h"#include "fe_gtk_site_ops.h"#include "config.h"extern struct site_t *selected_site;extern GtkWidget *error_log_list, *error_log_window;extern struct site_t *all_sites;/* For the 'main' upload window */GtkWidget *upload_window, *main_progressbar, *job_progressbar, *error_button;GtkWidget *status_label, *op_label, *file_label, *dir_label;GtkWidget *begin_button, *close_button, *kill_button, *keep_going_button;pthread_t update_thread_id = 0;void close_main_update_window (GtkWidget *button, gpointer data) { extern GtkWidget *connection_label; gtk_window_set_modal (GTK_WINDOW (upload_window), false); /* FIXME: Kill the pthread, write the files list back,, and enable the * error log button. */ gtk_widget_destroy (upload_window); connection_label = NULL;}/* All this pissing about with functions to make the fe, functions to * start the thing, functions to call the thread, then more to actually * DO the bloody thing, are in fact necessary.... I think. */void *actual_main_update (void *a_site) { int ret; pthread_detach (pthread_self()); gtk_widget_set_sensitive (begin_button, FALSE); if (verifysite_gnome (selected_site)) { close_main_update_window(NULL, NULL); return NULL; } if (GTK_TOGGLE_BUTTON(keep_going_button)->active) { ret = site_update (selected_site, TRUE); } else { ret = site_update (selected_site, FALSE); } DEBUG (DEBUG_GNOME, "site_update returned value of %d.\n", ret); switch (ret) { case SITE_CONNECT: gtk_label_set (GTK_LABEL (status_label), "Unable to establish connection."); gtk_label_set (GTK_LABEL (op_label), " "); gtk_label_set (GTK_LABEL (file_label), " "); gtk_label_set (GTK_LABEL (dir_label), " "); break; case SITE_AUTH: gtk_label_set (GTK_LABEL (status_label), "Authentication with the remote server failed.."); gtk_label_set (GTK_LABEL (op_label), " "); gtk_label_set (GTK_LABEL (file_label), " "); gtk_label_set (GTK_LABEL (dir_label), " "); break; case SITE_ERRORS: gtk_label_set (GTK_LABEL (status_label), "There was a problem with the file/directory transfer."); gtk_label_set (GTK_LABEL (op_label), " "); gtk_label_set (GTK_LABEL (file_label), " "); gtk_label_set (GTK_LABEL (dir_label), " "); site_writefiles (selected_site); site_destroy (selected_site); site_readfiles (selected_site); refresh_selected(); gtk_widget_set_sensitive (error_button, true); break; case SITE_LOOKUP: gtk_label_set (GTK_LABEL (status_label), "Unable to connect: Host name look-up failed."); gtk_label_set (GTK_LABEL (op_label), " "); gtk_label_set (GTK_LABEL (file_label), " "); gtk_label_set (GTK_LABEL (dir_label), " "); break; case SITE_OK: site_writefiles (selected_site); site_destroy (selected_site); site_readfiles (selected_site); gtk_label_set (GTK_LABEL (status_label), "Update complete. (No errors)"); gtk_label_set (GTK_LABEL (op_label), " "); gtk_label_set (GTK_LABEL (file_label), " "); gtk_label_set (GTK_LABEL (dir_label), " "); redraw_main_area(); refresh_selected(); break; default: gtk_label_set (GTK_LABEL (status_label), "Unexpected Update Return Value! Contact Maintainer."); } return NULL;}void die_thread_die(GtkWidget *button, gpointer data) { if (update_thread_id != 0) { if (pthread_kill(update_thread_id, 15)) { gtk_label_set (GTK_LABEL (status_label), "Recording uploads that were completed successfully..."); site_writefiles (selected_site); gtk_label_set (GTK_LABEL (status_label), "Update finished; user terminated."); } else { DEBUG (DEBUG_GNOME, "Could not cancel thread. Oh dear"); } } else { gnome_error_dialog ("Could not find a thread to cancel!!"); }}int start_main_update (void) { gtk_widget_set_sensitive(begin_button, FALSE); gtk_widget_set_sensitive(close_button, FALSE);/* gtk_widget_hide(close_button); gnome_dialog_append_button_with_pixmap (GNOME_DIALOG (upload_window), "Stop!", GNOME_STOCK_PIXMAP_STOP); kill_button = g_list_last (GNOME_DIALOG (upload_window)->buttons)->data; gtk_signal_connect (GTK_OBJECT(kill_button), "clicked", GTK_SIGNAL_FUNC(die_thread_die), NULL); gtk_widget_show(kill_button);*/ if ( pthread_create (&update_thread_id, NULL, actual_main_update, NULL) != 0) { gnome_error_dialog ("There was a problem creating the thread to do an update.");/* gtk_widget_hide (kill_button); gtk_widget_show (close_button);*/ gtk_widget_set_sensitive(close_button, TRUE); return 0; } if (update_thread_id != 0) pthread_join (update_thread_id, NULL);/* gtk_widget_hide (kill_button); gtk_widget_show (close_button);*/ gtk_widget_set_sensitive(close_button, TRUE); gtk_window_set_modal (GTK_WINDOW (upload_window), FALSE); return 1;}int main_update_please (GtkWidget *update_button, gpointer data) { extern GtkWidget *connection_label; extern float uploaded_bytes; GtkWidget *vbox, *table, *hbox; GtkWidget *label, *button; GtkWidget *dialog_vbox1; GtkWidget *vbox1; GtkWidget *hseparator3; GtkWidget *table1; GtkWidget *label3; GtkWidget *label6; GtkWidget *hseparator1; GtkWidget *label2; GtkWidget *label1; GtkWidget *dialog_action_area1; uploaded_bytes = 0.0; if (selected_site == NULL) { gnome_error_dialog ("You must select a site if you want to upload the changes!"); return 0; } if (! selected_site->is_different ) { fe_status ("Remote and local sites are already synchronised."); return 1; } make_error_window(); upload_window = gnome_dialog_new ("Update Progress", NULL); gtk_object_set_data (GTK_OBJECT (upload_window), "upload_window", upload_window); gtk_widget_set_usize (upload_window, 480, -2); dialog_vbox1 = GNOME_DIALOG (upload_window)->vbox; gtk_object_set_data (GTK_OBJECT (upload_window), "dialog_vbox1", dialog_vbox1); gtk_widget_show (dialog_vbox1); vbox1 = gtk_vbox_new (FALSE, 1); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (upload_window), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0); hseparator3 = gtk_hseparator_new (); gtk_widget_ref (hseparator3); gtk_object_set_data_full (GTK_OBJECT (upload_window), "hseparator3", hseparator3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hseparator3); gtk_box_pack_start (GTK_BOX (vbox1), hseparator3, TRUE, TRUE, 3); table1 = gtk_table_new (4, 2, FALSE); gtk_widget_ref (table1); gtk_object_set_data_full (GTK_OBJECT (upload_window), "table1", table1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0); gtk_table_set_row_spacings (GTK_TABLE (table1), 1); gtk_table_set_col_spacings (GTK_TABLE (table1), 2); status_label = gtk_label_new ("Click Upload to begin."); gtk_widget_ref (status_label); gtk_object_set_data_full (GTK_OBJECT (upload_window), "status_label", status_label, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (status_label); connection_label = status_label; gtk_table_attach (GTK_TABLE (table1), status_label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_justify (GTK_LABEL (status_label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (status_label), 7.45058e-09, 0.5); op_label = gtk_label_new (" "); gtk_widget_ref (op_label); gtk_object_set_data_full (GTK_OBJECT (upload_window), "op_label", op_label, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (op_label); gtk_table_attach (GTK_TABLE (table1), op_label, 0, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_justify (GTK_LABEL (op_label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (op_label), 7.45058e-09, 0.5); file_label = gtk_label_new (""); gtk_widget_ref (file_label); gtk_object_set_data_full (GTK_OBJECT (upload_window), "file_label", file_label, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (file_label); gtk_table_attach (GTK_TABLE (table1), file_label, 0, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_justify (GTK_LABEL (file_label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (file_label), 7.45058e-09, 0.5); label3 = gtk_label_new ("Status: ");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -