/gpump/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/gpump/trunk

« back to all changes in this revision

Viewing changes to src/GPumpSettingsData.c

  • Committer: Gustav Hatvigsson
  • Date: 2014-04-14 07:33:32 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20140414073332-eagun3d8y56k3dtd
* Switched to GKeyFile instead of GSettings, for the time being.

** This is untested code **

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
G_DEFINE_TYPE (GPumpSettingsData, gpump_settings_data, G_TYPE_OBJECT)
5
5
 
6
6
 
 
7
/* Private datastructure */
 
8
struct GPumpSettingsData {
 
9
#if GPUMP_USE_GSETTINGS
 
10
  /* org.gego.gpump.ui */
 
11
  GSettings * ui_settings;
 
12
  /* org.gego.gpump */
 
13
  GSettings * gpump_settings;
 
14
#else
 
15
  GKeyFile * gpump_settings; /* Stores both UI and other settings... */
 
16
  GFile * gpump_settigs_file;
 
17
#endif /* GPUMP_USE_GSETTINGS */
 
18
}
 
19
 
7
20
/* * Override the default constructer *****************************************/
8
21
GObject * _constructor (GType type,
9
22
                        guint n_construct_params,
20
33
 
21
34
void gpump_settings_data_init (GPumpSettingsData * self) {
22
35
  g_print ("Init GPumpSettingsData\n");
 
36
  
 
37
  self->priv = GPUMP_SETTINGS_DATA_GET_PRIVATE (self);
 
38
  
 
39
#if GPUMP_USE_GSETTINGS
 
40
  /* This will not be compiled, this will have to be implemented later...
 
41
   * much later...
 
42
   */
23
43
  self->ui_settings = g_settings_new ("org.gego.gpump.ui");
24
44
  self->gpump_settings = g_settings_new ("org.gego.gpump");
 
45
#else
 
46
  
 
47
  /* Construct the path for the files, 1) the GPump settings 2) the GPump UI 
 
48
   * settings.
 
49
   *
 
50
   * The file names are defined static, so they do not need to be re-created,
 
51
   * each and every time te object is re-created.
 
52
   */
 
53
  
 
54
  self->priv->gpump_settings = g_key_file_new ();
 
55
  
 
56
  static gchar * gpump_settings_file_uri = NULL;
 
57
  
 
58
  if (!(gpump_settings_file_uri)) {
 
59
    
 
60
    gchar * base_config_dir = g_get_user_config_dir ();
 
61
    
 
62
    gchar * settings_basedir = g_strdup_printf ("%s/%s",
 
63
                                                base_config_dir,
 
64
                                                "gpump");
 
65
    g_free (base_config_dir);
 
66
    
 
67
    gpump_settings_file_uri = g_strdup_printf ("%s/%s",
 
68
                                               settings_basedir,
 
69
                                               "gpump.conf");
 
70
  }
 
71
  
 
72
  /* Do not want to re-create this object every time, now do we? */
 
73
  self->priv->gpump_settings_file = g_file_new_from_path (gpump_settings_uri);
 
74
  
 
75
  GError * err = NULL;
 
76
  if (!( g_key_file_load_from_file (self->priv->gpump_settings,
 
77
                                    pump_settings_file_uri,
 
78
                                    G_KEY_FILE_NONE,
 
79
                                    err)) {
 
80
    /* File does not exist or something else might be wrong. */
 
81
    if (err) {
 
82
      /* Did the file exist? */
 
83
      if (!(g_error_match(err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND))) {
 
84
        g_error ("GPumpSettingsData:\nAn %s error occured:\n\t%s\n\n",
 
85
                 g_quark_to_string (err->domain),
 
86
                 err->message);
 
87
        g_clear_error (err);
 
88
      } else { 
 
89
        /* The file did not exist, thus we must create a key-file and store it.
 
90
         */
 
91
        g_clear_error (err);
 
92
        GOutputStream * out_stream = g_file_create (
 
93
                                               self->priv->gpump_settings_file,
 
94
                                               G_FILE_CREATE_PRIVATE,
 
95
                                               NULL,
 
96
                                               err);
 
97
        g_object_unref (out_stream);
 
98
        
 
99
        if (err) {
 
100
          g_error ("GPumpSettingsData: %s\n\t%s\n\n",
 
101
                   g_quark_to_string (err->domain),
 
102
                   err->messarge);
 
103
          g_clear_error (err);
 
104
        }
 
105
        
 
106
        /* UI settings */
 
107
        /* -1 is undefined, these are set when the main window is displayed */
 
108
        g_key_file_set_integer (self->priv->gpump_settings, "ui","x", -1);
 
109
        g_key_file_set_integer (self->priv->gpump_settings, "ui","y", -1);
 
110
        /* 500x500 is the default window size */
 
111
        g_key_file_set_integer (self->priv->gpump_settings, "ui","h", 500);
 
112
        g_key_file_set_integer (self->priv->gpump_settings, "ui","x", 500);
 
113
        /* main settings */
 
114
        g_key_file_set_boolean (self->priv->gpump_settings,
 
115
                                "main",
 
116
                                "use dark",
 
117
                                FALSE);
 
118
        
 
119
        /* commit data to file. */
 
120
        if (!(gpump_settings_data_commit (self, err))) {
 
121
          g_error ("GPumpSettingsData:\n An %s error occured:\n\t%s\n\n",
 
122
                   g_quark_to_string (err->domain),
 
123
                   err->messarge);
 
124
        }
 
125
      }
 
126
    }
 
127
  }
 
128
#endif /* GPUMP_USE_GSETTINGS */
25
129
}
26
130
 
27
131
 
29
133
  GObjectClass * parent = G_OBJECT_CLASS (klass);
30
134
  
31
135
  parent->constructor = _constructor;
32
 
}
 
136
  
 
137
  g_type_class_add_private (klass, sizeof (GPumpSettingsDataPrivate);
 
138
}
 
139
 
 
140
 
 
141
void gpump_settings_data_set (GPumpSettingsData * self,
 
142
                              gchar * name,
 
143
                              GVariant * data) {
 
144
#if GPUMP_USE_GSETTINGS
 
145
  /* TODO */
 
146
#else
 
147
  
 
148
#endif
 
149
}
 
150
 
 
151
 
 
152
GVariant * gpump_settings_data_get (GPumpSettingsData * self,
 
153
                                    gchar * name) {
 
154
#if GPUMP_USE_GSETTINGS
 
155
  /* TODO */
 
156
#else
 
157
  
 
158
#endif
 
159
}
 
160
 
 
161
 
 
162
gboolean gpump_settings_data_commit (GPumpSettingsData * self,
 
163
                                     GError * err) {
 
164
#if GPUMP_USE_GSETTINGS
 
165
  /* Do thothing */
 
166
  return TRUE;
 
167
#else
 
168
  g_assert (err == NULL);
 
169
  
 
170
  GFileOutputStream * out_stream = g_file_replace (
 
171
                                                self->priv->gpump_settings_file,
 
172
                                                NULL,
 
173
                                                FALSE,
 
174
                                                G_FILE_CREATE_PRIVATE,
 
175
                                                NULL,
 
176
                                                err);
 
177
  if (err) {
 
178
    g_object_unref (out_stream);
 
179
    return FALSE;
 
180
  }
 
181
  
 
182
  gsize * len = NULL;
 
183
  gchar * buff = g_key_file_to_data (self->priv->gpump_settings, len, err);
 
184
  
 
185
  if (err) {
 
186
   g_object_unref (out_stream);
 
187
   g_free (len);
 
188
   g_free (buff);
 
189
   return FALSE;
 
190
  }
 
191
  
 
192
  g_output_stream_write (out_stream,
 
193
                         buff,
 
194
                         len,
 
195
                         NULL,
 
196
                         err);
 
197
  
 
198
  if (err) {
 
199
    g_object_unref (out_stream);
 
200
    g_free (len);
 
201
    g_free (buff);
 
202
    return FALSE;
 
203
  }
 
204
  
 
205
  g_object_unref (out_stream);
 
206
  g_free (len);
 
207
  g_free (buff);
 
208
  
 
209
  return TRUE;
 
210
#endif
 
211
}
 
212
 
33
213
 
34
214
/* * Implementation of the constructor ****************************************
35
215
 *