Skype: Try to read avatars from main.db sqlite3 database
This commit is contained in:
parent
88c5bce5ba
commit
ac2fd6dbfb
2 changed files with 59 additions and 1 deletions
|
@ -22,6 +22,8 @@
|
|||
#endif
|
||||
#include <dbus-1.0/dbus/dbus-glib-lowlevel.h>
|
||||
|
||||
#include "sqlite3.h"
|
||||
|
||||
|
||||
DEFINE_LOGGER(logger, "backend");
|
||||
|
||||
|
@ -39,6 +41,34 @@ class SpectrumNetworkPlugin;
|
|||
}
|
||||
|
||||
|
||||
|
||||
// Prepare the SQL statement
|
||||
#define PREP_STMT(sql, str) \
|
||||
if(sqlite3_prepare_v2(db, std::string(str).c_str(), -1, &sql, NULL)) { \
|
||||
LOG4CXX_ERROR(logger, str<< (sqlite3_errmsg(db) == NULL ? "" : sqlite3_errmsg(db))); \
|
||||
sql = NULL; \
|
||||
}
|
||||
|
||||
// Finalize the prepared statement
|
||||
#define FINALIZE_STMT(prep) \
|
||||
if(prep != NULL) { \
|
||||
sqlite3_finalize(prep); \
|
||||
}
|
||||
|
||||
#define BEGIN(STATEMENT) sqlite3_reset(STATEMENT);\
|
||||
int STATEMENT##_id = 1;\
|
||||
int STATEMENT##_id_get = 0;\
|
||||
(void)STATEMENT##_id_get;
|
||||
|
||||
#define BIND_INT(STATEMENT, VARIABLE) sqlite3_bind_int(STATEMENT, STATEMENT##_id++, VARIABLE)
|
||||
#define BIND_STR(STATEMENT, VARIABLE) sqlite3_bind_text(STATEMENT, STATEMENT##_id++, VARIABLE.c_str(), -1, SQLITE_STATIC)
|
||||
#define RESET_GET_COUNTER(STATEMENT) STATEMENT##_id_get = 0;
|
||||
#define GET_INT(STATEMENT) sqlite3_column_int(STATEMENT, STATEMENT##_id_get++)
|
||||
#define GET_STR(STATEMENT) (const char *) sqlite3_column_text(STATEMENT, STATEMENT##_id_get++)
|
||||
#define GET_BLOB(STATEMENT) (const void *) sqlite3_column_blob(STATEMENT, STATEMENT##_id_get++)
|
||||
#define EXECUTE_STATEMENT(STATEMENT, NAME) if(sqlite3_step(STATEMENT) != SQLITE_DONE) {\
|
||||
LOG4CXX_ERROR(logger, NAME<< (sqlite3_errmsg(db) == NULL ? "" : sqlite3_errmsg(db)));\
|
||||
}
|
||||
|
||||
SpectrumNetworkPlugin *np;
|
||||
|
||||
|
@ -277,7 +307,34 @@ class SpectrumNetworkPlugin : public NetworkPlugin {
|
|||
g_free(filename);
|
||||
}
|
||||
g_free(username);
|
||||
|
||||
|
||||
if (photo.empty()) {
|
||||
sqlite3 *db;
|
||||
std::string db_path = std::string("/tmp/skype/") + skype->getUsername() + "/" + skype->getUsername() + "/main.db";
|
||||
if (sqlite3_open(db_path.c_str(), &db)) {
|
||||
sqlite3_close(db);
|
||||
}
|
||||
else {
|
||||
sqlite3_stmt *stmt;
|
||||
PREP_STMT(stmt, "SELECT avatar_image FROM Contacts WHERE skypename=?");
|
||||
if (stmt) {
|
||||
BEGIN(stmt);
|
||||
BIND_STR(stmt, name);
|
||||
if(sqlite3_step(stmt) == SQLITE_ROW) {
|
||||
int size = sqlite3_column_bytes(stmt, 0);
|
||||
const void *data = sqlite3_column_blob(stmt, 0);
|
||||
photo = std::string((const char *)data, size);
|
||||
}
|
||||
|
||||
int ret;
|
||||
while((ret = sqlite3_step(stmt)) == SQLITE_ROW) {
|
||||
}
|
||||
FINALIZE_STMT(stmt);
|
||||
}
|
||||
sqlite3_close(db);
|
||||
}
|
||||
}
|
||||
|
||||
std::string alias = "";
|
||||
std::cout << skype->getUsername() << " " << name << "\n";
|
||||
if (skype->getUsername() == name) {
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
#define RESET_GET_COUNTER(STATEMENT) STATEMENT##_id_get = 0;
|
||||
#define GET_INT(STATEMENT) sqlite3_column_int(STATEMENT, STATEMENT##_id_get++)
|
||||
#define GET_STR(STATEMENT) (const char *) sqlite3_column_text(STATEMENT, STATEMENT##_id_get++)
|
||||
#define GET_BLOB(STATEMENT) (const void *) sqlite3_column_blob(STATEMENT, STATEMENT##_id_get++)
|
||||
#define EXECUTE_STATEMENT(STATEMENT, NAME) if(sqlite3_step(STATEMENT) != SQLITE_DONE) {\
|
||||
LOG4CXX_ERROR(logger, NAME<< (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db)));\
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue