Added rudimentary SQLite support.

This commit is contained in:
tastytea 2019-05-14 20:45:48 +02:00
parent 8da0ad07f0
commit 76548146c0
Signed by: tastytea
GPG Key ID: CFC39497F1B26E07
6 changed files with 136 additions and 6 deletions

View File

@ -34,7 +34,7 @@ link_directories(${LIBXDG_BASEDIR_LIBRARY_DIRS})
link_directories(${SQLITE3_LIBRARY_DIRS})
set(COMMON_LIBRARIES
${LIBXDG_BASEDIR_LIBRARIES} vsqlitepp)
${LIBXDG_BASEDIR_LIBRARIES} vsqlitepp stdc++fs)
# Write version in header
configure_file(

View File

@ -4,8 +4,9 @@
This program is not usable at the moment. Most of the described functions are
not yet available.
*remwharead* saves URLs of things you read in a database along with the current
date and time, title, description, the full text of the page and optional tags.
*remwharead* saves URLs of things you read in a database along with an URL to
the archived version, the current date and time, title, description, the full
text of the page and optional tags.
== Usage

View File

@ -2,7 +2,7 @@
:doctype: manpage
:Author: tastytea
:Email: tastytea@tastytea.de
:Date: 2019-05-12
:Date: 2019-05-14
:Revision: 0.0.0
:man source: remwharead
:man manual: General Commands Manual
@ -19,8 +19,9 @@ remwharead - Remember what you read, and when
== DESCRIPTION
*remwharead* saves URLs of things you read in a database along with the current
date and time, title, description, the full text of the page and optional tags.
*remwharead* saves URLs of things you read in a database along with an URL to
the archived version, the current date and time, title, description, the full
text of the page and optional tags.
== OPTIONS

View File

@ -32,5 +32,11 @@ int main(const int argc, const char *argv[])
return opts.status_code;
}
Database db;
db ? cout << "success." : cout << "failure.";
cout << endl;
db.store("a", "b", "c", "d", "e", "f", "g");
return 0;
}

78
src/sqlite.cpp Normal file
View File

@ -0,0 +1,78 @@
/* This file is part of remwharead.
* Copyright © 2019 tastytea <tastytea@tastytea.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <exception>
#include <iostream>
#include <basedir.h>
#include <sqlite/execute.hpp>
#include <sqlite/query.hpp>
#include "sqlite.hpp"
using std::cerr;
using std::endl;
Database::Database()
: _connected(false)
{
try
{
xdgHandle xdg;
xdgInitHandle(&xdg);
_dbpath = xdgDataHome(&xdg) / fs::path("remwharead");
xdgWipeHandle(&xdg);
if (!fs::exists(_dbpath))
{
fs::create_directories(_dbpath);
}
_dbpath /= "database.sqlite";
_con = std::make_unique<sqlite::connection>(_dbpath);
sqlite::execute(*_con, "CREATE TABLE IF NOT EXISTS remwharead("
"uri TEXT, archive_uri TEXT, datetime TEXT, tags TEXT, "
"title TEXT, description TEXT, fulltext TEXT);", true);
_connected = true;
}
catch (std::exception &e)
{
cerr << "Error: " << e.what() << endl;
}
}
Database::operator bool() const
{
return _connected;
}
void Database::store(const string &uri, const string &archive_uri,
const string &datetime, const string &tags,
const string &title, const string &description,
const string &fulltext)
{
try
{
sqlite::execute ins(*_con, "INSERT INTO remwharead "
"VALUES(?, ?, ?, ?, ?, ?, ?);");
ins % uri % archive_uri % datetime % tags
% title % description % fulltext;
ins();
}
catch (std::exception &e)
{
cerr << "Error: " << e.what() << endl;
}
}

44
src/sqlite.hpp Normal file
View File

@ -0,0 +1,44 @@
/* This file is part of remwharead.
* Copyright © 2019 tastytea <tastytea@tastytea.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef REMWHAREAD_SQLITE_HPP
#define REMWHAREAD_SQLITE_HPP
#include <experimental/filesystem>
#include <memory>
#include <string>
#include <sqlite/connection.hpp>
namespace fs = std::experimental::filesystem;
using std::string;
class Database
{
public:
Database();
operator bool() const;
void store(const string &uri, const string &archive_uri,
const string &datetime, const string &tags, const string &title,
const string &description, const string &fulltext);
private:
fs::path _dbpath;
std::unique_ptr<sqlite::connection> _con;
bool _connected;
};
#endif // REMWHAREAD_SQLITE_HPP