[gvfs] archive: Set filesystem size information



commit ff870666620b48f9563d7c587b56ed06c349a96c
Author: Ross Lagerwall <rosslagerwall gmail com>
Date:   Mon Nov 11 18:51:47 2013 +0200

    archive: Set filesystem size information
    
    Set the total size and the amount used to be the total size of the
    files; set the amount free to 0.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=711852

 daemon/gvfsbackendarchive.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)
---
diff --git a/daemon/gvfsbackendarchive.c b/daemon/gvfsbackendarchive.c
index 2461e53..b69db2c 100644
--- a/daemon/gvfsbackendarchive.c
+++ b/daemon/gvfsbackendarchive.c
@@ -70,6 +70,7 @@ struct _GVfsBackendArchive
 
   GFile *              file;
   ArchiveFile *                files;          /* the tree of files */
+  gsize                 size;
 };
 
 G_DEFINE_TYPE (GVfsBackendArchive, g_vfs_backend_archive, G_VFS_TYPE_BACKEND)
@@ -547,7 +548,10 @@ create_file_tree (GVfsBackendArchive *ba, GVfsJob *job)
                                                          TRUE);
           /* Don't set info for root */
           if (file != ba->files)
-            archive_file_set_info_from_entry (archive, file, entry, entry_index);
+           {
+             archive_file_set_info_from_entry (archive, file, entry, entry_index);
+             ba->size += g_file_info_get_size (file->info);
+            }
          archive_read_data_skip (archive->archive);
          entry_index++;
        }
@@ -862,8 +866,13 @@ try_query_fs_info (GVfsBackend *backend,
                    GFileInfo *info,
                    GFileAttributeMatcher *attribute_matcher)
 {
+  GVfsBackendArchive *ba = G_VFS_BACKEND_ARCHIVE (backend);
+
   g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE);
   g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW, 
G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL);
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE, ba->size);
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, 0);
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USED, ba->size);
   g_vfs_job_succeeded (G_VFS_JOB (job));
   return TRUE;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]