|
1 | 1 | #include "fastfetch.h" |
2 | 2 |
|
3 | 3 | #include <pthread.h> |
| 4 | +#include <string.h> |
4 | 5 |
|
5 | 6 | #define FF_LIBRARY_DATA_LOAD_INIT(dataObject, userLibraryName, ...) \ |
6 | 7 | static dataObject data; \ |
@@ -267,6 +268,74 @@ FFvariant ffSettingsGetXFConf(FFinstance* instance, const char* channelName, con |
267 | 268 | } |
268 | 269 | #endif //FF_HAVE_XFCONF |
269 | 270 |
|
| 271 | +#ifdef FF_HAVE_SQLITE3 |
| 272 | +#include <sqlite3.h> |
| 273 | + |
| 274 | +typedef struct SQLiteData |
| 275 | +{ |
| 276 | + FF_LIBRARY_SYMBOL(sqlite3_open_v2) |
| 277 | + FF_LIBRARY_SYMBOL(sqlite3_prepare_v2) |
| 278 | + FF_LIBRARY_SYMBOL(sqlite3_step) |
| 279 | + FF_LIBRARY_SYMBOL(sqlite3_data_count) |
| 280 | + FF_LIBRARY_SYMBOL(sqlite3_column_int) |
| 281 | + FF_LIBRARY_SYMBOL(sqlite3_finalize) |
| 282 | + FF_LIBRARY_SYMBOL(sqlite3_close) |
| 283 | +} SQLiteData; |
| 284 | + |
| 285 | +static const SQLiteData* getSQLiteData(const FFinstance* instance) |
| 286 | +{ |
| 287 | + FF_LIBRARY_DATA_LOAD_INIT(SQLiteData, instance->config.libSQLite3, "libsqlite3.so", 1); |
| 288 | + |
| 289 | + FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_open_v2) |
| 290 | + FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_prepare_v2) |
| 291 | + FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_step) |
| 292 | + FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_data_count) |
| 293 | + FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_column_int) |
| 294 | + FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_finalize) |
| 295 | + FF_LIBRARY_DATA_LOAD_SYMBOL(sqlite3_close) |
| 296 | + |
| 297 | + FF_LIBRARY_DATA_LOAD_RETURN |
| 298 | +} |
| 299 | + |
| 300 | +int ffSettingsGetSQLite3Int(FFinstance* instance, const char* dbPath, const char* query) |
| 301 | +{ |
| 302 | + const SQLiteData* data = getSQLiteData(instance); |
| 303 | + if(data == NULL) |
| 304 | + return 0; |
| 305 | + |
| 306 | + sqlite3* db; |
| 307 | + if(data->ffsqlite3_open_v2(dbPath, &db, SQLITE_OPEN_READONLY, NULL) != SQLITE_OK) |
| 308 | + return 0; |
| 309 | + |
| 310 | + sqlite3_stmt* stmt; |
| 311 | + if(data->ffsqlite3_prepare_v2(db, query, (int) strlen(query), &stmt, NULL) != SQLITE_OK) |
| 312 | + { |
| 313 | + data->ffsqlite3_close(db); |
| 314 | + return 0; |
| 315 | + } |
| 316 | + |
| 317 | + if(data->ffsqlite3_step(stmt) != SQLITE_ROW || data->ffsqlite3_data_count(stmt) < 1) |
| 318 | + { |
| 319 | + data->ffsqlite3_finalize(stmt); |
| 320 | + data->ffsqlite3_close(db); |
| 321 | + return 0; |
| 322 | + } |
| 323 | + |
| 324 | + int result = data->ffsqlite3_column_int(stmt, 0); |
| 325 | + |
| 326 | + data->ffsqlite3_finalize(stmt); |
| 327 | + data->ffsqlite3_close(db); |
| 328 | + |
| 329 | + return result; |
| 330 | +} |
| 331 | +#else //FF_HAVE_SQLITE3 |
| 332 | +int ffSettingsGetSQLite3Int(FFinstance* instance, const char* dbPath, const char* query) |
| 333 | +{ |
| 334 | + FF_UNUSED(instance, dbPath, query) |
| 335 | + return 0; |
| 336 | +} |
| 337 | +#endif //FF_HAVE_SQLITE3 |
| 338 | + |
270 | 339 | #ifdef __ANDROID__ |
271 | 340 | #include <sys/system_properties.h> |
272 | 341 | bool ffSettingsGetAndroidProperty(const char* propName, FFstrbuf* result) { |
|
0 commit comments