sta
This commit is contained in:
parent
ea0a5e74f2
commit
3b01e35783
10 changed files with 76 additions and 7 deletions
0
.cmake/api/v1/query/cache-v2
Normal file
0
.cmake/api/v1/query/cache-v2
Normal file
0
.cmake/api/v1/query/cmakeFiles-v1
Normal file
0
.cmake/api/v1/query/cmakeFiles-v1
Normal file
0
.cmake/api/v1/query/codemodel-v2
Normal file
0
.cmake/api/v1/query/codemodel-v2
Normal file
|
@ -63,16 +63,61 @@ QVariant HistoryModel::data(const QModelIndex &index, int role) const
|
||||||
return QString::number(item.size);
|
return QString::number(item.size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
throw std::out_of_range("history model col");
|
||||||
} catch (std::out_of_range const& exc) {
|
} catch (std::out_of_range const& exc) {
|
||||||
qDebug() << "historymodel data " << exc.what();
|
qDebug() << "historymodel data " << exc.what();
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant HistoryModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
if(role != Qt::DisplayRole) {
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
if(orientation == Qt::Horizontal) {
|
||||||
|
switch(section) {
|
||||||
|
case 0: {
|
||||||
|
return "id";
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
return "time";
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
return "url";
|
||||||
|
}
|
||||||
|
case 3: {
|
||||||
|
return "code";
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
return "reason";
|
||||||
|
}
|
||||||
|
case 5: {
|
||||||
|
return "rtt";
|
||||||
|
}
|
||||||
|
case 6: {
|
||||||
|
return "size";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
void HistoryModel::update(std::vector<HistoryItem> *items)
|
void HistoryModel::update(std::vector<HistoryItem> *items)
|
||||||
{
|
{
|
||||||
if(current_items) {
|
if(current_items) {
|
||||||
delete current_items;
|
delete current_items;
|
||||||
}
|
}
|
||||||
current_items = items;
|
current_items = items;
|
||||||
|
emit layoutChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HistoryProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
|
||||||
|
{
|
||||||
|
return QSortFilterProxyModel::lessThan(source_left, source_right);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HistoryProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <includes.h>
|
#include <includes.h>
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
|
#include <QSortFilterProxyModel>
|
||||||
|
|
||||||
struct HistoryItem {
|
struct HistoryItem {
|
||||||
int id = -1;
|
int id = -1;
|
||||||
|
@ -27,5 +28,15 @@ public:
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||||
void update(std::vector<HistoryItem>* items);
|
void update(std::vector<HistoryItem>* items);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class HistoryProxyModel : public QSortFilterProxyModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
public:
|
||||||
|
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
|
||||||
|
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
|
||||||
|
};
|
||||||
|
|
17
includes.h
17
includes.h
|
@ -18,16 +18,25 @@ bool json_get(json j, T& value, K key) noexcept {
|
||||||
j[key].get_to(value);
|
j[key].get_to(value);
|
||||||
return true;
|
return true;
|
||||||
} catch (nlohmann::detail::type_error& err) {
|
} catch (nlohmann::detail::type_error& err) {
|
||||||
qDebug() << err.what();
|
qDebug() << "key " << key << " error " << err.what();
|
||||||
} catch (nlohmann::detail::out_of_range& err) {
|
} catch (nlohmann::detail::out_of_range& err) {
|
||||||
qDebug() << err.what();
|
qDebug() << "key " << key << " error " << err.what();
|
||||||
} catch (nlohmann::detail::other_error& err) {
|
} catch (nlohmann::detail::other_error& err) {
|
||||||
qDebug() << err.what();
|
qDebug() << "key " << key << " error " << err.what();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename K, typename... Ks>
|
template<typename T, typename K, typename... Ks>
|
||||||
bool json_get(json j, T& value, K key, Ks... keys) noexcept {
|
bool json_get(json j, T& value, K key, Ks... keys) noexcept {
|
||||||
return json_get(j[key], value, keys...);
|
try {
|
||||||
|
return json_get(j[key], value, keys...);
|
||||||
|
} catch (nlohmann::detail::type_error& err) {
|
||||||
|
qDebug() << "key " << key << " error " << err.what();
|
||||||
|
} catch (nlohmann::detail::out_of_range& err) {
|
||||||
|
qDebug() << "key " << key << " error " << err.what();
|
||||||
|
} catch (nlohmann::detail::other_error& err) {
|
||||||
|
qDebug() << "key " << key << " error " << err.what();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,11 +22,12 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
thread->start();
|
thread->start();
|
||||||
|
|
||||||
history_model.update(current_session->getHistoryItems());
|
history_model.update(current_session->getHistoryItems());
|
||||||
|
history_proxy.setSourceModel(&history_model);
|
||||||
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->historyHTTPTable->setShowGrid(true);
|
ui->historyHTTPTable->setShowGrid(true);
|
||||||
ui->historyHTTPTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
ui->historyHTTPTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||||
ui->historyHTTPTable->setModel(&history_model);
|
ui->historyHTTPTable->setModel(&history_proxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
|
|
|
@ -19,6 +19,7 @@ private:
|
||||||
QThread* thread;
|
QThread* thread;
|
||||||
Session* current_session;
|
Session* current_session;
|
||||||
HistoryModel history_model;
|
HistoryModel history_model;
|
||||||
|
HistoryProxyModel history_proxy;
|
||||||
public:
|
public:
|
||||||
MainWindow(QWidget *parent = nullptr);
|
MainWindow(QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
|
@ -134,6 +134,7 @@ std::optional<std::string> Session::getSetting(std::string key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<HistoryItem>* Session::getHistoryItems() {
|
std::vector<HistoryItem>* Session::getHistoryItems() {
|
||||||
|
qDebug() << "history items generated";
|
||||||
// todo check reset return code
|
// todo check reset return code
|
||||||
sqlite3_reset(stmt_get_all_history);
|
sqlite3_reset(stmt_get_all_history);
|
||||||
|
|
||||||
|
@ -297,6 +298,7 @@ int Session::saveFlow(http::Flow flow) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qDebug() << "saved flow";
|
||||||
return sqlite3_last_insert_rowid(db);
|
return sqlite3_last_insert_rowid(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
test.sh
4
test.sh
|
@ -5,9 +5,9 @@ export mitmpid=$!
|
||||||
./build/littlesnitch &
|
./build/littlesnitch &
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
curl -x http://localhost:1878 -k https://yolo.jetzt
|
curl -s -x http://localhost:1878 -k https://yolo.jetzt > /dev/null
|
||||||
sleep 2
|
sleep 2
|
||||||
curl -x http://localhost:1878 -k https://get.yolo.jetzt
|
curl -s -x http://localhost:1878 -k https://blog.fefe.de > /dev/null
|
||||||
|
|
||||||
sleep 2
|
sleep 2
|
||||||
kill -9 $mitmpid
|
kill -9 $mitmpid
|
||||||
|
|
Loading…
Reference in a new issue