GnuCash  5.6-150-g038405b370+
Files | Functions

Files

file  gnc-features.h
 Utility functions for file access.
 

Functions

gchar * gnc_features_test_unknown (QofBook *book)
 Test if the current book relies on features only introduced in a more recent version of GnuCash. More...
 
void gnc_features_set_unused (QofBook *book, const gchar *feature)
 Indicate that the current book does not use the given feature. More...
 
void gnc_features_set_used (QofBook *book, const gchar *feature)
 Indicate that the current book uses the given feature. More...
 
gboolean gnc_features_check_used (QofBook *, char const *feature)
 

Defined features

#define GNC_FEATURE_CREDIT_NOTES   "Credit Notes"
 
#define GNC_FEATURE_NUM_FIELD_SOURCE   "Number Field Source"
 
#define GNC_FEATURE_KVP_EXTRA_DATA   "Extra data in addresses, jobs or invoice entries"
 
#define GNC_FEATURE_BOOK_CURRENCY   "Use a Book-Currency"
 
#define GNC_FEATURE_GUID_BAYESIAN   "Account GUID based Bayesian data"
 
#define GNC_FEATURE_GUID_FLAT_BAYESIAN   "Account GUID based bayesian with flat KVP"
 
#define GNC_FEATURE_SQLITE3_ISO_DATES   "ISO-8601 formatted date strings in SQLite3 databases."
 
#define GNC_FEATURE_REG_SORT_FILTER   "Register sort and filter settings stored in .gcm file"
 
#define GNC_FEATURE_BUDGET_UNREVERSED   "Use natural signs in budget amounts"
 
#define GNC_FEATURE_BUDGET_SHOW_EXTRA_ACCOUNT_COLS   "Show extra account columns in the Budget View"
 
#define GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE   "Use a dedicated opening balance account identified by an 'equity-type' slot"
 

Detailed Description

Function Documentation

◆ gnc_features_set_unused()

void gnc_features_set_unused ( QofBook *  book,
const gchar *  feature 
)

Indicate that the current book does not use the given feature.

This will allow older versions of GnuCash that don't support this feature to load this book.

Definition at line 124 of file gnc-features.cpp.

125 {
126  g_return_if_fail (book);
127  g_return_if_fail (feature);
128 
129  /* Can't set an unknown feature */
130  auto iter = features_table.find (feature);
131  if (iter == features_table.end ())
132  {
133  PWARN("Tried to set unknown feature as unused.");
134  return;
135  }
136 
137  qof_book_unset_feature (book, feature);
138 }
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250

◆ gnc_features_set_used()

void gnc_features_set_used ( QofBook *  book,
const gchar *  feature 
)

Indicate that the current book uses the given feature.

This will prevent older versions of GnuCash that don't support this feature to refuse to load this book.

Definition at line 107 of file gnc-features.cpp.

108 {
109  g_return_if_fail (book);
110  g_return_if_fail (feature);
111 
112  /* Can't set an unknown feature */
113  auto iter = features_table.find (feature);
114  if (iter == features_table.end ())
115  {
116  PWARN("Tried to set unknown feature as used.");
117  return;
118  }
119 
120  qof_book_set_feature (book, feature, iter->second.data());
121 }
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250

◆ gnc_features_test_unknown()

gchar* gnc_features_test_unknown ( QofBook *  book)

Test if the current book relies on features only introduced in a more recent version of GnuCash.

Returns a message to display if we found unknown features, NULL if we're okay.

Definition at line 82 of file gnc-features.cpp.

83 {
84  auto unknowns {qof_book_get_unknown_features (book, features_table)};
85  if (unknowns.empty())
86  return nullptr;
87 
88  auto obsolete = std::remove_if(unknowns.begin(), unknowns.end(),
89  [](auto& unknown){
90  return obsolete_features.find(unknown.first) != obsolete_features.end();
91  });
92  while (obsolete != unknowns.end())
93  {
94  qof_book_unset_feature(book, obsolete->first.data());
95  obsolete = unknowns.erase(obsolete);
96  }
97 
98  if (unknowns.empty())
99  return nullptr;
100 
101  auto accum = [](const auto& a, const auto& b){ return a + "\n* " + b.second.data(); };
102  auto msg {std::accumulate (unknowns.begin(), unknowns.end(),
103  std::string (_(header)), accum)};
104  return g_strdup (msg.c_str());
105 }