summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Lipovsky <janlipovsky@gmail.com>2010-04-21 16:32:18 +0200
committerJan Lipovsky <janlipovsky@gmail.com>2010-04-21 16:32:18 +0200
commit6c262474707c3a63e0395d424e3758a3043ac99b (patch)
tree2f2801e0fe784ecf327e9146986107ad80b7680a
parentaa7ffad7d63b0ed92c1a20f1a8ec4eec8688aec5 (diff)
downloadsfshare-6c262474707c3a63e0395d424e3758a3043ac99b.tar.gz
sfshare-6c262474707c3a63e0395d424e3758a3043ac99b.tar.xz
sfshare-6c262474707c3a63e0395d424e3758a3043ac99b.zip
Code clean, gui ui, deamon send errors
-rwxr-xr-xnautilus-plugin/src/nautilus_sfshare.c168
-rw-r--r--sfshare-daemon/src/dbus_service.c4
-rw-r--r--sfshare-daemon/src/samba_share.c28
-rw-r--r--sfshare-daemon/src/sfshare_errors.h1
-rw-r--r--sfshare-gui/src/sfshare.c51
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 );