diff options
Diffstat (limited to 'libnautilus-extensions')
-rw-r--r-- | libnautilus-extensions/nautilus-global-preferences.c | 51 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-medusa-support.c | 62 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-medusa-support.h | 19 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-mime-actions.c | 52 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-mime-actions.h | 1 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-program-choosing.c | 31 |
6 files changed, 173 insertions, 43 deletions
diff --git a/libnautilus-extensions/nautilus-global-preferences.c b/libnautilus-extensions/nautilus-global-preferences.c index dcd9f04af..6c7f226b2 100644 --- a/libnautilus-extensions/nautilus-global-preferences.c +++ b/libnautilus-extensions/nautilus-global-preferences.c @@ -35,6 +35,8 @@ #include "nautilus-preferences-item.h" #include "nautilus-scalable-font.h" #include "nautilus-string.h" +#include "nautilus-medusa-support.h" +#include "nautilus-stock-dialogs.h" #include "nautilus-view-identifier.h" #include <gconf/gconf.h> #include <gconf/gconf-client.h> @@ -1128,20 +1130,59 @@ static void global_preferences_use_fast_search_changed_callback (gpointer callback_data) { gboolean use_fast_search; + gboolean services_are_blocked; + NautilusCronStatus cron_status; - use_fast_search = nautilus_preferences_get_boolean (NAUTILUS_PREFERENCES_USE_FAST_SEARCH); - - nautilus_medusa_enable_services (use_fast_search); + if (global_prefs_dialog) { + use_fast_search = nautilus_preferences_get_boolean (NAUTILUS_PREFERENCES_USE_FAST_SEARCH); + + nautilus_medusa_enable_services (use_fast_search); + services_are_blocked = nautilus_medusa_blocked (); + if (use_fast_search && !services_are_blocked) { + cron_status = nautilus_medusa_check_cron_is_enabled (); + switch (cron_status) { + case NAUTILUS_CRON_STATUS_OFF: + /* Translators: do not translate this text yet; it is still a rough draft. */ + nautilus_show_info_dialog_with_details (_("File indexing has been turned on for your hard drive. " + "However, indexing will not take place each night " + "with your current configuration. You need to " + "start the cron daemon, so that your files will " + "be indexed."), + /* Translators: do not translate this text yet; it is still a rough draft. */ + _("Files May Not Be Indexed"), + /* Translators: do not translate this text yet; it is still a rough draft. */ + _("If crond program is installed on your system, " + "you can turn the cron service on by running " + "the following commands as root:\n" + "/sbin/chkconfig --level 345 crond on\n" + "/etc/rc.d/init.d/crond start\n"), + NULL); + + break; + case NAUTILUS_CRON_STATUS_UNKNOWN: + /* Translators: do not translate this text yet; it is still a rough draft. */ + nautilus_show_info_dialog (_("In order to index your files each night, the cron " + "program must be active on your system. You should " + "check to be sure this program is running. "), + _("Files May Not Be Indexed"), + NULL); + break; + default: + break; + } + } + } } - + static void global_preferences_medusa_state_changed_callback (gpointer callback_data) { nautilus_preferences_set_boolean (NAUTILUS_PREFERENCES_USE_FAST_SEARCH, nautilus_medusa_services_have_been_enabled_by_user ()); - + nautilus_preferences_set_boolean (NAUTILUS_PREFERENCES_MEDUSA_BLOCKED, nautilus_medusa_blocked ()); + } static void diff --git a/libnautilus-extensions/nautilus-medusa-support.c b/libnautilus-extensions/nautilus-medusa-support.c index 6e591b1fc..373ea98d5 100644 --- a/libnautilus-extensions/nautilus-medusa-support.c +++ b/libnautilus-extensions/nautilus-medusa-support.c @@ -26,9 +26,15 @@ #include <config.h> #include <glib.h> + #include <string.h> +#include <sys/types.h> +#include <stdio.h> +#include <dirent.h> +#include "nautilus-glib-extensions.h" #include "nautilus-medusa-support.h" +#include "nautilus-string.h" #ifdef HAVE_MEDUSA #include <libmedusa/medusa-system-state.h> @@ -74,3 +80,59 @@ nautilus_medusa_add_system_state_changed_callback (NautilusMedusaChangedCallback callback_data); #endif } + + +NautilusCronStatus +nautilus_medusa_check_cron_is_enabled (void) +{ +#ifdef HAVE_PROC_PROCESS_FILES + DIR *proc_directory; + struct dirent *file; + char *stat_file_name; + FILE *stat_file; + char stat_file_data[128]; + const char *stat_file_process_name; + int process_number, bytes_read; + + /* We figure out whether cron is running by reading the proc + directory, and checking for a process named or ending with + "crond" */ + + proc_directory = opendir ("/proc"); + if (proc_directory == NULL) { + return NAUTILUS_CRON_STATUS_UNKNOWN; + } + + file = readdir (proc_directory); + while (file != NULL) { + /* Process files have numbers */ + if (nautilus_str_to_int (file->d_name, + &process_number)) { + stat_file_name = g_strdup_printf ("/proc/%d/stat", process_number); + stat_file = fopen (stat_file_name, "r"); + g_free (stat_file_name); + + if (stat_file == NULL) { + continue; + } + + bytes_read = fread (stat_file_data, sizeof (char), NAUTILUS_N_ELEMENTS (stat_file_data) - 1, stat_file); + fclose (stat_file); + stat_file_data[bytes_read] = 0; + + stat_file_process_name = strchr (stat_file_data, ' ') + 1; + + if (nautilus_str_has_prefix (stat_file_process_name, "(crond)")) { + return NAUTILUS_CRON_STATUS_ON; + } + + } + file = readdir (proc_directory); + } + + closedir (proc_directory); + return NAUTILUS_CRON_STATUS_OFF; +#else + return NAUTILUS_CRON_STATUS_UNKNOWN; +#endif +} diff --git a/libnautilus-extensions/nautilus-medusa-support.h b/libnautilus-extensions/nautilus-medusa-support.h index 3af69289a..45c080e80 100644 --- a/libnautilus-extensions/nautilus-medusa-support.h +++ b/libnautilus-extensions/nautilus-medusa-support.h @@ -32,12 +32,19 @@ typedef void (* NautilusMedusaChangedCallback) (gpointer data); -gboolean nautilus_medusa_services_have_been_enabled_by_user (void); -gboolean nautilus_medusa_blocked (void); -void nautilus_medusa_enable_services (gboolean enable); -void nautilus_medusa_add_system_state_changed_callback (NautilusMedusaChangedCallback callback, - gpointer callback_data); - +typedef enum { + NAUTILUS_CRON_STATUS_ON, + NAUTILUS_CRON_STATUS_OFF, + NAUTILUS_CRON_STATUS_UNKNOWN +} NautilusCronStatus; + + +gboolean nautilus_medusa_services_have_been_enabled_by_user (void); +gboolean nautilus_medusa_blocked (void); +void nautilus_medusa_enable_services (gboolean enable); +void nautilus_medusa_add_system_state_changed_callback (NautilusMedusaChangedCallback callback, + gpointer callback_data); +NautilusCronStatus nautilus_medusa_check_cron_is_enabled (void); #endif /* NAUTILUS_MEDUSA_SUPPORT_H */ diff --git a/libnautilus-extensions/nautilus-mime-actions.c b/libnautilus-extensions/nautilus-mime-actions.c index 6690a93ec..f95b0f6bf 100644 --- a/libnautilus-extensions/nautilus-mime-actions.c +++ b/libnautilus-extensions/nautilus-mime-actions.c @@ -30,6 +30,7 @@ #include "nautilus-glib-extensions.h" #include "nautilus-lib-self-check-functions.h" #include "nautilus-metadata.h" +#include "nautilus-string.h" #include <libgnomevfs/gnome-vfs-application-registry.h> #include <libgnomevfs/gnome-vfs-mime-info.h> #include <libgnomevfs/gnome-vfs-mime.h> @@ -672,15 +673,58 @@ nautilus_mime_get_all_applications_for_file (NautilusFile *file) return result; } +static int +application_can_handle_uri (gconstpointer application_data, + gconstpointer uri_scheme) +{ + GnomeVFSMimeApplication *application; + + g_assert (application_data != NULL); + + application = (GnomeVFSMimeApplication *) application_data; + + if (g_list_find_custom (application->supported_uri_schemes, + (gpointer) uri_scheme, + nautilus_strcmp_compare_func) != NULL) { + return 0; + } + else { + return 1; + } +} + + gboolean nautilus_mime_has_any_applications_for_file (NautilusFile *file) { - GList *list; + GList *all_applications_for_mime_type, *application_that_can_access_uri; + char *uri_scheme; gboolean result; - list = nautilus_mime_get_all_applications_for_file (file); - result = list != NULL; - gnome_vfs_mime_application_list_free (list); + all_applications_for_mime_type = nautilus_mime_get_all_applications_for_file (file); + + uri_scheme = nautilus_file_get_uri_scheme (file); + application_that_can_access_uri = g_list_find_custom (all_applications_for_mime_type, + uri_scheme, + application_can_handle_uri); + g_free (uri_scheme); + + result = application_that_can_access_uri != NULL; + gnome_vfs_mime_application_list_free (all_applications_for_mime_type); + + return result; +} + +gboolean +nautilus_mime_has_any_applications_for_file_type (NautilusFile *file) +{ + GList *applications; + gboolean result; + + applications = nautilus_mime_get_all_applications_for_file (file); + + result = applications != NULL; + gnome_vfs_mime_application_list_free (applications); return result; } diff --git a/libnautilus-extensions/nautilus-mime-actions.h b/libnautilus-extensions/nautilus-mime-actions.h index 69f627d79..8390df21d 100644 --- a/libnautilus-extensions/nautilus-mime-actions.h +++ b/libnautilus-extensions/nautilus-mime-actions.h @@ -47,6 +47,7 @@ GList * nautilus_mime_get_all_applications_for_file GList * nautilus_mime_get_all_components_for_file (NautilusFile *file); gboolean nautilus_mime_has_any_components_for_file (NautilusFile *file); gboolean nautilus_mime_has_any_applications_for_file (NautilusFile *file); +gboolean nautilus_mime_has_any_applications_for_file_type (NautilusFile *file); GnomeVFSResult nautilus_mime_set_default_action_type_for_file (NautilusFile *file, GnomeVFSMimeActionType action_type); GnomeVFSResult nautilus_mime_set_default_application_for_file (NautilusFile *file, diff --git a/libnautilus-extensions/nautilus-program-choosing.c b/libnautilus-extensions/nautilus-program-choosing.c index 6713fc2a9..91a2f4c2c 100644 --- a/libnautilus-extensions/nautilus-program-choosing.c +++ b/libnautilus-extensions/nautilus-program-choosing.c @@ -332,7 +332,7 @@ choose_application_callback (NautilusFile *file, application = NULL; dialog = NULL; - if (nautilus_mime_has_any_applications_for_file (file)) { + if (nautilus_mime_has_any_applications_for_file_type (file)) { dialog = set_up_program_chooser (file, GNOME_VFS_MIME_ACTION_TYPE_APPLICATION, choose_data->parent_window); if (gnome_dialog_run (dialog) == GNOME_OK) { @@ -407,21 +407,6 @@ nautilus_choose_application_for_file (NautilusFile *file, g_list_free (attributes); } -static gboolean -application_can_handle_uri (gpointer application_data, - gpointer uri_scheme) -{ - GnomeVFSMimeApplication *application; - - g_assert (application_data != NULL); - - application = (GnomeVFSMimeApplication *) application_data; - - return g_list_find_custom (application->supported_uri_schemes, - uri_scheme, - nautilus_strcmp_compare_func) != NULL; - -} typedef struct { NautilusFile *file; @@ -496,23 +481,14 @@ application_cannot_open_location (GnomeVFSMimeApplication *application, const char *uri_scheme, GtkWindow *parent_window) { - GList *available_applications, *available_applications_for_uri; - GList *other_applications; GnomeDialog *message_dialog; LaunchParameters *launch_parameters; char *message; char *file_name; - available_applications = nautilus_mime_get_all_applications_for_file (file); - available_applications_for_uri = nautilus_g_list_partition (available_applications, - application_can_handle_uri, - (gpointer) uri_scheme, - &other_applications); - gnome_vfs_mime_application_list_free (other_applications); - file_name = nautilus_file_get_name (file); - if (available_applications_for_uri != NULL) { + if (nautilus_mime_has_any_applications_for_file (file)) { message = g_strdup_printf (_("\"%s\" can't open \"%s\" because \"%s\" can't access files at \"%s\" " "locations. Would you like to choose another application?"), application->name, file_name, @@ -536,13 +512,12 @@ application_cannot_open_location (GnomeVFSMimeApplication *application, else { message = g_strdup_printf (_("\"%s\" can't open \"%s\" because \"%s\" can't access files at \"%s\" " "locations. No other applications are available to view this file. " - "If you copy this file onto your computer, you will be able to open " + "If you copy this file onto your computer, you may be able to open " "it."), application->name, file_name, application->name, uri_scheme); nautilus_show_info_dialog (message, _("Can't Open Location"), parent_window); } - gnome_vfs_mime_application_list_free (available_applications_for_uri); g_free (file_name); g_free (message); } |