1 /* GIO - GLib Input, Output and Streaming Library 2 * 3 * Copyright (C) 2006-2007 Red Hat, Inc. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General 16 * Public License along with this library; if not, write to the 17 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * Boston, MA 02110-1301, USA. 19 * 20 * Author: Alexander Larsson <alexl@redhat.com> 21 */ 22 23 #ifndef __G_VFS_BACKEND_H__ 24 #define __G_VFS_BACKEND_H__ 25 26 #include <gio/gio.h> 27 #include <gvfsdaemon.h> 28 #include <gvfsjob.h> 29 #include <gmountspec.h> 30 31 G_BEGIN_DECLS 32 33 #define G_VFS_TYPE_BACKEND (g_vfs_backend_get_type ()) 34 #define G_VFS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_BACKEND, GVfsBackend)) 35 #define G_VFS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_BACKEND, GVfsBackendClass)) 36 #define G_VFS_IS_BACKEND(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_BACKEND)) 37 #define G_VFS_IS_BACKEND_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_BACKEND)) 38 #define G_VFS_BACKEND_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_BACKEND, GVfsBackendClass)) 39 40 typedef struct _GVfsBackendPrivate GVfsBackendPrivate; 41 typedef struct _GVfsBackendClass GVfsBackendClass; 42 43 typedef struct _GVfsJobMount GVfsJobMount; 44 typedef struct _GVfsJobUnmount GVfsJobUnmount; 45 typedef struct _GVfsJobMountMountable GVfsJobMountMountable; 46 typedef struct _GVfsJobUnmountMountable GVfsJobUnmountMountable; 47 typedef struct _GVfsJobStartMountable GVfsJobStartMountable; 48 typedef struct _GVfsJobStopMountable GVfsJobStopMountable; 49 typedef struct _GVfsJobPollMountable GVfsJobPollMountable; 50 typedef struct _GVfsJobOpenForRead GVfsJobOpenForRead; 51 typedef struct _GVfsJobOpenIconForRead GVfsJobOpenIconForRead; 52 typedef struct _GVfsJobSeekRead GVfsJobSeekRead; 53 typedef struct _GVfsJobCloseRead GVfsJobCloseRead; 54 typedef struct _GVfsJobRead GVfsJobRead; 55 typedef struct _GVfsJobOpenForWrite GVfsJobOpenForWrite; 56 typedef struct _GVfsJobWrite GVfsJobWrite; 57 typedef struct _GVfsJobSeekWrite GVfsJobSeekWrite; 58 typedef struct _GVfsJobTruncate GVfsJobTruncate; 59 typedef struct _GVfsJobCloseWrite GVfsJobCloseWrite; 60 typedef struct _GVfsJobQueryInfo GVfsJobQueryInfo; 61 typedef struct _GVfsJobQueryInfoRead GVfsJobQueryInfoRead; 62 typedef struct _GVfsJobQueryInfoWrite GVfsJobQueryInfoWrite; 63 typedef struct _GVfsJobQueryFsInfo GVfsJobQueryFsInfo; 64 typedef struct _GVfsJobEnumerate GVfsJobEnumerate; 65 typedef struct _GVfsJobSetDisplayName GVfsJobSetDisplayName; 66 typedef struct _GVfsJobTrash GVfsJobTrash; 67 typedef struct _GVfsJobDelete GVfsJobDelete; 68 typedef struct _GVfsJobMakeDirectory GVfsJobMakeDirectory; 69 typedef struct _GVfsJobMakeSymlink GVfsJobMakeSymlink; 70 typedef struct _GVfsJobCopy GVfsJobCopy; 71 typedef struct _GVfsJobMove GVfsJobMove; 72 typedef struct _GVfsJobPush GVfsJobPush; 73 typedef struct _GVfsJobPull GVfsJobPull; 74 typedef struct _GVfsJobSetAttribute GVfsJobSetAttribute; 75 typedef struct _GVfsJobQueryAttributes GVfsJobQueryAttributes; 76 typedef struct _GVfsJobCreateMonitor GVfsJobCreateMonitor; 77 typedef struct _GVfsJobError GVfsJobError; 78 79 typedef gpointer GVfsBackendHandle; 80 81 struct _GVfsBackend 82 { 83 GObject parent_instance; 84 85 GVfsBackendPrivate *priv; 86 }; 87 88 struct _GVfsBackendClass 89 { 90 GObjectClass parent_class; 91 92 /* vtable */ 93 94 /* These try_ calls should be fast and non-blocking, scheduling the i/o 95 * operations async (or on a thread) or reading from cache. 96 * Returning FALSE means "Can't do this now or async", which 97 * means the non-try_ version will be scheduled in a worker 98 * thread. 99 * A NULL here means operation not supported 100 */ 101 102 void (*unmount) (GVfsBackend *backend, 103 GVfsJobUnmount *job, 104 GMountUnmountFlags flags, 105 GMountSource *mount_source); 106 gboolean (*try_unmount) (GVfsBackend *backend, 107 GVfsJobUnmount *job, 108 GMountUnmountFlags flags, 109 GMountSource *mount_source); 110 void (*mount) (GVfsBackend *backend, 111 GVfsJobMount *job, 112 GMountSpec *mount_spec, 113 GMountSource *mount_source, 114 gboolean is_automount); 115 gboolean (*try_mount) (GVfsBackend *backend, 116 GVfsJobMount *job, 117 GMountSpec *mount_spec, 118 GMountSource *mount_source, 119 gboolean is_automount); 120 void (*mount_mountable) (GVfsBackend *backend, 121 GVfsJobMountMountable *job, 122 const char *filename, 123 GMountSource *mount_source); 124 gboolean (*try_mount_mountable)(GVfsBackend *backend, 125 GVfsJobMountMountable *job, 126 const char *filename, 127 GMountSource *mount_source); 128 void (*unmount_mountable) (GVfsBackend *backend, 129 GVfsJobUnmountMountable *job, 130 const char *filename, 131 GMountUnmountFlags flags, 132 GMountSource *mount_source); 133 gboolean (*try_unmount_mountable)(GVfsBackend *backend, 134 GVfsJobUnmountMountable *job, 135 const char *filename, 136 GMountUnmountFlags flags, 137 GMountSource *mount_source); 138 void (*eject_mountable) (GVfsBackend *backend, 139 GVfsJobUnmountMountable *job, 140 const char *filename, 141 GMountUnmountFlags flags, 142 GMountSource *mount_source); 143 gboolean (*try_eject_mountable)(GVfsBackend *backend, 144 GVfsJobUnmountMountable *job, 145 const char *filename, 146 GMountUnmountFlags flags, 147 GMountSource *mount_source); 148 void (*open_for_read) (GVfsBackend *backend, 149 GVfsJobOpenForRead *job, 150 const char *filename); 151 gboolean (*try_open_for_read) (GVfsBackend *backend, 152 GVfsJobOpenForRead *job, 153 const char *filename); 154 void (*open_icon_for_read) (GVfsBackend *backend, 155 GVfsJobOpenIconForRead *job, 156 const char *icon_id); 157 gboolean (*try_open_icon_for_read) (GVfsBackend *backend, 158 GVfsJobOpenIconForRead *job, 159 const char *icon_id); 160 void (*close_read) (GVfsBackend *backend, 161 GVfsJobCloseRead *job, 162 GVfsBackendHandle handle); 163 gboolean (*try_close_read) (GVfsBackend *backend, 164 GVfsJobCloseRead *job, 165 GVfsBackendHandle handle); 166 void (*read) (GVfsBackend *backend, 167 GVfsJobRead *job, 168 GVfsBackendHandle handle, 169 char *buffer, 170 gsize bytes_requested); 171 gboolean (*try_read) (GVfsBackend *backend, 172 GVfsJobRead *job, 173 GVfsBackendHandle handle, 174 char *buffer, 175 gsize bytes_requested); 176 void (*seek_on_read) (GVfsBackend *backend, 177 GVfsJobSeekRead *job, 178 GVfsBackendHandle handle, 179 goffset offset, 180 GSeekType type); 181 gboolean (*try_seek_on_read) (GVfsBackend *backend, 182 GVfsJobSeekRead *job, 183 GVfsBackendHandle handle, 184 goffset offset, 185 GSeekType type); 186 gboolean (*try_create) (GVfsBackend *backend, 187 GVfsJobOpenForWrite *job, 188 const char *filename, 189 GFileCreateFlags flags); 190 void (*create) (GVfsBackend *backend, 191 GVfsJobOpenForWrite *job, 192 const char *filename, 193 GFileCreateFlags flags); 194 gboolean (*try_append_to) (GVfsBackend *backend, 195 GVfsJobOpenForWrite *job, 196 const char *filename, 197 GFileCreateFlags flags); 198 void (*append_to) (GVfsBackend *backend, 199 GVfsJobOpenForWrite *job, 200 const char *filename, 201 GFileCreateFlags flags); 202 gboolean (*try_replace) (GVfsBackend *backend, 203 GVfsJobOpenForWrite *job, 204 const char *filename, 205 const char *etag, 206 gboolean make_backup, 207 GFileCreateFlags flags); 208 void (*replace) (GVfsBackend *backend, 209 GVfsJobOpenForWrite *job, 210 const char *filename, 211 const char *etag, 212 gboolean make_backup, 213 GFileCreateFlags flags); 214 void (*close_write) (GVfsBackend *backend, 215 GVfsJobCloseWrite *job, 216 GVfsBackendHandle handle); 217 gboolean (*try_close_write) (GVfsBackend *backend, 218 GVfsJobCloseWrite *job, 219 GVfsBackendHandle handle); 220 void (*write) (GVfsBackend *backend, 221 GVfsJobWrite *job, 222 GVfsBackendHandle handle, 223 char *buffer, 224 gsize buffer_size); 225 gboolean (*try_write) (GVfsBackend *backend, 226 GVfsJobWrite *job, 227 GVfsBackendHandle handle, 228 char *buffer, 229 gsize buffer_size); 230 void (*seek_on_write) (GVfsBackend *backend, 231 GVfsJobSeekWrite *job, 232 GVfsBackendHandle handle, 233 goffset offset, 234 GSeekType type); 235 gboolean (*try_seek_on_write) (GVfsBackend *backend, 236 GVfsJobSeekWrite *job, 237 GVfsBackendHandle handle, 238 goffset offset, 239 GSeekType type); 240 void (*truncate) (GVfsBackend *backend, 241 GVfsJobTruncate *job, 242 GVfsBackendHandle handle, 243 goffset size); 244 gboolean (*try_truncate) (GVfsBackend *backend, 245 GVfsJobTruncate *job, 246 GVfsBackendHandle handle, 247 goffset size); 248 void (*query_info) (GVfsBackend *backend, 249 GVfsJobQueryInfo *job, 250 const char *filename, 251 GFileQueryInfoFlags flags, 252 GFileInfo *info, 253 GFileAttributeMatcher *attribute_matcher); 254 gboolean (*try_query_info) (GVfsBackend *backend, 255 GVfsJobQueryInfo *job, 256 const char *filename, 257 GFileQueryInfoFlags flags, 258 GFileInfo *info, 259 GFileAttributeMatcher *attribute_matcher); 260 void (*query_info_on_read)(GVfsBackend *backend, 261 GVfsJobQueryInfoRead *job, 262 GVfsBackendHandle handle, 263 GFileInfo *info, 264 GFileAttributeMatcher *attribute_matcher); 265 gboolean (*try_query_info_on_read)(GVfsBackend *backend, 266 GVfsJobQueryInfoRead *job, 267 GVfsBackendHandle handle, 268 GFileInfo *info, 269 GFileAttributeMatcher *attribute_matcher); 270 void (*query_info_on_write)(GVfsBackend *backend, 271 GVfsJobQueryInfoWrite *job, 272 GVfsBackendHandle handle, 273 GFileInfo *info, 274 GFileAttributeMatcher *attribute_matcher); 275 gboolean (*try_query_info_on_write)(GVfsBackend *backend, 276 GVfsJobQueryInfoWrite *job, 277 GVfsBackendHandle handle, 278 GFileInfo *info, 279 GFileAttributeMatcher *attribute_matcher); 280 void (*query_fs_info) (GVfsBackend *backend, 281 GVfsJobQueryFsInfo *job, 282 const char *filename, 283 GFileInfo *info, 284 GFileAttributeMatcher *attribute_matcher); 285 gboolean (*try_query_fs_info) (GVfsBackend *backend, 286 GVfsJobQueryFsInfo *job, 287 const char *filename, 288 GFileInfo *info, 289 GFileAttributeMatcher *attribute_matcher); 290 void (*enumerate) (GVfsBackend *backend, 291 GVfsJobEnumerate *job, 292 const char *filename, 293 GFileAttributeMatcher *attribute_matcher, 294 GFileQueryInfoFlags flags); 295 gboolean (*try_enumerate) (GVfsBackend *backend, 296 GVfsJobEnumerate *job, 297 const char *filename, 298 GFileAttributeMatcher *attribute_matcher, 299 GFileQueryInfoFlags flags); 300 void (*set_display_name) (GVfsBackend *backend, 301 GVfsJobSetDisplayName *job, 302 const char *filename, 303 const char *display_name); 304 gboolean (*try_set_display_name) (GVfsBackend *backend, 305 GVfsJobSetDisplayName *job, 306 const char *filename, 307 const char *display_name); 308 void (*delete) (GVfsBackend *backend, 309 GVfsJobDelete *job, 310 const char *filename); 311 gboolean (*try_delete) (GVfsBackend *backend, 312 GVfsJobDelete *job, 313 const char *filename); 314 void (*trash) (GVfsBackend *backend, 315 GVfsJobTrash *job, 316 const char *filename); 317 gboolean (*try_trash) (GVfsBackend *backend, 318 GVfsJobTrash *job, 319 const char *filename); 320 void (*make_directory) (GVfsBackend *backend, 321 GVfsJobMakeDirectory *job, 322 const char *filename); 323 gboolean (*try_make_directory)(GVfsBackend *backend, 324 GVfsJobMakeDirectory *job, 325 const char *filename); 326 void (*make_symlink) (GVfsBackend *backend, 327 GVfsJobMakeSymlink *make_symlink, 328 const char *filename, 329 const char *symlink_value); 330 gboolean (*try_make_symlink) (GVfsBackend *backend, 331 GVfsJobMakeSymlink *make_symlink, 332 const char *filename, 333 const char *symlink_value); 334 void (*copy) (GVfsBackend *backend, 335 GVfsJobCopy *job, 336 const char *source, 337 const char *destination, 338 GFileCopyFlags flags, 339 GFileProgressCallback progress_callback, 340 gpointer progress_callback_data); 341 gboolean (*try_copy) (GVfsBackend *backend, 342 GVfsJobCopy *job, 343 const char *source, 344 const char *destination, 345 GFileCopyFlags flags, 346 GFileProgressCallback progress_callback, 347 gpointer progress_callback_data); 348 void (*move) (GVfsBackend *backend, 349 GVfsJobMove *job, 350 const char *source, 351 const char *destination, 352 GFileCopyFlags flags, 353 GFileProgressCallback progress_callback, 354 gpointer progress_callback_data); 355 gboolean (*try_move) (GVfsBackend *backend, 356 GVfsJobMove *job, 357 const char *source, 358 const char *destination, 359 GFileCopyFlags flags, 360 GFileProgressCallback progress_callback, 361 gpointer progress_callback_data); 362 void (*push) (GVfsBackend *backend, 363 GVfsJobPush *job, 364 const char *destination, 365 const char *local_path, 366 GFileCopyFlags flags, 367 gboolean remove_source, 368 GFileProgressCallback progress_callback, 369 gpointer progress_callback_data); 370 gboolean (*try_push) (GVfsBackend *backend, 371 GVfsJobPush *job, 372 const char *destination, 373 const char *local_path, 374 GFileCopyFlags flags, 375 gboolean remove_source, 376 GFileProgressCallback progress_callback, 377 gpointer progress_callback_data); 378 void (*pull) (GVfsBackend *backend, 379 GVfsJobPull *job, 380 const char *source, 381 const char *local_path, 382 GFileCopyFlags flags, 383 gboolean remove_source, 384 GFileProgressCallback progress_callback, 385 gpointer progress_callback_data); 386 gboolean (*try_pull) (GVfsBackend *backend, 387 GVfsJobPull *job, 388 const char *source, 389 const char *local_path, 390 GFileCopyFlags flags, 391 gboolean remove_source, 392 GFileProgressCallback progress_callback, 393 gpointer progress_callback_data); 394 void (*set_attribute) (GVfsBackend *backend, 395 GVfsJobSetAttribute *set_attribute, 396 const char *filename, 397 const char *attribute, 398 GFileAttributeType type, 399 gpointer value_p, 400 GFileQueryInfoFlags flags); 401 gboolean (*try_set_attribute) (GVfsBackend *backend, 402 GVfsJobSetAttribute *set_attribute, 403 const char *filename, 404 const char *attribute, 405 GFileAttributeType type, 406 gpointer value_p, 407 GFileQueryInfoFlags flags); 408 void (*create_dir_monitor)(GVfsBackend *backend, 409 GVfsJobCreateMonitor *job, 410 const char *filename, 411 GFileMonitorFlags flags); 412 gboolean (*try_create_dir_monitor) (GVfsBackend *backend, 413 GVfsJobCreateMonitor *job, 414 const char *filename, 415 GFileMonitorFlags flags); 416 void (*create_file_monitor)(GVfsBackend *backend, 417 GVfsJobCreateMonitor *job, 418 const char *filename, 419 GFileMonitorFlags flags); 420 gboolean (*try_create_file_monitor) (GVfsBackend *backend, 421 GVfsJobCreateMonitor *job, 422 const char *filename, 423 GFileMonitorFlags flags); 424 void (*query_settable_attributes) (GVfsBackend *backend, 425 GVfsJobQueryAttributes *job, 426 const char *filename); 427 gboolean (*try_query_settable_attributes) (GVfsBackend *backend, 428 GVfsJobQueryAttributes *job, 429 const char *filename); 430 void (*query_writable_namespaces) (GVfsBackend *backend, 431 GVfsJobQueryAttributes *job, 432 const char *filename); 433 gboolean (*try_query_writable_namespaces) (GVfsBackend *backend, 434 GVfsJobQueryAttributes *job, 435 const char *filename); 436 437 void (*start_mountable) (GVfsBackend *backend, 438 GVfsJobStartMountable *job, 439 const char *filename, 440 GMountSource *mount_source); 441 gboolean (*try_start_mountable) (GVfsBackend *backend, 442 GVfsJobStartMountable *job, 443 const char *filename, 444 GMountSource *mount_source); 445 void (*stop_mountable) (GVfsBackend *backend, 446 GVfsJobStopMountable *job, 447 const char *filename, 448 GMountUnmountFlags flags, 449 GMountSource *mount_source); 450 gboolean (*try_stop_mountable) (GVfsBackend *backend, 451 GVfsJobStopMountable *job, 452 const char *filename, 453 GMountUnmountFlags flags, 454 GMountSource *mount_source); 455 void (*poll_mountable) (GVfsBackend *backend, 456 GVfsJobPollMountable *job, 457 const char *filename); 458 gboolean (*try_poll_mountable) (GVfsBackend *backend, 459 GVfsJobPollMountable *job, 460 const char *filename); 461 }; 462 463 GType g_vfs_backend_get_type (void) G_GNUC_CONST; 464 465 void g_vfs_register_backend (GType backend_type, 466 const char *type); 467 GType g_vfs_lookup_backend (const char *type); 468 469 void g_vfs_backend_set_display_name (GVfsBackend *backend, 470 const char *display_name); 471 void g_vfs_backend_set_stable_name (GVfsBackend *backend, 472 const char *stable_name); 473 void g_vfs_backend_set_x_content_types (GVfsBackend *backend, 474 char **x_content_types); 475 void g_vfs_backend_set_icon_name (GVfsBackend *backend, 476 const char *icon_name); 477 void g_vfs_backend_set_icon (GVfsBackend *backend, 478 GIcon *icon); 479 void g_vfs_backend_set_symbolic_icon_name (GVfsBackend *backend, 480 const char *icon_name); 481 void g_vfs_backend_set_symbolic_icon (GVfsBackend *backend, 482 GIcon *icon); 483 void g_vfs_backend_set_prefered_filename_encoding (GVfsBackend *backend, 484 const char *prefered_filename_encoding); 485 void g_vfs_backend_set_user_visible (GVfsBackend *backend, 486 gboolean user_visible); 487 void g_vfs_backend_set_default_location (GVfsBackend *backend, 488 const char *location); 489 void g_vfs_backend_set_mount_spec (GVfsBackend *backend, 490 GMountSpec *mount_spec); 491 void g_vfs_backend_register_mount (GVfsBackend *backend, 492 GAsyncReadyCallback callback, 493 gpointer user_data); 494 gboolean g_vfs_backend_register_mount_finish (GVfsBackend *backend, 495 GAsyncResult *res, 496 GError **error); 497 void g_vfs_backend_unregister_mount (GVfsBackend *backend, 498 GAsyncReadyCallback callback, 499 gpointer user_data); 500 gboolean g_vfs_backend_unregister_mount_finish (GVfsBackend *backend, 501 GAsyncResult *res, 502 GError **error); 503 const char *g_vfs_backend_get_backend_type (GVfsBackend *backend); 504 const char *g_vfs_backend_get_display_name (GVfsBackend *backend); 505 const char *g_vfs_backend_get_stable_name (GVfsBackend *backend); 506 char **g_vfs_backend_get_x_content_types (GVfsBackend *backend); 507 GIcon *g_vfs_backend_get_icon (GVfsBackend *backend); 508 GIcon *g_vfs_backend_get_symbolic_icon (GVfsBackend *backend); 509 const char *g_vfs_backend_get_default_location (GVfsBackend *backend); 510 GMountSpec *g_vfs_backend_get_mount_spec (GVfsBackend *backend); 511 GVfsDaemon *g_vfs_backend_get_daemon (GVfsBackend *backend); 512 gboolean g_vfs_backend_is_mounted (GVfsBackend *backend); 513 void g_vfs_backend_force_unmount (GVfsBackend *backend); 514 515 void g_vfs_backend_add_auto_info (GVfsBackend *backend, 516 GFileAttributeMatcher *matcher, 517 GFileInfo *info, 518 const char *uri); 519 void g_vfs_backend_add_auto_fs_info (GVfsBackend *backend, 520 GFileAttributeMatcher *matcher, 521 GFileInfo *info); 522 523 void g_vfs_backend_set_block_requests (GVfsBackend *backend, 524 gboolean value); 525 gboolean g_vfs_backend_get_block_requests (GVfsBackend *backend); 526 527 gboolean g_vfs_backend_unmount_with_operation_finish (GVfsBackend *backend, 528 GAsyncResult *res, 529 GError **error); 530 531 void g_vfs_backend_unmount_with_operation (GVfsBackend *backend, 532 GMountSource *mount_source, 533 GAsyncReadyCallback callback, 534 gpointer user_data); 535 536 gboolean g_vfs_backend_invocation_first_handler (GVfsDBusMount *object, 537 GDBusMethodInvocation *invocation, 538 GVfsBackend *backend); 539 540 void g_vfs_backend_handle_readonly_lockdown (GVfsBackend *backend); 541 gboolean g_vfs_backend_get_readonly_lockdown (GVfsBackend *backend); 542 543 G_END_DECLS 544 545 #endif /* __G_VFS_BACKEND_H__ */ 546