/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 12:51:35 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20140414125135-dhuxpr3oofpzl50e
* Reworked the creation of the key-file, now with
  less code and it actually works.

* TODO:
  * create the settings handling functionality...
    Oh the fun.

Show diffs side-by-side

added added

removed removed

Lines of Context:
54
54
   * The file names are defined static, so they do not need to be re-created,
55
55
   * each and every time te object is re-created.
56
56
   */
57
 
  
58
57
  self->priv->gpump_settings = g_key_file_new ();
59
58
  
60
59
  static gchar * gpump_settings_file_uri = NULL;
 
60
  static gchar * settings_basedir = NULL;
61
61
  
62
62
  if (!(gpump_settings_file_uri)) {
63
63
    
 
64
    g_print ("Constructing path!\n");
 
65
    
64
66
    gchar * base_config_dir = g_get_user_config_dir ();
65
67
    
66
 
    gchar * settings_basedir = g_strdup_printf ("%s/%s",
 
68
    settings_basedir = g_strdup_printf ("%s/%s",
67
69
                                                base_config_dir,
68
70
                                                "gpump");
69
71
    g_free (base_config_dir);
73
75
                                               "gpump.conf");
74
76
  }
75
77
  
76
 
  /* Do not want to re-create this object every time, now do we? */
77
 
  self->priv->gpump_settings_file = g_file_new_for_path (gpump_settings_file_uri);
78
 
  
 
78
  self->priv->gpump_settings_file = g_file_new_for_path (
 
79
                                                      gpump_settings_file_uri);
79
80
  GError ** err_arr = NULL;
80
 
  GError * err = NULL;
81
 
  if (!( g_key_file_load_from_file (self->priv->gpump_settings,
82
 
                                    gpump_settings_file_uri,
83
 
                                    G_KEY_FILE_NONE,
84
 
                                    err_arr))) {
85
 
    /* File does not exist or something else might be wrong. */
86
 
    if (err_arr != NULL || *err_arr != NULL) {
87
 
      /* Did the file exist? */
88
 
      gboolean file_exists_error = FALSE;
89
 
      for (int i = 0; err_arr[i] != NULL; i++) {
90
 
        if (g_error_matches(err_arr[i],
91
 
            G_KEY_FILE_ERROR,
92
 
            G_KEY_FILE_ERROR_NOT_FOUND)) {
93
 
          file_exists_error = TRUE;
94
 
        }
95
 
        g_print ("GPumpSettingsData:\nAn %s error occured:\n\t%s\n\n",
96
 
                 g_quark_to_string (err->domain),
97
 
                 err->message);
98
 
      }
99
 
      
100
 
      if (!file_exists_error) { /* It was some other error... (IDK). */
101
 
        abort ();
102
 
      } else {
103
 
        /* The file did not exist, thus we must create a key-file and store it.
104
 
         */
105
 
        g_clear_error (err_arr);
106
 
        GFileOutputStream * out_stream = g_file_create (
107
 
                                               self->priv->gpump_settings_file,
108
 
                                               G_FILE_CREATE_PRIVATE,
109
 
                                               NULL,
110
 
                                               err_arr);
111
 
        g_object_unref (out_stream);
112
 
        
113
 
        if ( err_arr != NULL || *err_arr != NULL ) {
114
 
          g_error ("GPumpSettingsData: %s\n\t%s\n\n",
115
 
                   g_quark_to_string (err->domain),
116
 
                   err->message);
117
 
          g_clear_error (err_arr);
118
 
        }
119
 
        
120
 
        /* UI settings */
121
 
        /* -1 is undefined, these are set when the main window is displayed */
122
 
        g_key_file_set_integer (self->priv->gpump_settings, "ui","x", -1);
123
 
        g_key_file_set_integer (self->priv->gpump_settings, "ui","y", -1);
124
 
        /* 500x500 is the default window size */
125
 
        g_key_file_set_integer (self->priv->gpump_settings, "ui","h", 500);
126
 
        g_key_file_set_integer (self->priv->gpump_settings, "ui","x", 500);
127
 
        /* main settings */
128
 
        g_key_file_set_boolean (self->priv->gpump_settings,
129
 
                                "main",
130
 
                                "use dark",
131
 
                                FALSE);
132
 
        
133
 
        /* commit data to file. */
134
 
        if (!(gpump_settings_data_commit (self, err_arr))) {
135
 
          for (gint i = 0; err_arr[i] != NULL; i++) {
136
 
            err = err_arr[i];
137
 
            g_print ("GPumpSettingsData:\n An %s error occured:\n\t%s\n\n",
138
 
                     g_quark_to_string (err->domain),
139
 
                     err->message);
140
 
          }
141
 
          abort ();
142
 
        }
143
 
        g_clear_error (err_arr);
144
 
      }
 
81
  /* Dose the file exist? */
 
82
  if (!g_file_test (gpump_settings_file_uri, G_FILE_TEST_EXISTS )) {
 
83
    /* Nope, it did not exist */
 
84
    g_print ("Config file does not exist, creating it.\n");
 
85
    
 
86
    g_mkdir_with_parents (settings_basedir, 0700);
 
87
    
 
88
    GFileOutputStream * file_stream = g_file_create (
 
89
                                                self->priv->gpump_settings_file,
 
90
                                                G_FILE_CREATE_PRIVATE,
 
91
                                                NULL,
 
92
                                                err_arr);
 
93
    if (err_arr) {
 
94
      for (int i = 0; err_arr[i] != NULL; i++) {
 
95
         g_print ("GPumpSettingsData:\n An %s error occured:\n\t%s\n\n",
 
96
                   g_quark_to_string (err_arr[i]->domain),
 
97
                   err_arr[i]->message);
 
98
      }
 
99
      abort ();
 
100
    }
 
101
    /* Construct a set of default settings */
 
102
    
 
103
    /* UI settings */
 
104
    /* -1 is undefined, these are set when the main window is displayed */
 
105
    g_key_file_set_integer (self->priv->gpump_settings, "ui","x", -1);
 
106
    g_key_file_set_integer (self->priv->gpump_settings, "ui","y", -1);
 
107
    /* 500x500 is the default window size */
 
108
    g_key_file_set_integer (self->priv->gpump_settings, "ui","h", 500);
 
109
    g_key_file_set_integer (self->priv->gpump_settings, "ui","w", 500);
 
110
    /* main settings */
 
111
    g_key_file_set_boolean (self->priv->gpump_settings,
 
112
                            "main",
 
113
                            "use dark",
 
114
                            FALSE);
 
115
    g_key_file_set_boolean (self->priv->gpump_settings,
 
116
                            "main",
 
117
                            "first run",
 
118
                            TRUE);
 
119
    
 
120
    g_assert (err_arr == NULL);
 
121
    
 
122
    gchar * buff = g_key_file_to_data (self->priv->gpump_settings,
 
123
                                       NULL,
 
124
                                       err_arr);
 
125
    
 
126
    if (err_arr) {
 
127
      for (int i = 0; err_arr[i] != NULL; i++) {
 
128
         g_print ("GPumpSettingsData:\n An %s error occured:\n\t%s\n\n",
 
129
                   g_quark_to_string (err_arr[i]->domain),
 
130
                   err_arr[i]->message);
 
131
      }
 
132
      abort ();
 
133
    }
 
134
    
 
135
    gint written = g_output_stream_write (G_OUTPUT_STREAM (file_stream),
 
136
                           buff,
 
137
                           g_utf8_strlen (buff, -1),
 
138
                           NULL,
 
139
                           err_arr);
 
140
    
 
141
    if (err_arr) {
 
142
      for (int i = 0; err_arr[i] != NULL; i++) {
 
143
         g_print ("GPumpSettingsData:\n An %s error occured:\n\t%s\n\n",
 
144
                   g_quark_to_string (err_arr[i]->domain),
 
145
                   err_arr[i]->message);
 
146
      }
 
147
      abort ();
 
148
    }
 
149
    
 
150
    
 
151
    g_object_unref (file_stream);
 
152
  } else {
 
153
    /* yes, the file did exit */
 
154
    g_key_file_load_from_file (self->priv->gpump_settings,
 
155
                               gpump_settings_file_uri,
 
156
                               G_KEY_FILE_NONE,
 
157
                               err_arr);
 
158
    if (err_arr) {
 
159
      for (int i = 0; err_arr[i] != NULL; i++) {
 
160
         g_print ("GPumpSettingsData:\n An %s error occured:\n\t%s\n\n",
 
161
                   g_quark_to_string (err_arr[i]->domain),
 
162
                   err_arr[i]->message);
 
163
      }
 
164
      abort ();
145
165
    }
146
166
  }
147
 
#endif /* GPUMP_USE_GSETTINGS */
 
167
#endif
148
168
}
149
169
 
150
170
 
180
200
 
181
201
gboolean gpump_settings_data_commit (GPumpSettingsData * self,
182
202
                                     GError ** err_arr) {
 
203
  g_object_ref (G_OBJECT(self));
183
204
#if GPUMP_USE_GSETTINGS
184
205
  /* Do thothing */
185
206
  return TRUE;
186
207
#else
 
208
  
 
209
  g_print ("Commiting data to file!\n");
187
210
  g_assert ( err_arr == NULL || *err_arr == NULL);
188
211
  
189
212
  GFileOutputStream * out_stream = g_file_replace (
201
224
  gsize * len = NULL;
202
225
  gchar * buff = g_key_file_to_data (self->priv->gpump_settings, len, err_arr);
203
226
  
204
 
  if (err_arr != NULL || *err_arr != NULL) {
 
227
  if (err_arr) {
205
228
   g_object_unref (out_stream);
206
229
   g_free (len);
207
230
   g_free (buff);
214
237
                         NULL,
215
238
                         err_arr);
216
239
  
217
 
  if (err_arr != NULL || *err_arr != NULL) {
 
240
  if (err_arr) {
218
241
    g_object_unref (out_stream);
219
242
    g_free (len);
220
243
    g_free (buff);
227
250
  
228
251
  return TRUE;
229
252
#endif
 
253
  g_object_unref (G_OBJECT (self));
230
254
}
231
255
 
232
 
 
233
256
/* * Implementation of the constructor ****************************************
234
257
 *
235
258
 * See: blogs.gnome.org/xclaesse/2010/02/11/how-to-make-a-gobject-singleton/