125 GError *key_error =
nullptr;
126 m_load_error =
false;
127 auto group = get_group_prefix() + m_name;
130 m_skip_start_lines = g_key_file_get_integer (keyfile, group.c_str(), CSV_SKIP_START, &key_error);
131 m_load_error |= handle_load_error (&key_error, group);
133 m_skip_end_lines = g_key_file_get_integer (keyfile, group.c_str(), CSV_SKIP_END, &key_error);
134 m_load_error |= handle_load_error (&key_error, group);
136 m_skip_alt_lines = g_key_file_get_boolean (keyfile, group.c_str(), CSV_SKIP_ALT, &key_error);
137 m_load_error |= handle_load_error (&key_error, group);
139 auto csv_format = g_key_file_get_boolean (keyfile, group.c_str(), CSV_FORMAT, &key_error);
140 if (key_error) csv_format =
true;
141 m_load_error |= handle_load_error (&key_error, group);
143 m_file_format = GncImpFileFormat::CSV;
145 m_file_format = GncImpFileFormat::FIXED_WIDTH;
147 gchar *key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_SEP, &key_error);
148 if (key_char && *key_char !=
'\0')
149 m_separators = key_char;
150 m_load_error |= handle_load_error (&key_error, group);
154 m_enable_escape = g_key_file_get_boolean (keyfile, group.c_str(), CSV_ESC, &key_error);
157 if (key_error && key_error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)
158 m_enable_escape =
true;
160 m_load_error |= handle_load_error (&key_error, group);
162 m_date_format = g_key_file_get_integer (keyfile, group.c_str(), CSV_DATE, &key_error);
163 m_load_error |= handle_load_error (&key_error, group);
165 m_currency_format = g_key_file_get_integer (keyfile, group.c_str(), CSV_CURRENCY, &key_error);
166 m_load_error |= handle_load_error (&key_error, group);
168 key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_ENCODING, &key_error);
169 if (key_char && *key_char !=
'\0')
170 m_encoding = key_char;
172 m_encoding =
"UTF-8";
173 m_load_error |= handle_load_error (&key_error, group);
179 m_column_widths.clear();
180 gint *col_widths_int = g_key_file_get_integer_list (keyfile, group.c_str(), CSV_COL_WIDTHS,
181 &list_len, &key_error);
182 for (uint32_t i = 0; i < list_len; i++)
184 if (col_widths_int[i] > 0)
185 m_column_widths.push_back(col_widths_int[i]);
187 m_load_error |= handle_load_error (&key_error, group);
189 g_free (col_widths_int);
203 auto group = get_group_prefix() + m_name;
206 g_key_file_set_string (keyfile, group.c_str(), CSV_NAME, m_name.c_str());
208 g_key_file_set_integer (keyfile, group.c_str(), CSV_SKIP_START, m_skip_start_lines);
209 g_key_file_set_integer (keyfile, group.c_str(), CSV_SKIP_END, m_skip_end_lines);
210 g_key_file_set_boolean (keyfile, group.c_str(), CSV_SKIP_ALT, m_skip_alt_lines);
211 g_key_file_set_boolean (keyfile, group.c_str(), CSV_FORMAT,
212 (m_file_format == GncImpFileFormat::CSV) ?
true :
false);
214 g_key_file_set_string (keyfile, group.c_str(), CSV_SEP, m_separators.c_str());
215 g_key_file_set_boolean (keyfile, group.c_str(), CSV_ESC, m_enable_escape);
216 g_key_file_set_integer (keyfile, group.c_str(), CSV_DATE, m_date_format);
217 std::ostringstream cmt_ss;
218 cmt_ss <<
"Supported date formats: ";
222 { cmt_ss << fmt_num++ <<
": '" << fmt.
m_fmt <<
"', "; });
223 auto cmt = cmt_ss.str().substr(0,
static_cast<long>(cmt_ss.tellp()) - 2);
224 g_key_file_set_comment (keyfile, group.c_str(), CSV_DATE, cmt.c_str(),
nullptr);
225 g_key_file_set_integer (keyfile, group.c_str(), CSV_CURRENCY, m_currency_format);
226 g_key_file_set_string (keyfile, group.c_str(), CSV_ENCODING, m_encoding.c_str());
228 if (!m_column_widths.empty())
229 g_key_file_set_integer_list (keyfile, group.c_str(), CSV_COL_WIDTHS,
230 (gint*)(m_column_widths.data()), m_column_widths.size());
233 GError *key_error =
nullptr;
235 auto enc_val = g_key_file_get_string (keyfile, group.c_str(), CSV_ENCODING, &key_error);
236 auto enc_str = std::string{enc_val};
240 if ((key_error) || (enc_str != m_encoding.c_str()))
244 g_warning (
"Error reading group %s key %s: %s", group.c_str(), CSV_ENCODING, key_error->message);
245 g_error_free (key_error);
248 g_warning (
"Error comparing group %s key %s: '%s' and '%s'", group.c_str(), CSV_ENCODING, enc_str.c_str(), group.c_str());