add first draft of sqlliteConnector
parent
2a09d8bee3
commit
2383a1bf23
|
@ -0,0 +1,148 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// sqliteconnector.cpp
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 18.07.2021
|
||||||
|
// Description:
|
||||||
|
//
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "sqliteConnector.h"
|
||||||
|
#include "sqlite3.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
SqliteConnector::SqliteConnector(const string &DBpath) : _path(DBpath)
|
||||||
|
{
|
||||||
|
//TODO create sql Database at root and this one is the check
|
||||||
|
sqlite3 *db;
|
||||||
|
|
||||||
|
int result;
|
||||||
|
//change this
|
||||||
|
|
||||||
|
//iv_unlink(DB_FILE);
|
||||||
|
|
||||||
|
result = sqlite3_open(_path.c_str(), &db);
|
||||||
|
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//could not open
|
||||||
|
}
|
||||||
|
//modtime INTEGER,
|
||||||
|
result = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS metadata (etag VARCHAR, path VARCHAR, parentPath VARCHAR, PRIMARY KEY (path))", NULL, 0, NULL);
|
||||||
|
|
||||||
|
//TODO move
|
||||||
|
sqlite3_close(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
SqliteConnector::~SqliteConnector()
|
||||||
|
{
|
||||||
|
//TODO DB does
|
||||||
|
//sqlite3_close(_db);
|
||||||
|
Log::writeInfoLog("closed DB");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<WebDAVItem> SqliteConnector::getItemsChildren(const string &parentPath)
|
||||||
|
{
|
||||||
|
//TODO call open?
|
||||||
|
//open();
|
||||||
|
//
|
||||||
|
sqlite3 *db;
|
||||||
|
int result = sqlite3_open(_path.c_str(), &db);
|
||||||
|
|
||||||
|
int rs;
|
||||||
|
sqlite3_stmt *stmt = 0;
|
||||||
|
std::vector<WebDAVItem> items;
|
||||||
|
|
||||||
|
rs = sqlite3_prepare_v2(db, "SELECT etag, path FROM 'metadata' WHERE parentPath = ?;", -1, &stmt, 0);
|
||||||
|
rs = sqlite3_bind_text(stmt, 1, parentPath.c_str(), parentPath.length(), NULL);
|
||||||
|
|
||||||
|
while (sqlite3_step(stmt) == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
WebDAVItem temp;
|
||||||
|
|
||||||
|
temp.etag = reinterpret_cast<const char *>(sqlite3_column_text(stmt, 0));
|
||||||
|
temp.path = reinterpret_cast<const char *>(sqlite3_column_text(stmt, 1));
|
||||||
|
//temp.downloaded = static_cast<IsDownloaded>(sqlite3_column_int(stmt,8));
|
||||||
|
//TODO check if is downloaded and set this status
|
||||||
|
//std::string title;
|
||||||
|
//std::string localPath;
|
||||||
|
//FileState state{FileState::ICLOUD};
|
||||||
|
//Filetype
|
||||||
|
//add type or do automatically? Itemtype type;
|
||||||
|
//TODO add to DB
|
||||||
|
//std::string lastEditDate{"Error"};
|
||||||
|
//double size;
|
||||||
|
items.push_back(temp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_finalize(stmt);
|
||||||
|
sqlite3_close(db);
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
//the first one is the parent and therefor should not be saved
|
||||||
|
bool SqliteConnector::saveItemsChildren(const std::vector<WebDAVItem> &children)
|
||||||
|
{
|
||||||
|
sqlite3 *db;
|
||||||
|
|
||||||
|
int result;
|
||||||
|
//TODO change this
|
||||||
|
//iv_unlink(DB_FILE);
|
||||||
|
|
||||||
|
result = sqlite3_open(_path.c_str(), &db);
|
||||||
|
|
||||||
|
//if (result)
|
||||||
|
//could not open
|
||||||
|
|
||||||
|
string parent = "test";
|
||||||
|
string stmt;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < children.size(); i++)
|
||||||
|
{
|
||||||
|
//first item is parent
|
||||||
|
//is cut off before, there change to somewhere else
|
||||||
|
//not correct for main folder as there is no parent...
|
||||||
|
//TODO is always the parent, i just cut it of for the first entry:tabf
|
||||||
|
if(i == 0)
|
||||||
|
parent = children.at(i).path;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//TODO unquote etag
|
||||||
|
Log::writeInfoLog(children.at(i).etag + "path " + children.at(i).path);
|
||||||
|
stmt = stmt + " INSERT INTO metadata (etag, path, parentPath) VALUES ('" + children.at(i).etag + "','" + children.at(i).path + "','" + parent + "');";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result = sqlite3_exec(db, stmt.c_str(), NULL, 0, NULL);
|
||||||
|
|
||||||
|
if (result == SQLITE_CONSTRAINT)
|
||||||
|
{
|
||||||
|
//TODO what if item is already there? update? --> use replace?
|
||||||
|
}
|
||||||
|
else if (result != SQLITE_DONE)
|
||||||
|
{
|
||||||
|
Log::writeErrorLog(sqlite3_errmsg(db) + std::string(" (Error Code: ") + std::to_string(result) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
std::string _etag;
|
||||||
|
std::string _path;
|
||||||
|
std::string _title;
|
||||||
|
std::string _localPath;
|
||||||
|
FileState _state{FileState::ICLOUD};
|
||||||
|
Itemtype _type;
|
||||||
|
std::string _lastEditDate{"Error"};
|
||||||
|
double _size;
|
||||||
|
std::string _fileType;
|
||||||
|
*/
|
||||||
|
|
||||||
|
sqlite3_close(db);
|
||||||
|
return true;
|
||||||
|
//never need to get structure under the folder, as it is better to get it anyway?
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
// sqliteconnector.h
|
||||||
|
//
|
||||||
|
// Author: JuanJakobo
|
||||||
|
// Date: 18.07.2021
|
||||||
|
// Description:
|
||||||
|
//
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef SQLITECONNECTOR
|
||||||
|
#define SQLITECONNECTOR
|
||||||
|
|
||||||
|
#include "webDAVModel.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class SqliteConnector
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
SqliteConnector(const std::string &DBpath);
|
||||||
|
|
||||||
|
~SqliteConnector();
|
||||||
|
|
||||||
|
//TODO DOKU, open neede?
|
||||||
|
bool open();
|
||||||
|
|
||||||
|
std::vector<WebDAVItem> getItemsChildren(const std::string &parenthPath);
|
||||||
|
bool saveItemsChildren(const std::vector<WebDAVItem> &children);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string _path;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue