summaryrefslogtreecommitdiff
path: root/trunk/txt/ops.txt
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/txt/ops.txt')
-rw-r--r--trunk/txt/ops.txt140
1 files changed, 140 insertions, 0 deletions
diff --git a/trunk/txt/ops.txt b/trunk/txt/ops.txt
new file mode 100644
index 00000000..c1f04c34
--- /dev/null
+++ b/trunk/txt/ops.txt
@@ -0,0 +1,140 @@
+type: File, Folder, Symlink, Shortcut, Mountable, special (fifo, socket, chardec, blockdev)
+flags: hidden,
+GFileInfo {
+ type get_type()
+ char *get_name()
+ char *get_display_name()
+ char *get_icon() /* string? what about win32, remote icons etc */
+
+ gint64 get_file_size()
+ char *get_mime_type()
+ char *get_link_target()
+ can_read()/write()/delete()/rename()/maybe: move()/copy()
+ flags get_flags()
+ time_t get_modification_time()
+ gboolean get_unix_stat ()
+ char *get_attribute()
+ char **get_attributes(char *namespace)
+ char **get_all_attributes() /* form namespace:attrname -> string */
+}
+
+GFSInfo {
+ char *get_fs_type()
+ gint64 get_free_space()
+ gint64 get_total_space()
+ char * get_hal_uid()
+ can_unmount()
+ can_eject()
+ must_eject()
+
+}
+
+GFile *g_file_for_path (char *path)
+GFile *g_file_for_uri (char *uri)
+GFile *g_file_parse_display_name (char *display_name)
+
+GFile {
+ char *get_path()
+ is_native() => is_file:///
+
+ char *get_uri ();
+ char *get_absolute_display_name ()
+
+ set_keep_open(boolean keep_open)
+
+ GFile *get_parent ()
+ GFile *get_child (char *name)
+ GFileEnumerator *enumerate_children(flags, attributes... "*", "vfs:*;dav:*;foo:bar")
+ GFileInfo *get_info (flags, attributes...)
+
+ void reload()
+ GInputStream *read()
+
+ GOutputStream *append_to() /* optional (not on webdav) */
+ GOutputStream *create()
+ GSaveStream *replace(mtime, backup_name, )
+/* permissions are all set minus umask, except replace which
+ saves old permissions */
+
+/* ?? */
+ GFile *resolve_symlink(char *symlink_target);
+
+/* output ops */
+ write/save
+ rename
+ move
+ copy
+ delete
+ mkdir
+ rmkdir
+ display name -> filename (for new files)
+ set attrs
+
+ /* other ops: */
+ monitor(flags) + signals
+ mount/unmount
+ list volumes
+
+ Maybe:
+ GFile *new_from_uri(path, flags) (file:/// uris)
+
+}
+
+
+names:
+ URIs == raw filename (no encoding), all escaped
+ We generate display absolute paths as filenames if possible, otherwise
+ as IRIs. This means we can display nice URIs for native utf8 backends
+ and filenames. However, URIs for non-utf8 shares will look bad. If we know
+ the encoding we can still get nice non-absolut display names though.
+
+ In client we store names as mountpoint + non-escaped no-encoding string.
+ Non-uri display name handling done in daemon
+
+GStatable iface for fstat() support
+GSaveStream, with get_final_file_info()
+
+open for writing:
+
+append vs truncate
+fail on existing or replace
+
+mtime match
+mtime return
+backup (suffix+prefix)
+create filename from display name
+unique name
+keep inode or be atomic?
+
+filename_for_display_name()
+write_append() /* optional (not on webdav) */
+write_new()
+write_replace()
+
+
+
+
+ftp supports:
+ overwrite
+ append
+ generate unique name
+
+http+webdav supports:
+ overwrite
+ append in recent versions
+ get mtime, length, mimetype, atime on read open
+
+
+
+
+
+async thread work:
+
+function to run in thread
+data to pass to thread
+cancel identifier
+pass in cancel func + data
+way for function to communicate with mainloop (of specific context)
+does mainloop notifiers block on ack?
+
+