~ubuntu-branches/ubuntu/trusty/modem-manager-gui/trusty-backports

« back to all changes in this revision

Viewing changes to src/settings.c

  • Committer: Package Import Robot
  • Author(s): Graham Inggs
  • Date: 2013-07-30 12:51:59 UTC
  • Revision ID: package-import@ubuntu.com-20130730125159-flzv882fhuzhmfmi
Tags: upstream-0.0.16
ImportĀ upstreamĀ versionĀ 0.0.16

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *      settings.c
 
3
 *      
 
4
 *      Copyright 2012 Alex <alex@linuxonly.ru>
 
5
 *      
 
6
 *      This program is free software: you can redistribute it and/or modify
 
7
 *      it under the terms of the GNU General Public License as published by
 
8
 *      the Free Software Foundation; either version 3 of the License, or
 
9
 *      (at your option) any later version.
 
10
 *      
 
11
 *      This program is distributed in the hope that it will be useful,
 
12
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 *      GNU General Public License for more details.
 
15
 *      
 
16
 *      You should have received a copy of the GNU General Public License
 
17
 *      along with this program. If not, see <http://www.gnu.org/licenses/>.
 
18
 */
 
19
 
 
20
#include <stdlib.h>
 
21
#include <glib.h>
 
22
#include <glib/gprintf.h>
 
23
#include <string.h>
 
24
 
 
25
#include "settings.h"
 
26
 
 
27
 
 
28
settings_t gmm_settings_open(gchar *appname, gchar *filename)
 
29
{
 
30
        settings_t settings;
 
31
        const gchar *homepath; 
 
32
        gchar *confpath;
 
33
        gchar *filedata;
 
34
        gsize datasize;
 
35
        GError *error;
 
36
        
 
37
        if ((appname == NULL) || (filename == NULL)) return NULL;
 
38
        
 
39
        homepath = g_get_home_dir();
 
40
        
 
41
        if (homepath == NULL) return NULL;
 
42
        
 
43
        confpath = g_build_filename(homepath, ".config", appname, NULL);
 
44
        
 
45
        if (g_mkdir_with_parents(confpath, 0755) != 0) {
 
46
                g_warning("Cant create program settings directory");
 
47
                g_free(confpath);
 
48
                return NULL;
 
49
        }
 
50
        
 
51
        g_free(confpath);
 
52
        
 
53
        settings = g_new(struct _settings, 1);
 
54
        
 
55
        settings->filename = g_build_filename(homepath, ".config", appname, filename, NULL);
 
56
        
 
57
        settings->keyfile = g_key_file_new();
 
58
        
 
59
        error = NULL;
 
60
        
 
61
        if (g_file_get_contents(settings->filename, &filedata, &datasize, &error)) {
 
62
                if (!g_key_file_load_from_data(settings->keyfile, filedata, datasize, G_KEY_FILE_NONE, &error)) {
 
63
                        g_warning("No data loaded from file");
 
64
                        g_error_free(error);
 
65
                        error = NULL;
 
66
                }
 
67
        } else {
 
68
                g_warning("No data loaded from file");
 
69
                g_error_free(error);
 
70
                error = NULL;
 
71
        }
 
72
        
 
73
        return settings;
 
74
}
 
75
 
 
76
gboolean gmm_settings_close(settings_t settings)
 
77
{
 
78
        gchar *filedata;
 
79
        gsize datasize;
 
80
        GError *error;
 
81
        
 
82
        if (settings == NULL) return FALSE;
 
83
        
 
84
        if ((settings->filename == NULL) || (settings->keyfile == NULL)) return FALSE;
 
85
        
 
86
        error = NULL;
 
87
        
 
88
        filedata = g_key_file_to_data(settings->keyfile, &datasize, &error);
 
89
        
 
90
        if (filedata != NULL) {
 
91
                if (!g_file_set_contents(settings->filename, filedata, datasize, &error)) {
 
92
                        g_warning("No data saved to file");
 
93
                        g_error_free(error);
 
94
                        error = NULL;
 
95
                }
 
96
        } else {
 
97
                g_warning("No data saved to file");
 
98
                g_error_free(error);
 
99
                error = NULL;
 
100
        }
 
101
        
 
102
        g_free(filedata);
 
103
        g_free(settings->filename);
 
104
        g_key_file_free(settings->keyfile);
 
105
        g_free(settings);
 
106
        
 
107
        return TRUE;
 
108
}
 
109
 
 
110
gboolean gmm_settings_set_string(settings_t settings, gchar *key, gchar *value)
 
111
{
 
112
        if ((settings == NULL) || (key == NULL) || (value == NULL)) return FALSE;
 
113
        
 
114
        g_key_file_set_string(settings->keyfile, "settings", key, value);
 
115
        
 
116
        return TRUE;
 
117
}
 
118
 
 
119
gchar *gmm_settings_get_string(settings_t settings, gchar *key, gchar *defvalue)
 
120
{
 
121
        gchar *value;
 
122
        GError *error;
 
123
        
 
124
        if ((settings == NULL) || (key == NULL)) return g_strdup(defvalue);
 
125
        
 
126
        error = NULL;
 
127
        
 
128
        value = g_key_file_get_string(settings->keyfile, "settings", key, &error);
 
129
        
 
130
        if ((value == NULL) && (error != NULL)) {
 
131
                g_error_free(error);
 
132
                return g_strdup(defvalue);
 
133
        } else {
 
134
                return g_strdup(value);
 
135
        }
 
136
}
 
137
 
 
138
gboolean gmm_settings_set_boolean(settings_t settings, gchar *key, gboolean value)
 
139
{
 
140
        if ((settings == NULL) || (key == NULL)) return FALSE;
 
141
        
 
142
        g_key_file_set_boolean(settings->keyfile, "settings", key, value);
 
143
        
 
144
        return TRUE;
 
145
}
 
146
 
 
147
gboolean gmm_settings_get_boolean(settings_t settings, gchar *key, gboolean defvalue)
 
148
{
 
149
        gboolean value;
 
150
        GError *error;
 
151
        
 
152
        if ((settings == NULL) || (key == NULL)) return defvalue;
 
153
        
 
154
        error = NULL;
 
155
        
 
156
        value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error);
 
157
        
 
158
        if ((error != NULL)) {
 
159
                g_error_free(error);
 
160
                return defvalue;
 
161
        } else {
 
162
                return value;
 
163
        }
 
164
}
 
165
 
 
166
gboolean gmm_settings_set_int(settings_t settings, gchar *key, gint value)
 
167
{
 
168
        if ((settings == NULL) || (key == NULL)) return FALSE;
 
169
        
 
170
        g_key_file_set_integer(settings->keyfile, "settings", key, value);
 
171
        
 
172
        return TRUE;
 
173
}
 
174
 
 
175
gint gmm_settings_get_int(settings_t settings, gchar *key, gint defvalue)
 
176
{
 
177
        gint value;
 
178
        GError *error;
 
179
        
 
180
        if ((settings == NULL) || (key == NULL)) return defvalue;
 
181
        
 
182
        error = NULL;
 
183
        
 
184
        value = g_key_file_get_integer(settings->keyfile, "settings", key, &error);
 
185
        
 
186
        if ((error != NULL)) {
 
187
                g_error_free(error);
 
188
                return defvalue;
 
189
        } else {
 
190
                return value;
 
191
        }
 
192
}
 
193
 
 
194
gboolean gmm_settings_set_double(settings_t settings, gchar *key, gdouble value)
 
195
{
 
196
        if ((settings == NULL) || (key == NULL)) return FALSE;
 
197
        
 
198
        g_key_file_set_double(settings->keyfile, "settings", key, value);
 
199
        
 
200
        return TRUE;
 
201
}
 
202
 
 
203
gdouble gmm_settings_get_double(settings_t settings, gchar *key, gdouble defvalue)
 
204
{
 
205
        gdouble value;
 
206
        GError *error;
 
207
        
 
208
        if ((settings == NULL) || (key == NULL)) return defvalue;
 
209
        
 
210
        error = NULL;
 
211
        
 
212
        value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error);
 
213
        
 
214
        if ((error != NULL)) {
 
215
                g_error_free(error);
 
216
                return defvalue;
 
217
        } else {
 
218
                return value;
 
219
        }
 
220
}