summaryrefslogtreecommitdiff
path: root/libnautilus-extensions
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-extensions')
-rw-r--r--libnautilus-extensions/nautilus-global-preferences.c51
-rw-r--r--libnautilus-extensions/nautilus-medusa-support.c62
-rw-r--r--libnautilus-extensions/nautilus-medusa-support.h19
-rw-r--r--libnautilus-extensions/nautilus-mime-actions.c52
-rw-r--r--libnautilus-extensions/nautilus-mime-actions.h1
-rw-r--r--libnautilus-extensions/nautilus-program-choosing.c31
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);
}