Rewrote QT interface to use new database interface.
parent
75dc40406c
commit
0f13bc8d9b
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required (VERSION 3.2)
|
cmake_minimum_required (VERSION 3.2)
|
||||||
project (whyblocked
|
project (whyblocked
|
||||||
VERSION 0.13.1
|
VERSION 0.14.0
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ MainWindow::MainWindow(QMainWindow *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
, _config("whyblocked.cfg")
|
, _config("whyblocked.cfg")
|
||||||
, _headersize({ 250, 125, 125 })
|
, _headersize({ 250, 125, 125 })
|
||||||
|
, _database()
|
||||||
{
|
{
|
||||||
std::locale::global(std::locale(""));
|
std::locale::global(std::locale(""));
|
||||||
|
|
||||||
|
@ -175,7 +176,7 @@ MainWindow::~MainWindow()
|
||||||
_config.write();
|
_config.write();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::populate_tableview(const result_view &entries)
|
void MainWindow::populate_tableview(const vector<Database::data> &entries)
|
||||||
{
|
{
|
||||||
_model->clear();
|
_model->clear();
|
||||||
_model->setHorizontalHeaderLabels(
|
_model->setHorizontalHeaderLabels(
|
||||||
|
@ -188,18 +189,18 @@ void MainWindow::populate_tableview(const result_view &entries)
|
||||||
tableview->horizontalHeader()->resizeSection(1, _headersize[1]);
|
tableview->horizontalHeader()->resizeSection(1, _headersize[1]);
|
||||||
tableview->horizontalHeader()->resizeSection(2, _headersize[2]);
|
tableview->horizontalHeader()->resizeSection(2, _headersize[2]);
|
||||||
|
|
||||||
for (const std::tuple<string, int, string> &line : entries)
|
for (const Database::data &entry : entries)
|
||||||
{
|
{
|
||||||
add_row(QString::fromStdString(std::get<0>(line)),
|
add_row(QString::fromStdString(entry.user),
|
||||||
std::get<1>(line),
|
entry.blocked,
|
||||||
QString::fromStdString(std::get<2>(line)));
|
QString::fromStdString(entry.reason));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::reload()
|
void MainWindow::reload()
|
||||||
{
|
{
|
||||||
result_view entries;
|
vector<Database::data> entries;
|
||||||
database::view(entries);
|
entries = _database.query();
|
||||||
populate_tableview(entries);
|
populate_tableview(entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,23 +239,17 @@ void MainWindow::edit()
|
||||||
DialogAdd *dialog = new DialogAdd(this);
|
DialogAdd *dialog = new DialogAdd(this);
|
||||||
dialog->setWindowTitle(tr("Edit entry"));
|
dialog->setWindowTitle(tr("Edit entry"));
|
||||||
|
|
||||||
Dialogdata data;
|
|
||||||
QModelIndex index = tableview->selectionModel()->selectedRows().first();
|
QModelIndex index = tableview->selectionModel()->selectedRows().first();
|
||||||
data.user = index.sibling(index.row(), 0).data().toString().toStdString();
|
const string user = index.sibling(index.row(), 0).data()
|
||||||
result_details details;
|
.toString().toStdString();
|
||||||
database::details(data.user, details);
|
|
||||||
if (std::get<0>(details) == true)
|
|
||||||
{
|
|
||||||
data.blocked = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
data.blocked = 0;
|
|
||||||
}
|
|
||||||
data.reason = std::get<1>(details);
|
|
||||||
data.receipts = std::get<2>(details);
|
|
||||||
|
|
||||||
dialog->set_data(data);
|
Database::data dbdata =
|
||||||
|
_database.query("SELECT * FROM blocks WHERE user = '" +
|
||||||
|
user + "';").front();
|
||||||
|
dbdata.reason = dbdata.reason;
|
||||||
|
dbdata.receipts = dbdata.receipts;
|
||||||
|
|
||||||
|
dialog->set_data(dbdata);
|
||||||
dialog->setProperty("edit", true);
|
dialog->setProperty("edit", true);
|
||||||
dialog->show();
|
dialog->show();
|
||||||
}
|
}
|
||||||
|
@ -267,7 +262,7 @@ void MainWindow::remove()
|
||||||
for (auto &row : selection->selectedRows())
|
for (auto &row : selection->selectedRows())
|
||||||
{
|
{
|
||||||
const string user = row.data().toString().toStdString();
|
const string user = row.data().toString().toStdString();
|
||||||
database::remove(user);
|
_database.remove(user);
|
||||||
_model->removeRow(row.row());
|
_model->removeRow(row.row());
|
||||||
}
|
}
|
||||||
label_receipts->clear();
|
label_receipts->clear();
|
||||||
|
@ -303,25 +298,23 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
|
||||||
columns = "user";
|
columns = "user";
|
||||||
}
|
}
|
||||||
|
|
||||||
result_view entries;
|
vector<Database::data> entries = _database.query();
|
||||||
result_view filtered_entries;
|
vector<Database::data> filtered_entries;
|
||||||
if (database::view(entries))
|
if (!entries.empty())
|
||||||
{
|
{
|
||||||
for (const std::tuple<string, int, string> &line : entries)
|
for (const Database::data &entry : entries)
|
||||||
{
|
{
|
||||||
const string user = std::get<0>(line);
|
|
||||||
const string reason = std::get<2>(line);
|
|
||||||
wstring searchstring;
|
wstring searchstring;
|
||||||
|
|
||||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
|
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
|
||||||
|
|
||||||
if (check_user->isChecked())
|
if (check_user->isChecked())
|
||||||
{
|
{
|
||||||
searchstring += convert.from_bytes(user);
|
searchstring += convert.from_bytes(entry.user);
|
||||||
}
|
}
|
||||||
if (check_reason->isChecked())
|
if (check_reason->isChecked())
|
||||||
{
|
{
|
||||||
searchstring += convert.from_bytes(reason);
|
searchstring += convert.from_bytes(entry.reason);
|
||||||
}
|
}
|
||||||
std::transform(searchstring.begin(), searchstring.end(),
|
std::transform(searchstring.begin(), searchstring.end(),
|
||||||
searchstring.begin(), ::towlower);
|
searchstring.begin(), ::towlower);
|
||||||
|
@ -329,8 +322,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
|
||||||
text_find->text().toLower().toStdWString())
|
text_find->text().toLower().toStdWString())
|
||||||
!= std::string::npos)
|
!= std::string::npos)
|
||||||
{
|
{
|
||||||
filtered_entries.push_back({
|
filtered_entries.push_back(entry);
|
||||||
user, std::get<1>(line), reason });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -360,15 +352,16 @@ void MainWindow::show_details(QModelIndex index)
|
||||||
{
|
{
|
||||||
const string user = index.sibling(index.row(), 0).data()
|
const string user = index.sibling(index.row(), 0).data()
|
||||||
.toString().toStdString();
|
.toString().toStdString();
|
||||||
result_details result;
|
vector<Database::data> dbdata =
|
||||||
|
_database.query("SELECT * FROM blocks WHERE user = '" + user + "';");
|
||||||
string text = "";
|
string text = "";
|
||||||
|
|
||||||
if (database::details(user, result))
|
if (!dbdata.empty())
|
||||||
{
|
{
|
||||||
if (!std::get<2>(result).empty())
|
if (!dbdata.front().receipts.empty())
|
||||||
{
|
{
|
||||||
text += string("<b>") + tr("Receipts:").toStdString() + "</b>";
|
text += string("<b>") + tr("Receipts:").toStdString() + "</b>";
|
||||||
for (const string &url : std::get<2>(result))
|
for (const string &url : dbdata.front().receipts)
|
||||||
{
|
{
|
||||||
text += "<br>" + url;
|
text += "<br>" + url;
|
||||||
}
|
}
|
||||||
|
@ -417,7 +410,7 @@ void MainWindow::dropEvent(QDropEvent *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogAdd *dialog = new DialogAdd(this);
|
DialogAdd *dialog = new DialogAdd(this);
|
||||||
Dialogdata data;
|
Database::data data;
|
||||||
data.user = text;
|
data.user = text;
|
||||||
dialog->set_data(data);
|
dialog->set_data(data);
|
||||||
dialog->show();
|
dialog->show();
|
||||||
|
@ -430,7 +423,7 @@ DialogAdd::DialogAdd(QMainWindow *parent)
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Dialogdata DialogAdd::get_data() const
|
const Database::data DialogAdd::get_data() const
|
||||||
{
|
{
|
||||||
std::vector<string> receipts;
|
std::vector<string> receipts;
|
||||||
for (int row = 0; row <= list_receipts->count() - 1; ++row)
|
for (int row = 0; row <= list_receipts->count() - 1; ++row)
|
||||||
|
@ -438,7 +431,7 @@ const Dialogdata DialogAdd::get_data() const
|
||||||
receipts.push_back(list_receipts->item(row)->text().toStdString());
|
receipts.push_back(list_receipts->item(row)->text().toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
Dialogdata data;
|
Database::data data;
|
||||||
data.user = text_user->text().toStdString();
|
data.user = text_user->text().toStdString();
|
||||||
data.blocked = radio_blocked->isChecked();
|
data.blocked = radio_blocked->isChecked();
|
||||||
data.reason = text_reason->text().toStdString();
|
data.reason = text_reason->text().toStdString();
|
||||||
|
@ -447,7 +440,7 @@ const Dialogdata DialogAdd::get_data() const
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DialogAdd::set_data(const Dialogdata &data)
|
void DialogAdd::set_data(const Database::data &data)
|
||||||
{
|
{
|
||||||
text_user->setText(QString::fromStdString(data.user));
|
text_user->setText(QString::fromStdString(data.user));
|
||||||
radio_blocked->setChecked(data.blocked);
|
radio_blocked->setChecked(data.blocked);
|
||||||
|
@ -484,19 +477,19 @@ void DialogAdd::accept()
|
||||||
{
|
{
|
||||||
_parent->remove();
|
_parent->remove();
|
||||||
}
|
}
|
||||||
Dialogdata data = get_data();
|
Database::data data = get_data();
|
||||||
|
|
||||||
if (data.user.empty())
|
if (data.user.empty())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
database::add_block(data.user, data.blocked, data.reason);
|
Database::add_user(data.user, data.blocked, data.reason);
|
||||||
_parent->add_row(QString::fromStdString(data.user),
|
_parent->add_row(QString::fromStdString(data.user),
|
||||||
data.blocked,
|
data.blocked,
|
||||||
QString::fromStdString(data.reason));
|
QString::fromStdString(data.reason));
|
||||||
for (const string &receipt : data.receipts)
|
for (const string &receipt : data.receipts)
|
||||||
{
|
{
|
||||||
database::add_receipt(data.user, receipt);
|
Database::add_receipt(data.user, receipt);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete this;
|
delete this;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <vector>
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
@ -30,14 +31,15 @@
|
||||||
#include "ui_whyblocked_add.h"
|
#include "ui_whyblocked_add.h"
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
using std::vector;
|
||||||
|
|
||||||
struct Dialogdata
|
// struct Dialogdata
|
||||||
{
|
// {
|
||||||
string user = "";
|
// string user = "";
|
||||||
bool blocked = true;
|
// bool blocked = true;
|
||||||
string reason = "";
|
// string reason = "";
|
||||||
std::vector<string> receipts = {};
|
// std::vector<string> receipts = {};
|
||||||
};
|
// };
|
||||||
|
|
||||||
class MainWindow : public QMainWindow, private Ui::MainWindow
|
class MainWindow : public QMainWindow, private Ui::MainWindow
|
||||||
{
|
{
|
||||||
|
@ -61,13 +63,14 @@ private:
|
||||||
QStandardItemModel *_model;
|
QStandardItemModel *_model;
|
||||||
xdgcfg _config;
|
xdgcfg _config;
|
||||||
std::array<int, 3> _headersize;
|
std::array<int, 3> _headersize;
|
||||||
|
Database _database;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void add();
|
void add();
|
||||||
void edit();
|
void edit();
|
||||||
void about();
|
void about();
|
||||||
void show_details(QModelIndex index);
|
void show_details(QModelIndex index);
|
||||||
void populate_tableview(const result_view &entries);
|
void populate_tableview(const vector<Database::data> &entries);
|
||||||
void reload();
|
void reload();
|
||||||
void find();
|
void find();
|
||||||
|
|
||||||
|
@ -79,10 +82,10 @@ class DialogAdd : public QDialog, private Ui::DialogAdd
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DialogAdd(QMainWindow *parent = nullptr);
|
explicit DialogAdd(QMainWindow *parent = nullptr);
|
||||||
void set_data(const Dialogdata &data);
|
void set_data(const Database::data &data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Dialogdata get_data() const;
|
const Database::data get_data() const;
|
||||||
void dragEnterEvent(QDragEnterEvent *event);
|
void dragEnterEvent(QDragEnterEvent *event);
|
||||||
void dropEvent(QDropEvent *event);
|
void dropEvent(QDropEvent *event);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ Database::data::operator bool() const
|
||||||
return !user.empty();
|
return !user.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
const string Database::get_filepath() const
|
const string Database::get_filepath()
|
||||||
{
|
{
|
||||||
fs::path filepath;
|
fs::path filepath;
|
||||||
xdgHandle xdg;
|
xdgHandle xdg;
|
||||||
|
@ -60,14 +60,19 @@ const string Database::get_filepath() const
|
||||||
return filepath;
|
return filepath;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Database::add_user(const string &user, const int blocked,
|
bool Database::add_user(const string &user, const bool blocked,
|
||||||
const string &reason)
|
const string &reason)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
int blocked_int = 0;
|
||||||
|
if (blocked)
|
||||||
|
{
|
||||||
|
blocked_int = 1;
|
||||||
|
}
|
||||||
sqlite::connection con(get_filepath());
|
sqlite::connection con(get_filepath());
|
||||||
sqlite::execute ins(con, "INSERT INTO blocks VALUES(?, ?, ?);");
|
sqlite::execute ins(con, "INSERT INTO blocks VALUES(?, ?, ?);");
|
||||||
ins % user % blocked % reason;
|
ins % user % blocked_int % reason;
|
||||||
ins();
|
ins();
|
||||||
}
|
}
|
||||||
catch (const std::exception &e)
|
catch (const std::exception &e)
|
||||||
|
@ -118,7 +123,7 @@ bool Database::remove(const string &user)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const vector<Database::data> Database::query(const string &sql_query) const
|
const vector<Database::data> Database::query(const string &sql_query)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -132,6 +137,11 @@ const vector<Database::data> Database::query(const string &sql_query) const
|
||||||
const string user = res_blocks->get_string(0);
|
const string user = res_blocks->get_string(0);
|
||||||
const int blocked = res_blocks->get_int(1);
|
const int blocked = res_blocks->get_int(1);
|
||||||
const string reason = res_blocks->get_string(2);
|
const string reason = res_blocks->get_string(2);
|
||||||
|
bool blocked_bool = false;
|
||||||
|
if (blocked == 1)
|
||||||
|
{
|
||||||
|
blocked_bool = true;
|
||||||
|
}
|
||||||
|
|
||||||
sqlite::query q_urls(con,
|
sqlite::query q_urls(con,
|
||||||
"SELECT * FROM urls WHERE user = \'" + user + "\';");
|
"SELECT * FROM urls WHERE user = \'" + user + "\';");
|
||||||
|
@ -145,7 +155,7 @@ const vector<Database::data> Database::query(const string &sql_query) const
|
||||||
result.push_back(
|
result.push_back(
|
||||||
{
|
{
|
||||||
user,
|
user,
|
||||||
blocked,
|
blocked_bool,
|
||||||
reason,
|
reason,
|
||||||
receipts
|
receipts
|
||||||
});
|
});
|
||||||
|
|
|
@ -29,23 +29,24 @@ class Database
|
||||||
public:
|
public:
|
||||||
struct data
|
struct data
|
||||||
{
|
{
|
||||||
const string user;
|
string user;
|
||||||
const int blocked;
|
bool blocked;
|
||||||
const string reason;
|
string reason;
|
||||||
const vector<string> receipts;
|
vector<string> receipts;
|
||||||
|
|
||||||
explicit operator bool() const;
|
explicit operator bool() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
Database();
|
Database();
|
||||||
bool add_user(const string &user, const int blocked, const string &reason);
|
static bool add_user(const string &user, const bool blocked,
|
||||||
bool add_receipt(const string &user, const string &receipt);
|
const string &reason);
|
||||||
bool remove(const string &user);
|
static bool add_receipt(const string &user, const string &receipt);
|
||||||
const vector<data> query(const string &sql_query = "SELECT * FROM blocks;")
|
static bool remove(const string &user);
|
||||||
const;
|
static const vector<data> query(const string &sql_query =
|
||||||
|
"SELECT * FROM blocks;");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const string get_filepath() const;
|
static const string get_filepath();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // WHYBLOCKED_HPP
|
#endif // WHYBLOCKED_HPP
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
<translation>Du kannst URLs hier hineinziehen</translation>
|
<translation>Du kannst URLs hier hineinziehen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="467"/>
|
<location filename="../src/interface_qt.cpp" line="460"/>
|
||||||
<source>Insert receipt here.</source>
|
<source>Insert receipt here.</source>
|
||||||
<translation>Beleg hier einfügen.</translation>
|
<translation>Beleg hier einfügen.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -198,7 +198,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/whyblocked.ui" line="285"/>
|
<location filename="../src/whyblocked.ui" line="285"/>
|
||||||
<location filename="../src/interface_qt.cpp" line="239"/>
|
<location filename="../src/interface_qt.cpp" line="240"/>
|
||||||
<source>Edit entry</source>
|
<source>Edit entry</source>
|
||||||
<translation>Eintrag bearbeiten</translation>
|
<translation>Eintrag bearbeiten</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -219,68 +219,68 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/whyblocked.ui" line="59"/>
|
<location filename="../src/whyblocked.ui" line="59"/>
|
||||||
<location filename="../src/interface_qt.cpp" line="183"/>
|
<location filename="../src/interface_qt.cpp" line="184"/>
|
||||||
<source>User/Instance</source>
|
<source>User/Instance</source>
|
||||||
<translation>Benutzer/Instanz</translation>
|
<translation>Benutzer/Instanz</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="184"/>
|
<location filename="../src/interface_qt.cpp" line="185"/>
|
||||||
<source>Blocked/Silenced</source>
|
<source>Blocked/Silenced</source>
|
||||||
<translation>Blockiert/Gedämpft</translation>
|
<translation>Blockiert/Gedämpft</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/whyblocked.ui" line="72"/>
|
<location filename="../src/whyblocked.ui" line="72"/>
|
||||||
<location filename="../src/interface_qt.cpp" line="185"/>
|
<location filename="../src/interface_qt.cpp" line="186"/>
|
||||||
<source>Reason</source>
|
<source>Reason</source>
|
||||||
<translation>Begründung</translation>
|
<translation>Begründung</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="109"/>
|
<location filename="../src/interface_qt.cpp" line="110"/>
|
||||||
<source>Try dragging an account from your webbrowser into this window.</source>
|
<source>Try dragging an account from your webbrowser into this window.</source>
|
||||||
<translation>Versuche, einen account von deinem webbrowser in dieses fenster zu ziehen.</translation>
|
<translation>Versuche, einen account von deinem webbrowser in dieses fenster zu ziehen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="213"/>
|
<location filename="../src/interface_qt.cpp" line="214"/>
|
||||||
<source>blocked</source>
|
<source>blocked</source>
|
||||||
<translation>blockiert</translation>
|
<translation>blockiert</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="217"/>
|
<location filename="../src/interface_qt.cpp" line="218"/>
|
||||||
<source>silenced</source>
|
<source>silenced</source>
|
||||||
<translation>gedämpft</translation>
|
<translation>gedämpft</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="233"/>
|
<location filename="../src/interface_qt.cpp" line="234"/>
|
||||||
<source>Invalid selection</source>
|
<source>Invalid selection</source>
|
||||||
<translation>Ungültige Auswahl</translation>
|
<translation>Ungültige Auswahl</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="234"/>
|
<location filename="../src/interface_qt.cpp" line="235"/>
|
||||||
<source>Please select only 1 entry to edit.</source>
|
<source>Please select only 1 entry to edit.</source>
|
||||||
<translation>Bitte nur 1 Eintrag zum bearbeiten auswählen.</translation>
|
<translation>Bitte nur 1 Eintrag zum bearbeiten auswählen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="277"/>
|
<location filename="../src/interface_qt.cpp" line="272"/>
|
||||||
<source>Nothing selected</source>
|
<source>Nothing selected</source>
|
||||||
<translation>Nichts ausgewählt</translation>
|
<translation>Nichts ausgewählt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="278"/>
|
<location filename="../src/interface_qt.cpp" line="273"/>
|
||||||
<source>Please select entries to remove.</source>
|
<source>Please select entries to remove.</source>
|
||||||
<translation>Bitte wähle einträge aus, die gelöscht werden sollen.</translation>
|
<translation>Bitte wähle einträge aus, die gelöscht werden sollen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="346"/>
|
<location filename="../src/interface_qt.cpp" line="338"/>
|
||||||
<source>About Whyblocked</source>
|
<source>About Whyblocked</source>
|
||||||
<translation>Über Whyblocked</translation>
|
<translation>Über Whyblocked</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="347"/>
|
<location filename="../src/interface_qt.cpp" line="339"/>
|
||||||
<source><p><b>Whyblocked</b> %1</p><p>Reminds you why you blocked someone.</p><p>Sourcecode: <a href="https://schlomp.space/tastytea/whyblocked">https://schlomp.space/tastytea/whyblocked</a></p><p><small>Copyright © 2018 <a href="mailto:tastytea@tastytea.de">tastytea</a>.<br>Licence GPLv3: <a href="https://www.gnu.org/licenses/gpl-3.0.html">GNU GPL version 3</a>.<br>This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.</small></p></source>
|
<source><p><b>Whyblocked</b> %1</p><p>Reminds you why you blocked someone.</p><p>Sourcecode: <a href="https://schlomp.space/tastytea/whyblocked">https://schlomp.space/tastytea/whyblocked</a></p><p><small>Copyright © 2018 <a href="mailto:tastytea@tastytea.de">tastytea</a>.<br>Licence GPLv3: <a href="https://www.gnu.org/licenses/gpl-3.0.html">GNU GPL version 3</a>.<br>This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.</small></p></source>
|
||||||
<translation><p><b>Whyblocked</b> %1</p><p>Erinnert dich, warum du jemanden blockiertest.</p><p>Quelltext: <a href="https://schlomp.space/tastytea/whyblocked">https://schlomp.space/tastytea/whyblocked</a></p><p><small>Copyright © 2018 <a href="mailto:tastytea@tastytea.de">tastytea</a>.<br>Lizenz GPLv3: <a href="https://www.gnu.org/licenses/gpl-3.0.html">GNU GPL version 3</a>.<br>Für dieses Programm besteht KEINERLEI GARANTIE. Dies ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen.</small></p></translation>
|
<translation><p><b>Whyblocked</b> %1</p><p>Erinnert dich, warum du jemanden blockiertest.</p><p>Quelltext: <a href="https://schlomp.space/tastytea/whyblocked">https://schlomp.space/tastytea/whyblocked</a></p><p><small>Copyright © 2018 <a href="mailto:tastytea@tastytea.de">tastytea</a>.<br>Lizenz GPLv3: <a href="https://www.gnu.org/licenses/gpl-3.0.html">GNU GPL version 3</a>.<br>Für dieses Programm besteht KEINERLEI GARANTIE. Dies ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen.</small></p></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="370"/>
|
<location filename="../src/interface_qt.cpp" line="363"/>
|
||||||
<source>Receipts:</source>
|
<source>Receipts:</source>
|
||||||
<translation>Belege:</translation>
|
<translation>Belege:</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="467"/>
|
<location filename="../src/interface_qt.cpp" line="460"/>
|
||||||
<source>Insert receipt here.</source>
|
<source>Insert receipt here.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -198,7 +198,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/whyblocked.ui" line="285"/>
|
<location filename="../src/whyblocked.ui" line="285"/>
|
||||||
<location filename="../src/interface_qt.cpp" line="239"/>
|
<location filename="../src/interface_qt.cpp" line="240"/>
|
||||||
<source>Edit entry</source>
|
<source>Edit entry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -219,68 +219,68 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/whyblocked.ui" line="59"/>
|
<location filename="../src/whyblocked.ui" line="59"/>
|
||||||
<location filename="../src/interface_qt.cpp" line="183"/>
|
<location filename="../src/interface_qt.cpp" line="184"/>
|
||||||
<source>User/Instance</source>
|
<source>User/Instance</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="184"/>
|
<location filename="../src/interface_qt.cpp" line="185"/>
|
||||||
<source>Blocked/Silenced</source>
|
<source>Blocked/Silenced</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/whyblocked.ui" line="72"/>
|
<location filename="../src/whyblocked.ui" line="72"/>
|
||||||
<location filename="../src/interface_qt.cpp" line="185"/>
|
<location filename="../src/interface_qt.cpp" line="186"/>
|
||||||
<source>Reason</source>
|
<source>Reason</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="109"/>
|
<location filename="../src/interface_qt.cpp" line="110"/>
|
||||||
<source>Try dragging an account from your webbrowser into this window.</source>
|
<source>Try dragging an account from your webbrowser into this window.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="213"/>
|
<location filename="../src/interface_qt.cpp" line="214"/>
|
||||||
<source>blocked</source>
|
<source>blocked</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="217"/>
|
<location filename="../src/interface_qt.cpp" line="218"/>
|
||||||
<source>silenced</source>
|
<source>silenced</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="233"/>
|
<location filename="../src/interface_qt.cpp" line="234"/>
|
||||||
<source>Invalid selection</source>
|
<source>Invalid selection</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="234"/>
|
<location filename="../src/interface_qt.cpp" line="235"/>
|
||||||
<source>Please select only 1 entry to edit.</source>
|
<source>Please select only 1 entry to edit.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="277"/>
|
<location filename="../src/interface_qt.cpp" line="272"/>
|
||||||
<source>Nothing selected</source>
|
<source>Nothing selected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="278"/>
|
<location filename="../src/interface_qt.cpp" line="273"/>
|
||||||
<source>Please select entries to remove.</source>
|
<source>Please select entries to remove.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="346"/>
|
<location filename="../src/interface_qt.cpp" line="338"/>
|
||||||
<source>About Whyblocked</source>
|
<source>About Whyblocked</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="347"/>
|
<location filename="../src/interface_qt.cpp" line="339"/>
|
||||||
<source><p><b>Whyblocked</b> %1</p><p>Reminds you why you blocked someone.</p><p>Sourcecode: <a href="https://schlomp.space/tastytea/whyblocked">https://schlomp.space/tastytea/whyblocked</a></p><p><small>Copyright © 2018 <a href="mailto:tastytea@tastytea.de">tastytea</a>.<br>Licence GPLv3: <a href="https://www.gnu.org/licenses/gpl-3.0.html">GNU GPL version 3</a>.<br>This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.</small></p></source>
|
<source><p><b>Whyblocked</b> %1</p><p>Reminds you why you blocked someone.</p><p>Sourcecode: <a href="https://schlomp.space/tastytea/whyblocked">https://schlomp.space/tastytea/whyblocked</a></p><p><small>Copyright © 2018 <a href="mailto:tastytea@tastytea.de">tastytea</a>.<br>Licence GPLv3: <a href="https://www.gnu.org/licenses/gpl-3.0.html">GNU GPL version 3</a>.<br>This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.</small></p></source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../src/interface_qt.cpp" line="370"/>
|
<location filename="../src/interface_qt.cpp" line="363"/>
|
||||||
<source>Receipts:</source>
|
<source>Receipts:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
Loading…
Reference in New Issue