GnuCash  5.6-150-g038405b370+
Public Member Functions | Data Fields | Protected Member Functions
CsvImportSettings Struct Referenceabstract
Inheritance diagram for CsvImportSettings:
CsvPriceImpSettings CsvTransImpSettings

Public Member Functions

bool save (void)
 Save the gathered widget properties to a key File. More...
 
bool load (void)
 Load the widget properties from a key File. More...
 
void remove (void)
 Remove the preset from the state file.
 

Data Fields

std::string m_name
 
GncImpFileFormat m_file_format
 
std::string m_encoding
 
int m_date_format
 
int m_currency_format
 
uint32_t m_skip_start_lines
 
uint32_t m_skip_end_lines
 
bool m_skip_alt_lines
 
std::string m_separators
 
bool m_enable_escape
 
bool m_load_error
 
std::vector< uint32_t > m_column_widths
 

Protected Member Functions

virtual const char * get_group_prefix (void)=0
 

Detailed Description

Definition at line 51 of file gnc-imp-settings-csv.hpp.

Member Function Documentation

◆ load()

bool CsvImportSettings::load ( void  )

Load the widget properties from a key File.

Returns
true if there was a problem.

Definition at line 123 of file gnc-imp-settings-csv.cpp.

124 {
125  GError *key_error = nullptr;
126  m_load_error = false;
127  auto group = get_group_prefix() + m_name;
128  auto keyfile = gnc_state_get_current ();
129 
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);
132 
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);
135 
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);
138 
139  auto csv_format = g_key_file_get_boolean (keyfile, group.c_str(), CSV_FORMAT, &key_error);
140  if (key_error) csv_format = true; // default to true, but above command will return false in case of error
141  m_load_error |= handle_load_error (&key_error, group);
142  if (csv_format)
143  m_file_format = GncImpFileFormat::CSV;
144  else
145  m_file_format = GncImpFileFormat::FIXED_WIDTH;
146 
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);
151  if (key_char)
152  g_free (key_char);
153 
154  m_enable_escape = g_key_file_get_boolean (keyfile, group.c_str(), CSV_ESC, &key_error);
155  // Older import settings will not have a value for escape processing
156  // so set it to true if no value is found in the file format settings
157  if (key_error && key_error->code == G_KEY_FILE_ERROR_KEY_NOT_FOUND)
158  m_enable_escape = true;
159  else
160  m_load_error |= handle_load_error (&key_error, group);
161 
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);
164 
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);
167 
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;
171  else
172  m_encoding = "UTF-8";
173  m_load_error |= handle_load_error (&key_error, group);
174  if (key_char)
175  g_free (key_char);
176 
177  // Widths
178  gsize list_len;
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++)
183  {
184  if (col_widths_int[i] > 0)
185  m_column_widths.push_back(col_widths_int[i]);
186  }
187  m_load_error |= handle_load_error (&key_error, group);
188  if (col_widths_int)
189  g_free (col_widths_int);
190 
191  return m_load_error;
192 }
GKeyFile * gnc_state_get_current(void)
Returns a pointer to the most recently loaded state.
Definition: gnc-state.c:248

◆ save()

bool CsvImportSettings::save ( void  )

Save the gathered widget properties to a key File.

Returns
true if there was a problem in saving.

Definition at line 200 of file gnc-imp-settings-csv.cpp.

201 {
202  auto keyfile = gnc_state_get_current ();
203  auto group = get_group_prefix() + m_name;
204 
205  // Start Saving the Common settings
206  g_key_file_set_string (keyfile, group.c_str(), CSV_NAME, m_name.c_str());
207 
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);
213 
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: ";
219  int fmt_num = 0;
220  std::for_each (GncDate::c_formats.cbegin(), GncDate::c_formats.cend(),
221  [&cmt_ss, &fmt_num](const GncDateFormat& fmt)
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());
227 
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());
231 
232  // Do a test read of encoding
233  GError *key_error = nullptr;
234  bool error = false;
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};
237  if (enc_val)
238  g_free (enc_val);
239 
240  if ((key_error) || (enc_str != m_encoding.c_str()))
241  {
242  if (key_error)
243  {
244  g_warning ("Error reading group %s key %s: %s", group.c_str(), CSV_ENCODING, key_error->message);
245  g_error_free (key_error);
246  }
247  else
248  g_warning ("Error comparing group %s key %s: '%s' and '%s'", group.c_str(), CSV_ENCODING, enc_str.c_str(), group.c_str());
249  error = true;
250  }
251  return error;
252 }
GKeyFile * gnc_state_get_current(void)
Returns a pointer to the most recently loaded state.
Definition: gnc-state.c:248
const std::string m_fmt
A string representing the format.
static const std::vector< GncDateFormat > c_formats
A vector with all the date formats supported by the string constructor.

The documentation for this struct was generated from the following files: