Fix tray visibility and message reception issues
Some checks failed
build / build-win64 (push) Waiting to run
build / build-macos (push) Waiting to run
build / build-pip (push) Failing after 16s

- Disable sound initialization to prevent hanging
- Add missing import re in utils.py
- Fix settings loading for QSettings
- Update file paths to use PROJECT_ROOT
- Revert to working API paths and listener from commit efdc63e
This commit is contained in:
kdusek
2025-12-07 22:39:07 +01:00
parent 7b695d7b7f
commit 5138303016
4060 changed files with 579123 additions and 23 deletions

View File

@@ -0,0 +1,6 @@
# Automatically generated configuration for PyQt6.QtWebSockets.
sip-version = "6.14.0"
sip-abi-version = "13.8"
module-tags = ["Qt_6_10_0", "Linux"]
module-disabled-features = []

View File

@@ -0,0 +1,54 @@
// QtWebSocketsmod.sip generated by MetaSIP
//
// This file is part of the QtWebSockets Python extension module.
//
// Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of PyQt6.
//
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file. Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
//
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license. For more information contact
// info@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%Module(name=PyQt6.QtWebSockets, keyword_arguments="Optional", use_limited_api=True)
%Import QtCore/QtCoremod.sip
%Import QtNetwork/QtNetworkmod.sip
%Copying
Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
This file is part of PyQt6.
This file may be used under the terms of the GNU General Public License
version 3.0 as published by the Free Software Foundation and appearing in
the file LICENSE included in the packaging of this file. Please review the
following information to ensure the GNU General Public License version 3.0
requirements will be met: http://www.gnu.org/copyleft/gpl.html.
If you do not wish to use this file under the terms of the GPL version 3.0
then you may purchase a commercial license. For more information contact
info@riverbankcomputing.com.
This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%End
%DefaultSupertype PyQt6.sip.simplewrapper
%Include qmaskgenerator.sip
%Include qwebsocket.sip
%Include qwebsocketcorsauthenticator.sip
%Include qwebsockethandshakeoptions.sip
%Include qwebsocketprotocol.sip
%Include qwebsocketserver.sip

View File

@@ -0,0 +1,38 @@
// qmaskgenerator.sip generated by MetaSIP
//
// This file is part of the QtWebSockets Python extension module.
//
// Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of PyQt6.
//
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file. Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
//
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license. For more information contact
// info@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%If (Qt_6_2_0 -)
class QMaskGenerator : public QObject
{
%TypeHeaderCode
#include <qmaskgenerator.h>
%End
public:
explicit QMaskGenerator(QObject *parent /TransferThis/ = 0);
virtual ~QMaskGenerator();
virtual bool seed() = 0;
virtual quint32 nextMask() = 0;
};
%End

View File

@@ -0,0 +1,183 @@
// qwebsocket.sip generated by MetaSIP
//
// This file is part of the QtWebSockets Python extension module.
//
// Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of PyQt6.
//
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file. Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
//
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license. For more information contact
// info@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%If (Qt_6_2_0 -)
class QWebSocket : public QObject
{
%TypeHeaderCode
#include <qwebsocket.h>
%End
%ConvertToSubClassCode
static struct class_graph {
const char *name;
sipTypeDef **type;
int yes, no;
} graph[] = {
{sipName_QWebSocket, &sipType_QWebSocket, -1, 1},
{sipName_QWebSocketServer, &sipType_QWebSocketServer, -1, 2},
{sipName_QMaskGenerator, &sipType_QMaskGenerator, -1, -1},
};
int i = 0;
sipType = NULL;
do
{
struct class_graph *cg = &graph[i];
if (cg->name != NULL && sipCpp->inherits(cg->name))
{
sipType = *cg->type;
i = cg->yes;
}
else
i = cg->no;
}
while (i >= 0);
%End
public:
QWebSocket(const QString &origin = QString(), QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest, QObject *parent /TransferThis/ = 0);
virtual ~QWebSocket();
void abort();
QAbstractSocket::SocketError error() const;
QString errorString() const;
bool flush() /ReleaseGIL/;
bool isValid() const;
QHostAddress localAddress() const;
quint16 localPort() const;
QAbstractSocket::PauseModes pauseMode() const;
QHostAddress peerAddress() const;
QString peerName() const;
quint16 peerPort() const;
QNetworkProxy proxy() const;
void setProxy(const QNetworkProxy &networkProxy);
void setMaskGenerator(const QMaskGenerator *maskGenerator /KeepReference/);
const QMaskGenerator *maskGenerator() const;
qint64 readBufferSize() const;
void setReadBufferSize(qint64 size);
void resume() /ReleaseGIL/;
void setPauseMode(QAbstractSocket::PauseModes pauseMode);
QAbstractSocket::SocketState state() const;
QWebSocketProtocol::Version version() const;
QString resourceName() const;
QUrl requestUrl() const;
QString origin() const;
QWebSocketProtocol::CloseCode closeCode() const;
QString closeReason() const;
qint64 sendTextMessage(const QString &message) /ReleaseGIL/;
qint64 sendBinaryMessage(const QByteArray &data) /ReleaseGIL/;
%If (PyQt_SSL)
void ignoreSslErrors(const QList<QSslError> &errors);
%End
%If (PyQt_SSL)
void setSslConfiguration(const QSslConfiguration &sslConfiguration);
%End
%If (PyQt_SSL)
QSslConfiguration sslConfiguration() const;
%End
QNetworkRequest request() const;
public slots:
void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal, const QString &reason = QString()) /ReleaseGIL/;
%If (Qt_6_4_0 -)
void open(const QNetworkRequest &request, const QWebSocketHandshakeOptions &options) /ReleaseGIL/;
%End
%If (Qt_6_4_0 -)
void open(const QUrl &url, const QWebSocketHandshakeOptions &options) /ReleaseGIL/;
%End
void open(const QUrl &url) /ReleaseGIL/;
void open(const QNetworkRequest &request) /ReleaseGIL/;
void ping(const QByteArray &payload = QByteArray()) /ReleaseGIL/;
%If (PyQt_SSL)
void ignoreSslErrors();
%End
signals:
void aboutToClose();
void connected();
void disconnected();
void stateChanged(QAbstractSocket::SocketState state);
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *pAuthenticator);
void readChannelFinished();
void textFrameReceived(const QString &frame, bool isLastFrame);
void binaryFrameReceived(const QByteArray &frame, bool isLastFrame);
void textMessageReceived(const QString &message);
void binaryMessageReceived(const QByteArray &message);
void error(QAbstractSocket::SocketError error);
void pong(quint64 elapsedTime, const QByteArray &payload);
void bytesWritten(qint64 bytes);
%If (PyQt_SSL)
void sslErrors(const QList<QSslError> &errors);
%End
%If (PyQt_SSL)
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator);
%End
public:
qint64 bytesToWrite() const;
void setMaxAllowedIncomingFrameSize(quint64 maxAllowedIncomingFrameSize);
quint64 maxAllowedIncomingFrameSize() const;
void setMaxAllowedIncomingMessageSize(quint64 maxAllowedIncomingMessageSize);
quint64 maxAllowedIncomingMessageSize() const;
static quint64 maxIncomingMessageSize();
static quint64 maxIncomingFrameSize();
void setOutgoingFrameSize(quint64 outgoingFrameSize);
quint64 outgoingFrameSize() const;
static quint64 maxOutgoingFrameSize();
void continueInterruptedHandshake();
signals:
%If (PyQt_SSL)
void peerVerifyError(const QSslError &error);
%End
%If (PyQt_SSL)
void alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description);
%End
%If (PyQt_SSL)
void alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description);
%End
%If (PyQt_SSL)
void handshakeInterruptedOnError(const QSslError &error);
%End
public:
%If (Qt_6_4_0 -)
QWebSocketHandshakeOptions handshakeOptions() const;
%End
%If (Qt_6_4_0 -)
QString subprotocol() const;
%End
signals:
%If (Qt_6_5_0 -)
void errorOccurred(QAbstractSocket::SocketError error);
%End
%If (Qt_6_6_0 -)
void authenticationRequired(QAuthenticator *authenticator);
%End
};
%End

View File

@@ -0,0 +1,41 @@
// qwebsocketcorsauthenticator.sip generated by MetaSIP
//
// This file is part of the QtWebSockets Python extension module.
//
// Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of PyQt6.
//
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file. Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
//
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license. For more information contact
// info@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%If (Qt_6_2_0 -)
class QWebSocketCorsAuthenticator
{
%TypeHeaderCode
#include <qwebsocketcorsauthenticator.h>
%End
public:
explicit QWebSocketCorsAuthenticator(const QString &origin);
explicit QWebSocketCorsAuthenticator(const QWebSocketCorsAuthenticator &other);
~QWebSocketCorsAuthenticator();
void swap(QWebSocketCorsAuthenticator &other /Constrained/);
QString origin() const;
void setAllowed(bool allowed);
bool allowed() const;
};
%End

View File

@@ -0,0 +1,46 @@
// qwebsockethandshakeoptions.sip generated by MetaSIP
//
// This file is part of the QtWebSockets Python extension module.
//
// Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of PyQt6.
//
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file. Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
//
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license. For more information contact
// info@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%If (Qt_6_4_0 -)
class QWebSocketHandshakeOptions
{
%TypeHeaderCode
#include <qwebsockethandshakeoptions.h>
%End
public:
QWebSocketHandshakeOptions();
QWebSocketHandshakeOptions(const QWebSocketHandshakeOptions &other);
~QWebSocketHandshakeOptions();
void swap(QWebSocketHandshakeOptions &other);
QStringList subprotocols() const;
void setSubprotocols(const QStringList &protocols);
};
%End
%If (Qt_6_4_0 -)
bool operator==(const QWebSocketHandshakeOptions &lhs, const QWebSocketHandshakeOptions &rhs);
%End
%If (Qt_6_4_0 -)
bool operator!=(const QWebSocketHandshakeOptions &lhs, const QWebSocketHandshakeOptions &rhs);
%End

View File

@@ -0,0 +1,62 @@
// qwebsocketprotocol.sip generated by MetaSIP
//
// This file is part of the QtWebSockets Python extension module.
//
// Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of PyQt6.
//
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file. Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
//
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license. For more information contact
// info@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%If (Qt_6_2_0 -)
namespace QWebSocketProtocol
{
%TypeHeaderCode
#include <qwebsocketprotocol.h>
%End
enum Version
{
VersionUnknown,
Version0,
Version4,
Version5,
Version6,
Version7,
Version8,
Version13,
VersionLatest,
};
enum CloseCode
{
CloseCodeNormal,
CloseCodeGoingAway,
CloseCodeProtocolError,
CloseCodeDatatypeNotSupported,
CloseCodeReserved1004,
CloseCodeMissingStatusCode,
CloseCodeAbnormalDisconnection,
CloseCodeWrongDatatype,
CloseCodePolicyViolated,
CloseCodeTooMuchData,
CloseCodeMissingExtension,
CloseCodeBadOperation,
CloseCodeTlsHandshakeFailed,
};
};
%End

View File

@@ -0,0 +1,99 @@
// qwebsocketserver.sip generated by MetaSIP
//
// This file is part of the QtWebSockets Python extension module.
//
// Copyright (c) 2025 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// This file is part of PyQt6.
//
// This file may be used under the terms of the GNU General Public License
// version 3.0 as published by the Free Software Foundation and appearing in
// the file LICENSE included in the packaging of this file. Please review the
// following information to ensure the GNU General Public License version 3.0
// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
//
// If you do not wish to use this file under the terms of the GPL version 3.0
// then you may purchase a commercial license. For more information contact
// info@riverbankcomputing.com.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
%If (Qt_6_2_0 -)
class QWebSocketServer : public QObject
{
%TypeHeaderCode
#include <qwebsocketserver.h>
%End
public:
enum SslMode
{
%If (PyQt_SSL)
SecureMode,
%End
NonSecureMode,
};
QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent /TransferThis/ = 0);
virtual ~QWebSocketServer();
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
void close();
bool isListening() const;
void setMaxPendingConnections(int numConnections);
int maxPendingConnections() const;
quint16 serverPort() const;
QHostAddress serverAddress() const;
QWebSocketServer::SslMode secureMode() const;
bool setSocketDescriptor(qintptr socketDescriptor);
qintptr socketDescriptor() const;
bool hasPendingConnections() const;
virtual QWebSocket *nextPendingConnection() /Factory/;
QWebSocketProtocol::CloseCode error() const;
QString errorString() const;
void pauseAccepting();
void resumeAccepting();
void setServerName(const QString &serverName);
QString serverName() const;
void setProxy(const QNetworkProxy &networkProxy);
QNetworkProxy proxy() const;
%If (PyQt_SSL)
void setSslConfiguration(const QSslConfiguration &sslConfiguration);
%End
%If (PyQt_SSL)
QSslConfiguration sslConfiguration() const;
%End
QList<QWebSocketProtocol::Version> supportedVersions() const;
QUrl serverUrl() const;
void handleConnection(QTcpSocket *socket) const;
signals:
void acceptError(QAbstractSocket::SocketError socketError);
void serverError(QWebSocketProtocol::CloseCode closeCode);
void originAuthenticationRequired(QWebSocketCorsAuthenticator *pAuthenticator);
void newConnection();
%If (PyQt_SSL)
void peerVerifyError(const QSslError &error);
%End
%If (PyQt_SSL)
void sslErrors(const QList<QSslError> &errors);
%End
void closed();
%If (PyQt_SSL)
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator);
%End
public:
void setHandshakeTimeout(int msec);
int handshakeTimeoutMS() const;
%If (Qt_6_4_0 -)
void setSupportedSubprotocols(const QStringList &protocols);
%End
%If (Qt_6_4_0 -)
QStringList supportedSubprotocols() const;
%End
};
%End