| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
| <html> | |
| <head> | |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
| <title>Data conversion: GIO Reference Manual</title> | |
| <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> | |
| <link rel="home" href="index.html" title="GIO Reference Manual"> | |
| <link rel="up" href="ch34.html" title="Migrating from GConf to GSettings"> | |
| <link rel="prev" href="ch34s06.html" title="Schema conversion"> | |
| <link rel="next" href="ch35.html" title="Migrating to GDBus"> | |
| <meta name="generator" content="GTK-Doc V1.25.1 (XML mode)"> | |
| <link rel="stylesheet" href="style.css" type="text/css"> | |
| </head> | |
| <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
| <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> | |
| <td width="100%" align="left" class="shortcuts"></td> | |
| <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> | |
| <td><a accesskey="u" href="ch34.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> | |
| <td><a accesskey="p" href="ch34s06.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> | |
| <td><a accesskey="n" href="ch35.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> | |
| </tr></table> | |
| <div class="section"> | |
| <div class="titlepage"><div><div><h2 class="title" style="clear: both"> | |
| <a name="id-1.5.4.8"></a>Data conversion</h2></div></div></div> | |
| <p> | |
| GConf comes with a GSettings backend that can be used to | |
| facility the transition to the GSettings API until you are | |
| ready to make the jump to a different backend (most likely | |
| dconf). To use it, you need to set the <code class="envar">GSETTINGS_BACKEND</code> | |
| to 'gconf', e.g. by using | |
| </p> | |
| <pre class="programlisting"> | |
| g_setenv ("GSETTINGS_BACKEND", "gconf", TRUE); | |
| </pre> | |
| <p> | |
| early on in your program. Note that this backend is meant purely | |
| as a transition tool, and should not be used in production. | |
| </p> | |
| <p> | |
| GConf also comes with a utility called | |
| <span class="command"><strong>gsettings-data-convert</strong></span>, which is designed to help | |
| with the task of migrating user settings from GConf into another | |
| GSettings backend. It can be run manually, but it is designed to be | |
| executed automatically, every time a user logs in. It keeps track of | |
| the data migrations that it has already done, and it is harmless to | |
| run it more than once. | |
| </p> | |
| <p> | |
| To make use of this utility, you must install a keyfile in the | |
| directory <code class="filename">/usr/share/GConf/gsettings</code> which | |
| lists the GSettings keys and GConf paths to map to each other, for | |
| each schema that you want to migrate user data for. | |
| </p> | |
| <p> | |
| Here is an example: | |
| </p> | |
| <pre class="programlisting"> | |
| [org.gnome.fonts] | |
| antialiasing = /desktop/gnome/font_rendering/antialiasing | |
| dpi = /desktop/gnome/font_rendering/dpi | |
| hinting = /desktop/gnome/font_rendering/hinting | |
| rgba-order = /desktop/gnome/font_rendering/rgba_order | |
| [apps.myapp:/path/to/myapps/] | |
| some-odd-key1 = /apps/myapp/some_ODD-key1 | |
| </pre> | |
| <p> | |
| The last key demonstrates that it may be necessary to modify the key | |
| name to comply with stricter GSettings key name rules. Of course, | |
| that means your application must use the new key names when looking | |
| up settings in GSettings. | |
| </p> | |
| <p> | |
| The last group in the example also shows how to handle the case | |
| of 'relocatable' schemas, which don't have a fixed path. You can | |
| specify the path to use in the group name, separated by a colon. | |
| </p> | |
| <p> | |
| There are some limitations: <span class="command"><strong>gsettings-data-convert</strong></span> | |
| does not do any transformation of the values. And it does not handle | |
| complex GConf types other than lists of strings or integers. | |
| </p> | |
| <p> | |
| Don't forget to require GConf 2.31.1 or newer in your configure | |
| script if you are making use of the GConf backend or the conversion | |
| utility. | |
| </p> | |
| <p> | |
| If, as an application developer, you are interested in manually | |
| ensuring that <span class="command"><strong>gsettings-data-convert</strong></span> has been | |
| invoked (for example, to deal with the case where the user is | |
| logged in during a distribution upgrade or for non-XDG desktop | |
| environments which do not run the command as an autostart) you | |
| may invoke it manually during your program initialisation. This | |
| is not recommended for all application authors -- it is your | |
| choice if this use case concerns you enough. | |
| </p> | |
| <p> | |
| Internally, <span class="command"><strong>gsettings-data-convert</strong></span> uses a | |
| keyfile to track which settings have been migrated. The | |
| following code fragment will check that keyfile to see if your | |
| data conversion script has been run yet and, if not, will | |
| attempt to invoke the tool to run it. You should adapt it to | |
| your application as you see fit. | |
| </p> | |
| <p> | |
| </p> | |
| <pre class="programlisting"> | |
| static void | |
| ensure_migrated (const gchar *name) | |
| { | |
| gboolean needed = TRUE; | |
| GKeyFile *kf; | |
| gchar **list; | |
| gsize i, n; | |
| kf = g_key_file_new (); | |
| g_key_file_load_from_data_dirs (kf, "gsettings-data-convert", | |
| NULL, G_KEY_FILE_NONE, NULL); | |
| list = g_key_file_get_string_list (kf, "State", "converted", &n, NULL); | |
| if (list) | |
| { | |
| for (i = 0; i < n; i++) | |
| if (strcmp (list[i], name) == 0) | |
| { | |
| needed = FALSE; | |
| break; | |
| } | |
| g_strfreev (list); | |
| } | |
| g_key_file_free (kf); | |
| if (needed) | |
| g_spawn_command_line_sync ("gsettings-data-convert", | |
| NULL, NULL, NULL, NULL); | |
| } | |
| </pre> | |
| <p> | |
| </p> | |
| <p> | |
| Although there is the possibility that the | |
| <span class="command"><strong>gsettings-data-convert</strong></span> script will end up | |
| running multiple times concurrently with this approach, it is | |
| believed that this is safe. | |
| </p> | |
| </div> | |
| <div class="footer"> | |
| <hr>Generated by GTK-Doc V1.25.1</div> | |
| </body> | |
| </html> |