David Zeuthen 6254fee
Index: daemon/gvfsbackendarchive.c
David Zeuthen 6254fee
===================================================================
David Zeuthen 6254fee
--- daemon/gvfsbackendarchive.c	(revision 1746)
David Zeuthen 6254fee
+++ daemon/gvfsbackendarchive.c	(working copy)
David Zeuthen 6254fee
@@ -322,6 +322,13 @@
David Zeuthen 6254fee
   g_file_info_set_content_type (info, "inode/directory");
David Zeuthen 6254fee
   g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE, "inode/directory");
David Zeuthen 6254fee
 
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, TRUE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, FALSE);
David Zeuthen 6254fee
+
David Zeuthen 6254fee
   icon = g_themed_icon_new ("folder");
David Zeuthen 6254fee
   g_file_info_set_icon (info, icon);
David Zeuthen 6254fee
   g_object_unref (icon);
David Zeuthen 6254fee
@@ -340,19 +347,19 @@
David Zeuthen 6254fee
   g_file_info_set_attribute_uint64 (info,
David Zeuthen 6254fee
 				    G_FILE_ATTRIBUTE_TIME_ACCESS,
David Zeuthen 6254fee
 				    archive_entry_atime (entry));
David Zeuthen 6254fee
-  g_file_info_set_attribute_uint64 (info,
David Zeuthen 6254fee
+  g_file_info_set_attribute_uint32 (info,
David Zeuthen 6254fee
 				    G_FILE_ATTRIBUTE_TIME_ACCESS_USEC,
David Zeuthen 6254fee
 				    archive_entry_atime_nsec (entry) / 1000);
David Zeuthen 6254fee
   g_file_info_set_attribute_uint64 (info,
David Zeuthen 6254fee
 				    G_FILE_ATTRIBUTE_TIME_CHANGED,
David Zeuthen 6254fee
 				    archive_entry_ctime (entry));
David Zeuthen 6254fee
-  g_file_info_set_attribute_uint64 (info,
David Zeuthen 6254fee
+  g_file_info_set_attribute_uint32 (info,
David Zeuthen 6254fee
 				    G_FILE_ATTRIBUTE_TIME_CHANGED_USEC,
David Zeuthen 6254fee
 				    archive_entry_ctime_nsec (entry) / 1000);
David Zeuthen 6254fee
   g_file_info_set_attribute_uint64 (info,
David Zeuthen 6254fee
 				    G_FILE_ATTRIBUTE_TIME_MODIFIED,
David Zeuthen 6254fee
 				    archive_entry_mtime (entry));
David Zeuthen 6254fee
-  g_file_info_set_attribute_uint64 (info,
David Zeuthen 6254fee
+  g_file_info_set_attribute_uint32 (info,
David Zeuthen 6254fee
 				    G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC,
David Zeuthen 6254fee
 				    archive_entry_mtime_nsec (entry) / 1000);
David Zeuthen 6254fee
 
David Zeuthen 6254fee
@@ -387,6 +394,13 @@
David Zeuthen 6254fee
   g_file_info_set_size (info,
David Zeuthen 6254fee
 			archive_entry_size (entry));
David Zeuthen 6254fee
 
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, type == G_FILE_TYPE_DIRECTORY);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, FALSE);
David Zeuthen 6254fee
+
David Zeuthen 6254fee
   /* FIXME: add info for these
David Zeuthen 6254fee
 dev_t			 archive_entry_dev(struct archive_entry *);
David Zeuthen 6254fee
 dev_t			 archive_entry_devmajor(struct archive_entry *);
David Zeuthen 6254fee
@@ -508,11 +522,11 @@
David Zeuthen 6254fee
           return;
David Zeuthen 6254fee
         }
David Zeuthen 6254fee
       
David Zeuthen 6254fee
-      archive->file = g_file_new_for_uri (filename);
David Zeuthen 6254fee
+      archive->file = g_file_new_for_commandline_arg (filename);
David Zeuthen 6254fee
       g_free (filename);
David Zeuthen 6254fee
     }
David Zeuthen 6254fee
   else
David Zeuthen 6254fee
-    archive->file = g_file_new_for_uri (file);
David Zeuthen 6254fee
+    archive->file = g_file_new_for_commandline_arg (file);
David Zeuthen 6254fee
   
David Zeuthen 6254fee
   DEBUG ("Trying to mount %s\n", g_file_get_uri (archive->file));
David Zeuthen 6254fee
 
David Zeuthen 6254fee
@@ -714,6 +728,19 @@
David Zeuthen 6254fee
   g_vfs_job_succeeded (G_VFS_JOB (job));
David Zeuthen 6254fee
 }
David Zeuthen 6254fee
 
David Zeuthen 6254fee
+static gboolean
David Zeuthen 6254fee
+try_query_fs_info (GVfsBackend *backend,
David Zeuthen 6254fee
+                   GVfsJobQueryFsInfo *job,
David Zeuthen 6254fee
+                   const char *filename,
David Zeuthen 6254fee
+                   GFileInfo *info,
David Zeuthen 6254fee
+                   GFileAttributeMatcher *attribute_matcher)
David Zeuthen 6254fee
+{
David Zeuthen 6254fee
+  g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE);
David Zeuthen 6254fee
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW, G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL);
David Zeuthen 6254fee
+  g_vfs_job_succeeded (G_VFS_JOB (job));
David Zeuthen 6254fee
+  return TRUE;
David Zeuthen 6254fee
+}
David Zeuthen 6254fee
+
David Zeuthen 6254fee
 static void
David Zeuthen 6254fee
 g_vfs_backend_archive_class_init (GVfsBackendArchiveClass *klass)
David Zeuthen 6254fee
 {
David Zeuthen 6254fee
@@ -729,4 +756,5 @@
David Zeuthen 6254fee
   backend_class->read = do_read;
David Zeuthen 6254fee
   backend_class->enumerate = do_enumerate;
David Zeuthen 6254fee
   backend_class->query_info = do_query_info;
David Zeuthen 6254fee
+  backend_class->try_query_fs_info = try_query_fs_info;
David Zeuthen 6254fee
 }