summaryrefslogtreecommitdiff
path: root/libnautilus-extensions
diff options
context:
space:
mode:
authorRebecca Schulman <rebecka@eazel.com>2001-03-06 00:12:57 +0000
committerRebecca Schulman <rebecka@src.gnome.org>2001-03-06 00:12:57 +0000
commit87d6d540f8abab008b1258f9e2e2e7125b77bb3d (patch)
treee6422f588589732f7311915fd9490d87fa8b2a8b /libnautilus-extensions
parent27595df3f8eee96513a422f757e8dafbc116190b (diff)
downloadnautilus-87d6d540f8abab008b1258f9e2e2e7125b77bb3d.tar.gz
Complete most of bug 5520, that turning medusa on when cron isn't running
2001-03-03 Rebecca Schulman <rebecka@eazel.com> Complete most of bug 5520, that turning medusa on when cron isn't running should tell the user this, and, if possible, how to start cron. reviewed by: Mike Engber <engber@eazel.com> * libnautilus-extensions/nautilus-global-preferences.c: (global_preferences_use_fast_search_changed_callback): Add dialog that comes up if the fast search preference is enabled in the preference dialog when cron is off. The dialog will tell the user about cron and how to turn it on on linux systems. * libnautilus-extensions/nautilus-medusa-support.c: (nautilus_medusa_add_system_state_changed_callback), (nautilus_medusa_check_cron_is_enabled): * libnautilus-extensions/nautilus-medusa-support.h: Add hack to check if cron is actually running using cron. * acconfig.h: * configure.in: Add HAVE_PROC_PROCESS_FILES, so we know whether we can check proc files for whether cron is running * src/nautilus-first-time-druid.c: (back_update_page_callback), (set_up_medusa_page), (next_medusa_page_callback), (set_up_cron_information_page), (nautilus_first_time_druid_show): Add cron interface to the first time druid that tells users how to turn on cron if necessary, as per Arlo's design. Final text still needs to be added here. * libnautilus-extensions/nautilus-mime-actions.c: (application_can_handle_uri), (nautilus_mime_has_any_applications_for_file), (nautilus_mime_has_any_applications_for_file_type): * libnautilus-extensions/nautilus-mime-actions.h: * libnautilus-extensions/nautilus-program-choosing.c: (choose_application_callback), (application_cannot_open_location): Old change that never got committed, reviewed by Darin Adler <darin@eazel.com>
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);
}