Changeset - ac2fd6dbfb75
[Not reviewed]
0 2 0
HanzZ - 13 years ago 2013-01-30 17:29:08
hanzz.k@gmail.com
Skype: Try to read avatars from main.db sqlite3 database
2 files changed with 59 insertions and 1 deletions:
0 comments (0 inline, 0 general)
backends/skype/main.cpp
Show inline comments
 
@@ -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) {
src/sqlite3backend.cpp
Show inline comments
 
@@ -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)));\
 
			}
0 comments (0 inline, 0 general)