⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fe_gtk_site_ops.c

📁 站点映像程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  *      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 + -