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_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 122 of file gnc-imp-settings-csv.cpp.

123 {
124  GError *key_error = nullptr;
125  m_load_error = false;
126  auto group = get_group_prefix() + m_name;
127  auto keyfile = gnc_state_get_current ();
128 
129  m_skip_start_lines = g_key_file_get_integer (keyfile, group.c_str(), CSV_SKIP_START, &key_error);
130  m_load_error |= handle_load_error (&key_error, group);
131 
132  m_skip_end_lines = g_key_file_get_integer (keyfile, group.c_str(), CSV_SKIP_END, &key_error);
133  m_load_error |= handle_load_error (&key_error, group);
134 
135  m_skip_alt_lines = g_key_file_get_boolean (keyfile, group.c_str(), CSV_SKIP_ALT, &key_error);
136  m_load_error |= handle_load_error (&key_error, group);
137 
138  auto csv_format = g_key_file_get_boolean (keyfile, group.c_str(), CSV_FORMAT, &key_error);
139  if (key_error) csv_format = true; // default to true, but above command will return false in case of error
140  m_load_error |= handle_load_error (&key_error, group);
141  if (csv_format)
142  m_file_format = GncImpFileFormat::CSV;
143  else
144  m_file_format = GncImpFileFormat::FIXED_WIDTH;
145 
146  gchar *key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_SEP, &key_error);
147  if (key_char && *key_char != '\0')
148  m_separators = key_char;
149  m_load_error |= handle_load_error (&key_error, group);
150  if (key_char)
151  g_free (key_char);
152 
153  m_date_format = g_key_file_get_integer (keyfile, group.c_str(), CSV_DATE, &key_error);
154  m_load_error |= handle_load_error (&key_error, group);
155 
156  m_currency_format = g_key_file_get_integer (keyfile, group.c_str(), CSV_CURRENCY, &key_error);
157  m_load_error |= handle_load_error (&key_error, group);
158 
159  key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_ENCODING, &key_error);
160  if (key_char && *key_char != '\0')
161  m_encoding = key_char;
162  else
163  m_encoding = "UTF-8";
164  m_load_error |= handle_load_error (&key_error, group);
165  if (key_char)
166  g_free (key_char);
167 
168  // Widths
169  gsize list_len;
170  m_column_widths.clear();
171  gint *col_widths_int = g_key_file_get_integer_list (keyfile, group.c_str(), CSV_COL_WIDTHS,
172  &list_len, &key_error);
173  for (uint32_t i = 0; i < list_len; i++)
174  {
175  if (col_widths_int[i] > 0)
176  m_column_widths.push_back(col_widths_int[i]);
177  }
178  m_load_error |= handle_load_error (&key_error, group);
179  if (col_widths_int)
180  g_free (col_widths_int);
181 
182  return m_load_error;
183 }
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 191 of file gnc-imp-settings-csv.cpp.

192 {
193  auto keyfile = gnc_state_get_current ();
194  auto group = get_group_prefix() + m_name;
195 
196  // Start Saving the Common settings
197  g_key_file_set_string (keyfile, group.c_str(), CSV_NAME, m_name.c_str());
198 
199  g_key_file_set_integer (keyfile, group.c_str(), CSV_SKIP_START, m_skip_start_lines);
200  g_key_file_set_integer (keyfile, group.c_str(), CSV_SKIP_END, m_skip_end_lines);
201  g_key_file_set_boolean (keyfile, group.c_str(), CSV_SKIP_ALT, m_skip_alt_lines);
202  g_key_file_set_boolean (keyfile, group.c_str(), CSV_FORMAT,
203  (m_file_format == GncImpFileFormat::CSV) ? true : false);
204 
205  g_key_file_set_string (keyfile, group.c_str(), CSV_SEP, m_separators.c_str());
206  g_key_file_set_integer (keyfile, group.c_str(), CSV_DATE, m_date_format);
207  std::ostringstream cmt_ss;
208  cmt_ss << "Supported date formats: ";
209  int fmt_num = 0;
210  std::for_each (GncDate::c_formats.cbegin(), GncDate::c_formats.cend(),
211  [&cmt_ss, &fmt_num](const GncDateFormat& fmt)
212  { cmt_ss << fmt_num++ << ": '" << fmt.m_fmt << "', "; });
213  auto cmt = cmt_ss.str().substr(0, static_cast<long>(cmt_ss.tellp()) - 2);
214  g_key_file_set_comment (keyfile, group.c_str(), CSV_DATE, cmt.c_str(), nullptr);
215  g_key_file_set_integer (keyfile, group.c_str(), CSV_CURRENCY, m_currency_format);
216  g_key_file_set_string (keyfile, group.c_str(), CSV_ENCODING, m_encoding.c_str());
217 
218  if (!m_column_widths.empty())
219  g_key_file_set_integer_list (keyfile, group.c_str(), CSV_COL_WIDTHS,
220  (gint*)(m_column_widths.data()), m_column_widths.size());
221 
222  // Do a test read of encoding
223  GError *key_error = nullptr;
224  bool error = false;
225  auto enc_val = g_key_file_get_string (keyfile, group.c_str(), CSV_ENCODING, &key_error);
226  auto enc_str = std::string{enc_val};
227  if (enc_val)
228  g_free (enc_val);
229 
230  if ((key_error) || (enc_str != m_encoding.c_str()))
231  {
232  if (key_error)
233  {
234  g_warning ("Error reading group %s key %s: %s", group.c_str(), CSV_ENCODING, key_error->message);
235  g_error_free (key_error);
236  }
237  else
238  g_warning ("Error comparing group %s key %s: '%s' and '%s'", group.c_str(), CSV_ENCODING, enc_str.c_str(), group.c_str());
239  error = true;
240  }
241  return error;
242 }
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: