• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<part id="migrating">
2  <title>Migrating to GIO</title>
3
4  <chapter>
5    <title>Migrating from POSIX to GIO</title>
6
7    <table id="posix-vs-gio">
8      <title>Comparison of POSIX and GIO concepts</title>
9      <tgroup cols="2">
10        <thead>
11          <row><entry>POSIX</entry><entry>GIO</entry></row>
12        </thead>
13        <tbody>
14          <row><entry>char *path</entry><entry>GFile *file</entry></row>
15          <row><entry>struct stat *buf</entry><entry>GFileInfo *info</entry></row>
16          <row><entry>struct statvfs *buf</entry><entry>GFileInfo *info</entry></row>
17          <row><entry morerows="1">int fd</entry><entry>GInputStream *in</entry></row>
18          <row><entry>GOutputStream *out</entry></row>
19          <row><entry>DIR *</entry><entry>GFileEnumerator *enum</entry></row>
20          <row><entry>fstab entry</entry><entry>GUnixMountPoint *mount_point</entry></row>
21          <row><entry>mtab entry</entry><entry>GUnixMountEntry *mount_entry</entry></row>
22        </tbody>
23      </tgroup>
24    </table>
25
26  </chapter>
27
28  <chapter>
29    <title>Migrating from GnomeVFS to GIO</title>
30
31    <table id="gnome-vfs-vs-gio">
32      <title>Comparison of GnomeVFS and GIO concepts</title>
33      <tgroup cols="2">
34        <thead>
35          <row><entry>GnomeVFS</entry><entry>GIO</entry></row>
36        </thead>
37        <tbody>
38          <row><entry>GnomeVFSURI</entry><entry>GFile</entry></row>
39          <row><entry>GnomeVFSFileInfo</entry><entry>GFileInfo</entry></row>
40          <row><entry>GnomeVFSResult</entry><entry>GError, with G_IO_ERROR values</entry></row>
41          <row><entry>GnomeVFSHandle &amp; GnomeVFSAsyncHandle</entry><entry>GInputStream or GOutputStream</entry></row>
42          <row><entry>GnomeVFSDirectoryHandle</entry><entry>GFileEnumerator</entry></row>
43          <row><entry>mime type</entry><entry>content type</entry></row>
44          <row><entry>GnomeVFSMonitor</entry><entry>GFileMonitor</entry></row>
45          <row><entry>GnomeVFSVolumeMonitor</entry><entry>GVolumeMonitor</entry></row>
46          <row><entry>GnomeVFSVolume</entry><entry>GMount</entry></row>
47          <row><entry>GnomeVFSDrive</entry><entry>GVolume</entry></row>
48          <row><entry>-</entry><entry>GDrive</entry></row>
49          <row><entry>GnomeVFSContext</entry><entry>GCancellable</entry></row>
50          <row><entry>gnome_vfs_async_cancel</entry><entry>g_cancellable_cancel</entry></row>
51        </tbody>
52      </tgroup>
53    </table>
54
55    <section>
56      <title>Trash handling</title>
57
58      <para>
59        The handling of trashed files has been changed in GIO, compared
60        to gnome-vfs. gnome-vfs has a home-grown trash implementation that
61        predates the freedesktop.org <ulink url="http://www.freedesktop.org/wiki/Specifications/trash-spec">Desktop Trash Can</ulink> specification
62        that is implemented in GIO. The location for storing trashed files
63        has changed from <filename>$HOME/.Trash</filename> to
64        <filename>$HOME/.local/share/Trash</filename> (or more correctly
65        <filename>$XDG_DATA_HOME/Trash</filename>), which means that
66        there is a need for migrating files that have been trashed by
67        gnome-vfs to the new location.
68      </para>
69      <para>
70        In gnome-vfs, the <filename>trash://</filename> scheme offering a
71        merged view of all trash directories was implemented in nautilus,
72        and trash-handling applications had to find and monitor all trash
73        directories themselves. With GIO, the <filename>trash://</filename>
74        implementation has been moved to gvfs and applications can simply
75        monitor that location:
76      </para>
77<informalexample><programlisting>
78static void
79file_changed (GFileMonitor      *file_monitor,
80              GFile             *child,
81              GFile             *other_file,
82              GFileMonitorEvent  event_type,
83              gpointer           user_data)
84{
85  switch (event_type)
86  {
87  case G_FILE_MONITOR_EVENT_DELETED:
88    g_print ("'%s' removed from trash\n", g_file_get_basename (child));
89    break;
90  case G_FILE_MONITOR_EVENT_CREATED:
91    g_print ("'%s' added to trash\n", g_file_get_basename (child));
92    break;
93  default: ;
94  }
95}
96
97static void
98start_monitoring_trash (void)
99{
100  GFile *file;
101  GFileMonitor *monitor;
102
103  file = g_file_new_for_uri ("trash://");
104  monitor = g_file_monitor_directory (file, 0, NULL, NULL);
105  g_object_unref (file);
106
107  g_signal_connect (monitor, "changed", G_CALLBACK (file_changed), NULL);
108
109  /* ... */
110
111}
112</programlisting></informalexample>
113      <para>
114        GIO exposes some useful metadata about trashed files. There are
115        trash::orig-path and trash::deletion-date attributes. The
116        standard::icon attribute of the <filename>trash://</filename>
117        itself provides a suitable icon for displaying the trash can on
118        the desktop. If you are using this icon, make sure to monitor
119        this attribute for changes, since the icon may be updated to
120        reflect that state of the trash can.
121      </para>
122      <para>
123	Moving a file to the trash is much simpler with GIO. Instead of
124        using gnome_vfs_find_directory() with %GNOME_VFS_DIRECTORY_KIND_TRASH
125        to find out where to move the trashed file, just use the g_file_trash()
126        function.
127      </para>
128    </section>
129
130    <section>
131      <title>Operations on multiple files</title>
132
133      <para>
134        gnome-vfs has the dreaded gnome_vfs_xfer_uri_list() function which
135        has tons of options and offers the equivalent of cp, mv, ln, mkdir
136        and rm at the same time.
137      </para>
138      <para>
139        GIO offers a much simpler I/O scheduler functionality instead, that
140        lets you schedule a function to be called in a separate thread, or
141        if threads are not available, as an idle in the mainloop.
142        See g_io_scheduler_push_job().
143      </para>
144
145    </section>
146
147    <section>
148      <title>Mime monitoring</title>
149
150      <para>
151        gnome-vfs offered a way to monitor the association between mime types
152        and default handlers for changes, with the #GnomeVFSMIMEMonitor object.
153        GIO does not offer a replacement for this functionality at this time,
154        since we have not found a compelling use case where
155        #GnomeVFSMIMEMonitor was used. If you think you have such a use
156        case, please report it at
157        <ulink url="http://bugzilla.gnome.org">bugzilla.gnome.org</ulink>.
158      </para>
159    </section>
160  </chapter>
161
162</part>
163