nautilus r15158 - in trunk: . libnautilus-private
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: nautilus r15158 - in trunk: . libnautilus-private
- Date: Wed, 1 Apr 2009 13:50:55 +0000 (UTC)
Author: alexl
Date: Wed Apr 1 13:50:55 2009
New Revision: 15158
URL: http://svn.gnome.org/viewvc/nautilus?rev=15158&view=rev
Log:
2009-04-01 Alexander Larsson <alexl redhat com>
* libnautilus-private/nautilus-directory-private.h:
* libnautilus-private/nautilus-directory.c:
* libnautilus-private/nautilus-file.c:
Call query_filesystem_info asynchronously.
Also, avoid calling it to often
Modified:
trunk/ChangeLog
trunk/libnautilus-private/nautilus-directory-private.h
trunk/libnautilus-private/nautilus-directory.c
trunk/libnautilus-private/nautilus-file.c
Modified: trunk/libnautilus-private/nautilus-directory-private.h
==============================================================================
--- trunk/libnautilus-private/nautilus-directory-private.h (original)
+++ trunk/libnautilus-private/nautilus-directory-private.h Wed Apr 1 13:50:55 2009
@@ -143,6 +143,9 @@
GList *file_operations_in_progress; /* list of FileOperation * */
GHashTable *hidden_file_hash;
+
+ guint64 free_space; /* (guint)-1 for unknown */
+ time_t free_space_read; /* The time free_space was updated, or 0 for never */
};
NautilusDirectory *nautilus_directory_get_existing (GFile *location);
Modified: trunk/libnautilus-private/nautilus-directory.c
==============================================================================
--- trunk/libnautilus-private/nautilus-directory.c (original)
+++ trunk/libnautilus-private/nautilus-directory.c Wed Apr 1 13:50:55 2009
@@ -140,6 +140,7 @@
directory->details->low_priority_queue = nautilus_file_queue_new ();
directory->details->extension_queue = nautilus_file_queue_new ();
directory->details->idle_queue = nautilus_idle_queue_new ();
+ directory->details->free_space = (guint64)-1;
}
NautilusDirectory *
Modified: trunk/libnautilus-private/nautilus-file.c
==============================================================================
--- trunk/libnautilus-private/nautilus-file.c (original)
+++ trunk/libnautilus-private/nautilus-file.c Wed Apr 1 13:50:55 2009
@@ -5977,6 +5977,39 @@
return nautilus_file_get_file_type (file) == G_FILE_TYPE_SYMBOLIC_LINK;
}
+static void
+get_fs_free_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ NautilusDirectory *directory;
+ NautilusFile *file;
+ guint64 free_space;
+ GFileInfo *info;
+
+ directory = NAUTILUS_DIRECTORY (user_data);
+
+ free_space = (guint64)-1;
+ info = g_file_query_filesystem_info_finish (G_FILE (source_object),
+ res, NULL);
+ if (info) {
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE)) {
+ free_space = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
+ }
+ g_object_unref (info);
+ }
+
+ if (directory->details->free_space != free_space) {
+ directory->details->free_space = free_space;
+ file = nautilus_directory_get_existing_corresponding_file (directory);
+ if (file) {
+ nautilus_file_emit_changed (file);
+ nautilus_file_unref (file);
+ }
+ }
+ nautilus_directory_unref (directory);
+}
+
/**
* nautilus_file_get_volume_free_space
* Get a nicely formatted char with free space on the file's volume
@@ -5987,24 +6020,33 @@
char *
nautilus_file_get_volume_free_space (NautilusFile *file)
{
- goffset free_space;
- GFileInfo *info;
+ NautilusDirectory *directory;
GFile *location;
char *res;
+ time_t now;
- res = NULL;
+ directory = nautilus_directory_get_for_file (file);
- location = nautilus_file_get_location (file);
- info = g_file_query_filesystem_info (location, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, NULL, NULL);
- if (info) {
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE)) {
- free_space = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
- res = g_format_size_for_display (free_space);
- }
- g_object_unref (info);
+ now = time (NULL);
+ /* Update first time and then every 2 seconds */
+ if (directory->details->free_space_read == 0 ||
+ (now - directory->details->free_space_read) > 2) {
+ directory->details->free_space_read = now;
+ location = nautilus_file_get_location (file);
+ g_file_query_filesystem_info_async (location,
+ G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
+ 0, NULL,
+ get_fs_free_cb,
+ directory); /* Inherits ref */
+ g_object_unref (location);
}
- g_object_unref (location);
+
+ res = NULL;
+ if (directory->details->free_space != (guint64)-1) {
+ res = g_format_size_for_display (directory->details->free_space);
+ }
+
return res;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]