Compare commits

..

1 Commits

Author SHA1 Message Date
vladimir.kuznetsov feaf29e3a4 test 2024-05-14 21:58:35 +02:00
19 changed files with 33 additions and 248 deletions
+7 -7
View File
@@ -25,7 +25,7 @@ jobs:
host: 'linux'
target: 'desktop'
arch: 'gcc_64'
modules: 'qtremoteobjects qt5compat qtshadertools qtcharts'
modules: 'qtremoteobjects qt5compat qtshadertools'
dir: ${{ runner.temp }}
setup-python: 'true'
tools: 'tools_ifw'
@@ -93,7 +93,7 @@ jobs:
host: 'windows'
target: 'desktop'
arch: 'win64_msvc2019_64'
modules: 'qtremoteobjects qt5compat qtshadertools qtcharts'
modules: 'qtremoteobjects qt5compat qtshadertools'
dir: ${{ runner.temp }}
setup-python: 'true'
tools: 'tools_ifw'
@@ -150,7 +150,7 @@ jobs:
version: ${{ env.QT_VERSION }}
host: 'mac'
target: 'desktop'
modules: 'qtremoteobjects qt5compat qtshadertools qtmultimedia qtcharts'
modules: 'qtremoteobjects qt5compat qtshadertools qtmultimedia'
arch: 'clang_64'
dir: ${{ runner.temp }}
set-env: 'true'
@@ -162,7 +162,7 @@ jobs:
version: ${{ env.QT_VERSION }}
host: 'mac'
target: 'ios'
modules: 'qtremoteobjects qt5compat qtshadertools qtmultimedia qtcharts'
modules: 'qtremoteobjects qt5compat qtshadertools qtmultimedia'
dir: ${{ runner.temp }}
setup-python: 'true'
set-env: 'true'
@@ -226,7 +226,7 @@ jobs:
env:
# Keep compat with MacOS 10.15 aka Catalina by Qt 6.4
QT_VERSION: 6.4.3
QT_VERSION: 6.7.0
QIF_VERSION: 4.6
steps:
@@ -242,7 +242,7 @@ jobs:
host: 'mac'
target: 'desktop'
arch: 'clang_64'
modules: 'qtremoteobjects qt5compat qtshadertools qtcharts'
modules: 'qtremoteobjects qt5compat qtshadertools'
dir: ${{ runner.temp }}
setup-python: 'true'
set-env: 'true'
@@ -292,7 +292,7 @@ jobs:
env:
ANDROID_BUILD_PLATFORM: android-34
QT_VERSION: 6.6.2
QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools qtcharts'
QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools'
steps:
- name: 'Install desktop Qt'
-1
View File
@@ -58,7 +58,6 @@ Check deploy folder for build scripts.
- Qt 5 Compatibility Module
- Qt Shader Tools
- Additional Libraries:
- Qt Charts
- Qt Image Formats
- Qt Multimedia
- Qt Remote Objects
+2 -2
View File
@@ -12,7 +12,7 @@ set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "Autogen")
set(PACKAGES
Core Gui Network Xml
RemoteObjects Quick Svg QuickControls2
Core5Compat Concurrent LinguistTools Charts
Core5Compat Concurrent LinguistTools
)
execute_process(
@@ -38,7 +38,7 @@ set(LIBS ${LIBS}
Qt6::Core Qt6::Gui
Qt6::Network Qt6::Xml Qt6::RemoteObjects
Qt6::Quick Qt6::Svg Qt6::QuickControls2
Qt6::Core5Compat Qt6::Concurrent Qt6::Charts
Qt6::Core5Compat Qt6::Concurrent
)
if(IOS)
+2 -2
View File
@@ -195,8 +195,8 @@ void AmneziaApplication::init()
// /qt/6.6.1/Src/qtbase/src/plugins/platforms/android/androidjniclipboard.cpp:46
// So we catch all the copies to the clipboard and clear them from "text/html"
#ifdef Q_OS_ANDROID
connect(QApplication::clipboard(), &QClipboard::dataChanged, []() {
auto clipboard = QApplication::clipboard();
connect(QGuiApplication::clipboard(), &QClipboard::dataChanged, []() {
auto clipboard = QGuiApplication::clipboard();
if (clipboard->mimeData()->hasHtml()) {
clipboard->setText(clipboard->text());
}
+6 -2
View File
@@ -5,7 +5,11 @@
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QThread>
#include <QApplication>
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
#include <QGuiApplication>
#else
#include <QApplication>
#endif
#include "settings.h"
#include "vpnconnection.h"
@@ -43,7 +47,7 @@
#define amnApp (static_cast<AmneziaApplication *>(QCoreApplication::instance()))
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
#define AMNEZIA_BASE_CLASS QApplication
#define AMNEZIA_BASE_CLASS QGuiApplication
#else
#define AMNEZIA_BASE_CLASS SingleApplication
#define QAPPLICATION_CLASS QApplication
@@ -72,7 +72,7 @@ class AmneziaActivity : QtActivity() {
object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
val event = msg.extractIpcMessage<ServiceEvent>()
if (event != ServiceEvent.STATISTICS_UPDATE) Log.d(TAG, "Handle event: $event")
Log.d(TAG, "Handle event: $event")
when (event) {
ServiceEvent.STATUS_CHANGED -> {
msg.data?.getStatus()?.let { (state) ->
+1
View File
@@ -528,6 +528,7 @@ bool Daemon::switchServer(const InterfaceConfig& config) {
QJsonObject Daemon::getStatus() {
Q_ASSERT(wgutils() != nullptr);
QJsonObject json;
logger.debug() << "Status request";
if (!wgutils()->interfaceExists() || m_connections.isEmpty()) {
json.insert("connected", QJsonValue(false));
@@ -46,6 +46,8 @@ DaemonLocalServerConnection::~DaemonLocalServerConnection() {
}
void DaemonLocalServerConnection::readData() {
logger.debug() << "Read Data";
Q_ASSERT(m_socket);
while (true) {
@@ -88,6 +90,8 @@ void DaemonLocalServerConnection::parseCommand(const QByteArray& data) {
}
QString type = typeValue.toString();
logger.debug() << "Command received:" << type;
if (type == "activate") {
InterfaceConfig config;
if (!Daemon::parseConfig(obj, config)) {
+5 -1
View File
@@ -273,6 +273,8 @@ void LocalSocketController::deactivate() {
}
void LocalSocketController::checkStatus() {
logger.debug() << "Check status";
if (m_daemonState == eReady || m_daemonState == eInitializing) {
Q_ASSERT(m_socket);
@@ -322,6 +324,7 @@ void LocalSocketController::cleanupBackendLogs() {
}
void LocalSocketController::readData() {
logger.debug() << "Reading";
Q_ASSERT(m_socket);
Q_ASSERT(m_daemonState == eInitializing || m_daemonState == eReady);
@@ -363,6 +366,8 @@ void LocalSocketController::parseCommand(const QByteArray& command) {
}
QString type = typeValue.toString();
logger.debug() << "Parse command:" << type;
if (m_daemonState == eInitializing && type == "status") {
m_daemonState = eReady;
@@ -388,7 +393,6 @@ void LocalSocketController::parseCommand(const QByteArray& command) {
}
emit initialized(true, connected.toBool(), datetime);
checkStatus();
return;
}
-11
View File
@@ -20,20 +20,9 @@ WireguardProtocol::WireguardProtocol(const QJsonObject &configuration, QObject *
});
connect(m_impl.get(), &ControllerImpl::disconnected, this,
[this]() { emit connectionStateChanged(Vpn::ConnectionState::Disconnected); });
connect(m_impl.get(), &ControllerImpl::statusUpdated, this,
&WireguardProtocol::statusUpdated);
m_impl->initialize(nullptr, nullptr);
}
void WireguardProtocol::statusUpdated(const QString& serverIpv4Gateway, const QString& deviceIpv4Address,
uint64_t txBytes, uint64_t rxBytes) {
setBytesChanged(rxBytes, txBytes);
QThread::msleep(1000);
m_impl->checkStatus();
}
WireguardProtocol::~WireguardProtocol()
{
WireguardProtocol::stop();
+1 -2
View File
@@ -21,8 +21,7 @@ public:
ErrorCode start() override;
void stop() override;
void statusUpdated(const QString& serverIpv4Gateway, const QString& deviceIpv4Address,
uint64_t txBytes, uint64_t rxBytes);
ErrorCode startMzImpl();
ErrorCode stopMzImpl();
-1
View File
@@ -225,7 +225,6 @@
<file>ui/qml/Pages2/PageShareFullAccess.qml</file>
<file>images/controls/close.svg</file>
<file>images/controls/search.svg</file>
<file>ui/qml/Controls2/GraphViewType.qml</file>
<file>server_scripts/xray/configure_container.sh</file>
<file>server_scripts/xray/Dockerfile</file>
<file>server_scripts/xray/run_container.sh</file>
+3 -45
View File
@@ -7,10 +7,10 @@
#endif
#include <QtConcurrent>
#include "utilities.h"
#include "core/controllers/apiController.h"
#include "core/controllers/vpnConfigurationController.h"
#include "core/errorstrings.h"
#include "utilities.h"
#include "version.h"
ConnectionController::ConnectionController(const QSharedPointer<ServersModel> &serversModel,
@@ -29,30 +29,14 @@ ConnectionController::ConnectionController(const QSharedPointer<ServersModel> &s
connect(this, &ConnectionController::connectToVpn, m_vpnConnection.get(), &VpnConnection::connectToVpn, Qt::QueuedConnection);
connect(this, &ConnectionController::disconnectFromVpn, m_vpnConnection.get(), &VpnConnection::disconnectFromVpn, Qt::QueuedConnection);
connect(m_vpnConnection.get(), &VpnConnection::bytesChanged, this, [this](quint64 rx, quint64 tx) {
m_rxBytes = rx;
m_txBytes = tx;
});
connect(&m_tick, &QTimer::timeout, this, [this]() {
quint64 time = QDateTime::currentSecsSinceEpoch();
if (m_times.length() > viewSize) {
m_times.removeFirst();
m_rxView.removeFirst();
m_txView.removeFirst();
}
m_times.append(time);
m_rxView.append(m_rxBytes);
m_txView.append(m_txBytes);
emit bytesChanged();
});
m_state = Vpn::ConnectionState::Disconnected;
}
void ConnectionController::openConnection()
{
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
if (!Utils::processIsRunning(Utils::executable(SERVICE_NAME, false), true)) {
if (!Utils::processIsRunning(Utils::executable(SERVICE_NAME, false), true))
{
emit connectionErrorOccurred(errorString(ErrorCode::AmneziaServiceNotRunning));
return;
}
@@ -140,7 +124,6 @@ void ConnectionController::onConnectionStateChanged(Vpn::ConnectionState state)
m_isConnectionInProgress = false;
m_isConnected = true;
m_connectionStateText = tr("Connected");
m_tick.start(1000);
break;
}
case Vpn::ConnectionState::Connecting: {
@@ -160,7 +143,6 @@ void ConnectionController::onConnectionStateChanged(Vpn::ConnectionState state)
case Vpn::ConnectionState::Disconnecting: {
m_isConnectionInProgress = true;
m_connectionStateText = tr("Disconnecting...");
m_tick.stop();
break;
}
case Vpn::ConnectionState::Preparing: {
@@ -210,30 +192,6 @@ QString ConnectionController::connectionStateText() const
return m_connectionStateText;
}
quint64 ConnectionController::rxBytes() const
{
return m_rxBytes;
}
quint64 ConnectionController::txBytes() const
{
return m_txBytes;
}
QVector<quint64> ConnectionController::getRxView() const
{
return m_rxView;
}
QVector<quint64> ConnectionController::getTxView() const
{
return m_txView;
}
QVector<quint64> ConnectionController::getTimes() const
{
return m_times;
}
void ConnectionController::toggleConnection()
{
if (m_state == Vpn::ConnectionState::Preparing) {
@@ -15,8 +15,6 @@ public:
Q_PROPERTY(bool isConnected READ isConnected NOTIFY connectionStateChanged)
Q_PROPERTY(bool isConnectionInProgress READ isConnectionInProgress NOTIFY connectionStateChanged)
Q_PROPERTY(QString connectionStateText READ connectionStateText NOTIFY connectionStateChanged)
Q_PROPERTY(quint64 rxBytes READ rxBytes NOTIFY bytesChanged)
Q_PROPERTY(quint64 txBytes READ txBytes NOTIFY bytesChanged)
explicit ConnectionController(const QSharedPointer<ServersModel> &serversModel, const QSharedPointer<ContainersModel> &containersModel,
const QSharedPointer<ClientManagementModel> &clientManagementModel,
@@ -28,12 +26,6 @@ public:
bool isConnected() const;
bool isConnectionInProgress() const;
QString connectionStateText() const;
quint64 rxBytes() const;
quint64 txBytes() const;
Q_INVOKABLE QVector<quint64> getRxView() const;
Q_INVOKABLE QVector<quint64> getTxView() const;
Q_INVOKABLE QVector<quint64> getTimes() const;
public slots:
void toggleConnection();
@@ -58,7 +50,6 @@ signals:
void connectionErrorOccurred(const QString &errorMessage);
void reconnectWithUpdatedContainer(const QString &message);
void bytesChanged();
void noInstalledContainers();
@@ -80,17 +71,8 @@ private:
bool m_isConnected = false;
bool m_isConnectionInProgress = false;
QString m_connectionStateText = tr("Connect");
quint64 m_rxBytes = 0;
quint64 m_txBytes = 0;
QVector<quint64> m_rxView{};
QVector<quint64> m_txView{};
QVector<quint64> m_times{};
QTimer m_tick{};
Vpn::ConnectionState m_state;
const static quint8 viewSize{60};
};
#endif // CONNECTIONCONTROLLER_H
@@ -24,20 +24,6 @@ SystemController::SystemController(const std::shared_ptr<Settings> &settings, QO
{
}
void SystemController::setAppHasFocus(bool appHasFocus)
{
if (m_appHasFocus != appHasFocus)
{
m_appHasFocus = appHasFocus;
emit appHasFocusChanged();
}
}
bool SystemController::appHasFocus() const
{
return m_appHasFocus;
}
void SystemController::saveFile(QString fileName, const QString &data)
{
#if defined Q_OS_ANDROID
-6
View File
@@ -8,13 +8,9 @@
class SystemController : public QObject
{
Q_OBJECT
Q_PROPERTY(bool appHasFocus READ appHasFocus WRITE setAppHasFocus NOTIFY appHasFocusChanged)
public:
explicit SystemController(const std::shared_ptr<Settings> &setting, QObject *parent = nullptr);
void setAppHasFocus(bool isActive);
bool appHasFocus() const;
static void saveFile(QString fileName, const QString &data);
public slots:
@@ -25,13 +21,11 @@ public slots:
signals:
void fileDialogClosed(const bool isAccepted);
void appHasFocusChanged();
private:
std::shared_ptr<Settings> m_settings;
QObject *m_qmlRoot;
bool m_appHasFocus{false};
};
#endif // SYSTEMCONTROLLER_H
-125
View File
@@ -1,125 +0,0 @@
import QtQuick
import QtCharts
ChartView {
id: chartView
legend.visible: false
animationOptions: ChartView.AllAnimations
animationDuration: 2000.0
backgroundColor: "#1C1D21"
plotAreaColor: "#1C1D21"
margins.top: 0
margins.bottom: 0
margins.left: 0
margins.right: 0
antialiasing: true
enabled: false
property bool shouldUpdate: SystemController.appHasFocus
function getUTCSeconds() {
return new Date().setMilliseconds(0) / 1000
}
function addValues(rx, tx) {
let currentTime = getUTCSeconds()
xAxis.min = currentTime - 60
xAxis.max = currentTime
if (rx > yAxis.max) yAxis.max = rx * 1.1
if (tx > yAxis.max) yAxis.max = tx * 1.1
rxLine.append(currentTime, rx)
txLine.append(currentTime, tx)
}
function printAll() {
var rxValues = ConnectionController.getRxView()
var txValues = ConnectionController.getTxView()
var times = ConnectionController.getTimes()
let currentTime = getUTCSeconds()
xAxis.min = currentTime - 60
xAxis.max = currentTime
rxLine.clear()
txLine.clear()
if (times.length === 0) return
xAxis.min = times[0]
xAxis.max = times[times.length - 1]
for (let i = 0; i < times.length; i++)
{
if (rxValues[i] > yAxis.max) yAxis.max = rxValues[i]
if (txValues[i] > yAxis.max) yAxis.max = txValues[i]
rxLine.append(times[i], rxValues[i])
txLine.append(times[i], txValues[i])
}
}
Component.onCompleted: {
printAll()
}
Connections {
target: ConnectionController
function onBytesChanged() {
if (shouldUpdate) {
addValues(ConnectionController.rxBytes, ConnectionController.txBytes)
}
}
}
Connections {
target: SystemController
function onAppHasFocusChanged() {
if (shouldUpdate) { printAll() }
}
}
ValueAxis {
id: yAxis
min: -100
max: 1000
visible: false
labelsVisible: false
gridLineColor: "transparent"
}
ValueAxis {
id: xAxis
visible: false
labelsVisible: false
gridLineColor: "transparent"
}
SplineSeries {
id: rxLine
name: "Received Bytes"
//width: 2
axisX: xAxis
axisY: yAxis
capStyle: Qt.RoundCap
useOpenGL: true
color: "#70553c"
XYPoint { x: getUTCSeconds(); y: 0 }
}
SplineSeries {
id: txLine
name: "Transmitted Bytes"
//width: 2
axisX: xAxis
axisY: yAxis
capStyle: Qt.RoundCap
useOpenGL: true
color: "#737274"
XYPoint { x: getUTCSeconds(); y: 0 }
}
}
+1 -6
View File
@@ -261,15 +261,10 @@ PageType {
LabelTextType {
id: collapsedServerMenuDescription
Layout.bottomMargin: drawer.isCollapsed ? 44 : ServersModel.isDefaultServerFromApi ? 89 : 44
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
text: drawer.isCollapsed ? ServersModel.defaultServerDescriptionCollapsed : ServersModel.defaultServerDescriptionExpanded
}
GraphViewType {
Layout.minimumHeight: 50
Layout.bottomMargin: drawer.isCollapsed ? 24 : ServersModel.isDefaultServerFromApi ? 69 : 24
Layout.fillWidth: true
}
}
Connections {
-4
View File
@@ -28,10 +28,6 @@ Window {
PageController.closeWindow()
}
onActiveChanged: {
SystemController.appHasFocus = active
}
title: "AmneziaVPN"
StackViewType {