diff options
author | Jan Lipovsky <janlipovsky@gmail.com> | 2010-04-21 16:32:18 +0200 |
---|---|---|
committer | Jan Lipovsky <janlipovsky@gmail.com> | 2010-04-21 16:32:18 +0200 |
commit | 6c262474707c3a63e0395d424e3758a3043ac99b (patch) | |
tree | 2f2801e0fe784ecf327e9146986107ad80b7680a | |
parent | aa7ffad7d63b0ed92c1a20f1a8ec4eec8688aec5 (diff) | |
download | sfshare-6c262474707c3a63e0395d424e3758a3043ac99b.tar.gz sfshare-6c262474707c3a63e0395d424e3758a3043ac99b.tar.xz sfshare-6c262474707c3a63e0395d424e3758a3043ac99b.zip |
Code clean, gui ui, deamon send errors
-rwxr-xr-x | nautilus-plugin/src/nautilus_sfshare.c | 168 | ||||
-rw-r--r-- | sfshare-daemon/src/dbus_service.c | 4 | ||||
-rw-r--r-- | sfshare-daemon/src/samba_share.c | 28 | ||||
-rw-r--r-- | sfshare-daemon/src/sfshare_errors.h | 1 | ||||
-rw-r--r-- | sfshare-gui/src/sfshare.c | 51 |
5 files changed, 122 insertions, 130 deletions
diff --git a/nautilus-plugin/src/nautilus_sfshare.c b/nautilus-plugin/src/nautilus_sfshare.c index 29b1a5a..7ea11d6 100755 --- a/nautilus-plugin/src/nautilus_sfshare.c +++ b/nautilus-plugin/src/nautilus_sfshare.c @@ -1,24 +1,8 @@ #include <glib.h> /* Nautilus extension headers */ -#include <libnautilus-extension/nautilus-extension-types.h> -#include <libnautilus-extension/nautilus-file-info.h> -#include <libnautilus-extension/nautilus-info-provider.h> #include <libnautilus-extension/nautilus-menu-provider.h> -#include <libnautilus-extension/nautilus-property-page-provider.h> - -#include <gtk/gtktable.h> -#include <gtk/gtkvbox.h> -#include <gtk/gtkhbox.h> -#include <gtk/gtklabel.h> -#include <string.h> -#include <time.h> - -#include <sys/types.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> - +#include <stdlib.h> static GType provider_types[1]; static GType sfshare_type; @@ -43,63 +27,61 @@ GType sfshare_extension_get_type (void); static void sfshare_extension_register_type (GTypeModule *module); /* menu filler */ -static GList * sfshare_extension_get_file_items (NautilusMenuProvider *provider, - GtkWidget *window, - GList *files); -/* -#if 0 -static GList * sfshare_extension_get_background_items (NautilusMenuProvider *provider, - GtkWidget *window, - NautilusFileInfo *current_folder); -static GList * sfshare_extension_get_toolbar_items (NautilusMenuProvider *provider, - GtkWidget *window, - NautilusFileInfo *current_folder); -#endif -*/ +static GList * sfshare_extension_get_file_items (NautilusMenuProvider *provider, + GtkWidget *window, + GList *files); + /* command callback */ static void sfshare_start_gui (NautilusMenuItem *item, gpointer user_data); -void nautilus_module_initialize (GTypeModule *module) +void +nautilus_module_initialize (GTypeModule *module) { sfshare_extension_register_type (module); provider_types[0] = sfshare_extension_get_type (); } -void nautilus_module_shutdown (void) +void +nautilus_module_shutdown (void) { /* Any module-specific shutdown */ } -void nautilus_module_list_types (const GType **types, +void +nautilus_module_list_types (const GType **types, int *num_types) { *types = provider_types; *num_types = G_N_ELEMENTS (provider_types); } -GType sfshare_extension_get_type (void) +GType +sfshare_extension_get_type (void) { return sfshare_type; } -static void sfshare_extension_instance_init (SFShareExtension *object) +static void +sfshare_extension_instance_init (SFShareExtension *object) { } -static void sfshare_extension_class_init(SFShareExtensionClass *class) +static void +sfshare_extension_class_init (SFShareExtensionClass *class) { parent_class = g_type_class_peek_parent (class); } -static void sfshare_extension_menu_provider_iface_init( - NautilusMenuProviderIface *iface) +static void +sfshare_extension_menu_provider_iface_init (NautilusMenuProviderIface *iface) { iface->get_file_items = sfshare_extension_get_file_items; } -static void sfshare_extension_register_type (GTypeModule *module) +static void +sfshare_extension_register_type (GTypeModule *module) { static const GTypeInfo info = { @@ -133,116 +115,64 @@ static void sfshare_extension_register_type (GTypeModule *module) } -static GList * sfshare_extension_get_file_items (NautilusMenuProvider *provider, - GtkWidget *window, - GList *folders) +static GList * +sfshare_extension_get_file_items ( NautilusMenuProvider *provider, + GtkWidget *window, + GList *files) { NautilusMenuItem *item; - GList *l; - GList *ret; - char *name; NautilusFileInfo *file; + char *name; - ret = NULL; /* Only one folder must be selected */ - if((folders == NULL ) || (folders->next != NULL)) - return ret; - - /* Only folders can be shared */ - /* for (l = files; l != NULL; l = l->next) - { - NautilusFileInfo *file = NAUTILUS_FILE_INFO (l->data); - if (!nautilus_file_info_is_directory (file)) - { - return ret; - } - }*/ + if (g_list_length (files) != 1) { + return NULL; + } /* Only folders can be shared */ - file = NAUTILUS_FILE_INFO (folders->data); + file = NAUTILUS_FILE_INFO (files->data); if (!nautilus_file_info_is_directory (file)) { - return ret; + return NULL; } name = nautilus_file_info_get_name (file); -/* - for (l = files; l != NULL; l = l->next) - { - NautilusFileInfo *file = NAUTILUS_FILE_INFO (l->data); - char *name; - name = nautilus_file_info_get_name (file); - g_print ("selected %s\n", name); - g_free (name); - } - */ - item = nautilus_menu_item_new ("SFShareExtension::do_stuff", - g_strconcat("Share \"", name, "\" folder", NULL), /* "Share this folder" */ - "Show sharing dialog for the selected folder", + g_strconcat("Share \"", name, "\" folder", NULL), + g_strconcat("Show share setup dialog for \"", name, "\" folder", NULL), NULL /* icon name */); - g_signal_connect (item, "activate", G_CALLBACK (sfshare_start_gui), provider); - g_object_set_data_full ((GObject*) item, "sfshare_extension_files", - nautilus_file_info_list_copy (folders), - (GDestroyNotify)nautilus_file_info_list_free); - ret = g_list_append (NULL, item); - - /*g_free (name);*/ - return ret; -} -/* samples for more menu fillers */ -/*#if 0 -static GList * sfshare_extension_get_background_items (NautilusMenuProvider *provider, - GtkWidget *window, - NautilusFileInfo *current_folder) -{*/ - /* No background items */ - /* return NULL; -} + g_signal_connect (item, "activate", + G_CALLBACK (sfshare_start_gui), + provider); -static GList * sfshare_extension_get_toolbar_items (NautilusMenuProvider *provider, - GtkWidget *window, - NautilusFileInfo *current_folder) -{ - No toolbar items */ - /*return NULL; + g_object_set_data ((GObject*) item, + "sfshare_extension_folder", + NAUTILUS_FILE_INFO (files->data)); + + g_free (name); + + return g_list_append (NULL, item); } -#endif*/ -static void sfshare_start_gui (NautilusMenuItem *item, - gpointer user_data) -{ - GList *files; - GList *l; - files = g_object_get_data ((GObject *) item, "sfshare_extension_files"); - for (l = files; l != NULL; l = l->next) - { - NautilusFileInfo *file = NAUTILUS_FILE_INFO (l->data); - char *name; +static void +sfshare_start_gui (NautilusMenuItem *item, + gpointer user_data) +{ + + NautilusFileInfo *file = g_object_get_data ((GObject *) item, "sfshare_extension_folder"); const char *path; GFile *f; const char *run; f = nautilus_file_info_get_location (file); path = g_file_get_path (f); - name = nautilus_file_info_get_name (file); - - - /* g_print ("doing stuff with %s\n", name);*/ /* Run command: sfshare-gui /path/to/folder & */ run = g_strconcat("sfshare-gui ", path, " &", NULL); system(run); - - g_free (name); - } - - - /*g_print ("doing stuff with %s\n", name);*/ - /*system("echo aaaaaaaaaa > /TEST/a.txt");*/ } diff --git a/sfshare-daemon/src/dbus_service.c b/sfshare-daemon/src/dbus_service.c index c81006d..e65aded 100644 --- a/sfshare-daemon/src/dbus_service.c +++ b/sfshare-daemon/src/dbus_service.c @@ -102,6 +102,10 @@ get_error_msg (Error err) errmsg = g_strdup ("Read only is same as writable"); break; + case ERROR_SHARE_NAME_EXIST: + errmsg = g_strdup ("Share name already exist"); + break; + default: errmsg = g_strdup ("Unknow error type"); break; diff --git a/sfshare-daemon/src/samba_share.c b/sfshare-daemon/src/samba_share.c index 5bfd97d..d2ccac5 100644 --- a/sfshare-daemon/src/samba_share.c +++ b/sfshare-daemon/src/samba_share.c @@ -416,6 +416,27 @@ TSmbConfItem *is_shared_item(GPtrArray *shared_items, const gchar *path) /* +* True if share name exist +*/ +gboolean +share_name_exist (GPtrArray *shared_items, const gchar *sharename) +{ + TSmbConfItem *tmp; + int i; + for(i = 0; i < shared_items->len; i++) + { + tmp = g_ptr_array_index(shared_items,i); + if(strstr(tmp->name->str,sharename)) + { + return TRUE; + } + } + + return FALSE; +} + + +/* * Write new share section or change chare section defined by share parameter */ gint @@ -434,13 +455,16 @@ write_share(GPtrArray *shared_items, TSmbConfItem *share) gboolean change = FALSE; gboolean found = FALSE; - item = is_shared_item(shared_items, share->path->str); /* If item is not shared we just append it to end of smb.conf */ if(!item) - new_share = TRUE; + { + if(share_name_exist(shared_items, share->name->str)) + return ERROR_SHARE_NAME_EXIST; + new_share = TRUE; + } /* smb.conf - File exist test */ if(!g_file_test(smb_conf_path, G_FILE_TEST_EXISTS)) diff --git a/sfshare-daemon/src/sfshare_errors.h b/sfshare-daemon/src/sfshare_errors.h index c1a5b3c..2656717 100644 --- a/sfshare-daemon/src/sfshare_errors.h +++ b/sfshare-daemon/src/sfshare_errors.h @@ -17,6 +17,7 @@ typedef enum ERROR_WRONG_NAME, ERROR_WRONG_PATH, ERROR_READONLY_WRITABLE, + ERROR_SHARE_NAME_EXIST, NUM_ERRORS } Error; diff --git a/sfshare-gui/src/sfshare.c b/sfshare-gui/src/sfshare.c index 85e71a1..b7c2978 100644 --- a/sfshare-gui/src/sfshare.c +++ b/sfshare-gui/src/sfshare.c @@ -1,4 +1,5 @@ #include <gtk/gtk.h> +#include <string.h> /* strlen */ #include "dbus_client.h" #include <glib.h> @@ -22,7 +23,7 @@ typedef struct _sfsdialog GtkWidget *window; GtkWidget *gui_close; - GtkWidget *gui_about; + GtkWidget *gui_save; /* Share informations */ GtkWidget *gui_share; @@ -41,10 +42,25 @@ SFSDialog sfsdialog; /* Is directory shared? */ gboolean shared_smbconf = FALSE; +/* Did user changed something? */ +gboolean change_in_gui = FALSE; + /* path to folder */ gchar *dir_path; +void +gui_changed ( void ) +{ + if (!change_in_gui) + { + /* Enale save button */ + gtk_widget_set_sensitive (sfsdialog.gui_save, TRUE); + change_in_gui = TRUE; + } +} + + /* Show info, error or warning message*/ void show_message (GtkMessageType type, const gchar *format, gchar *msgtxt, const gchar *format_sec, gchar *msgtxt_sec) @@ -70,11 +86,12 @@ show_message (GtkMessageType type, const gchar *format, gchar *msgtxt, const gch gtk_widget_show (msg_widget); } + /* * Fill in information about shared directory to GUI */ void -load_share_info (gchar *path) +load_share_info ( void ) { /* [share name], "path =", "commennt =", "read only =", "writable =", "guest ok =" */ @@ -85,8 +102,12 @@ load_share_info (gchar *path) TShare_service share_type = DO_NOT_SHARE; shared_smbconf = FALSE; + change_in_gui = FALSE; - if (!dbus_sfshare_get_share (path, &share)) + /* Disable save button */ + gtk_widget_set_sensitive (sfsdialog.gui_save, FALSE); + + if (!dbus_sfshare_get_share (dir_path, &share)) { /* Folder is not shared */ if(share[0] == NULL) @@ -129,7 +150,7 @@ void reload_share_info ( void ) { /* Reload info */ - load_share_info(dir_path); + load_share_info (); } void @@ -156,6 +177,13 @@ sfshare_authority_check ( void ) /* user want to write share to smb.conf*/ if (shared_gui) { + const gchar *share_name = gtk_entry_get_text ( GTK_ENTRY (sfsdialog.gui_sharename)); + if (!g_strcmp0(share_name, (""))) + { + show_message(GTK_MESSAGE_WARNING,"%s","Warning!","%s","Share name must be set!"); + return; + } + polkit_sfshare_check (ACTION_ID_SETUP_SHARE); } } @@ -228,7 +256,6 @@ main ( int argc, char **argv ) exit(1); } - dir_path = argv[1]; gtk_init( &argc, &argv ); @@ -250,8 +277,8 @@ main ( int argc, char **argv ) sfsdialog.gui_close = GTK_WIDGET( gtk_builder_get_object( builder, "button_close" )); g_signal_connect (sfsdialog.gui_close, "clicked", gtk_main_quit, GTK_OBJECT (sfsdialog.window)); - sfsdialog.gui_close = GTK_WIDGET( gtk_builder_get_object( builder, "button_save" )); - g_signal_connect (sfsdialog.gui_close, "clicked", G_CALLBACK (sfshare_authority_check), NULL); + sfsdialog.gui_save = GTK_WIDGET( gtk_builder_get_object( builder, "button_save" )); + g_signal_connect (sfsdialog.gui_save, "clicked", G_CALLBACK (sfshare_authority_check), NULL); /* Share info items */ sfsdialog.gui_share = GTK_WIDGET( gtk_builder_get_object( builder, "combobox_share")); @@ -261,14 +288,20 @@ main ( int argc, char **argv ) sfsdialog.gui_guestok = GTK_WIDGET( gtk_builder_get_object( builder, "checkbutton_guestok")); + g_signal_connect (sfsdialog.gui_share, "changed", G_CALLBACK (gui_changed), NULL); + g_signal_connect (sfsdialog.gui_sharename, "changed", G_CALLBACK (gui_changed), NULL); + g_signal_connect (sfsdialog.gui_comment, "changed", G_CALLBACK (gui_changed), NULL); + g_signal_connect (sfsdialog.gui_readonly, "clicked", G_CALLBACK (gui_changed), NULL); + g_signal_connect (sfsdialog.gui_guestok, "clicked", G_CALLBACK (gui_changed), NULL); + /* Connect callbacks */ - gtk_builder_connect_signals(builder, &sfsdialog ); + /* gtk_builder_connect_signals(builder, &sfsdialog ); */ /* Destroy builder */ g_object_unref (G_OBJECT( builder )); /* Load info about directory */ - load_share_info (dir_path); + load_share_info (); /* Show main window and start main loop */ gtk_widget_show ( sfsdialog.window ); |