Cmdr/src/common.h

277 lines
7.6 KiB
C
Raw Normal View History

2019-09-14 13:03:34 -04:00
#ifndef COMMON_H
#define COMMON_H
// This file is part of Cmdr.
// Cmdr 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, either version 3 of the License, or
// (at your option) any later version.
// Cmdr 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 Cmdr under the LICENSE.md file. If not, see
// <http://www.gnu.org/licenses/>.
#include <QObject>
#include <QLineEdit>
#include <QTextEdit>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QSizePolicy>
#include <QDockWidget>
#include <QSize>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QGuiApplication>
#include <QScreen>
#include <QResizeEvent>
#include <QPalette>
#include <QKeyEvent>
#include <QTextOption>
#include <QTextCursor>
#include <QTextStream>
#include <QThread>
#include <QInputMethodEvent>
#include <QContextMenuEvent>
#include <QMenu>
#include <QPaintEvent>
#include <QAction>
#include <QPixmapCache>
#include <QPair>
#include <QTextDocument>
#include <QBrush>
#include <QColor>
#include <QTextBlockFormat>
#include <QComboBox>
#include <QDebug>
#include <QCoreApplication>
#include <QStringList>
#include <QHostAddress>
#include <QtEndian>
#include <QDir>
#include <QJsonDocument>
#include <QSslSocket>
#include <QFile>
#include <QRegularExpression>
2019-09-14 13:03:34 -04:00
#include <QFileInfo>
#include <QMutex>
#include <QProgressBar>
2019-09-14 13:03:34 -04:00
#include "cmd_objs/long_txt.h"
#define DEFAULT_HIST_LIMIT 100
#define DEFAULT_MAX_LINES 1000
#define RDBUFF 16777215
#define DEFAULT_PORT 35516
2019-09-14 13:03:34 -04:00
#define BOOKMARK_FOLDER "bookmarks"
#define CONFIG_FILENAME "config_v3.json"
2019-09-14 13:03:34 -04:00
#define APP_NAME "Cmdr"
#define APP_TARGET "cmdr"
#define APP_VERSION "3.5"
2019-09-14 13:03:34 -04:00
enum TypeID : quint8
2019-09-14 13:03:34 -04:00
{
GEN_FILE = 1,
TEXT = 2,
ERR = 3,
PRIV_TEXT = 4,
IDLE = 5,
FILE_INFO = 7,
PEER_INFO = 8,
MY_INFO = 9,
PEER_STAT = 10,
P2P_REQUEST = 11,
P2P_CLOSE = 12,
P2P_OPEN = 13,
BYTES = 14,
SESSION_ID = 15,
NEW_CMD = 16,
CMD_ID = 17,
BIG_TEXT = 18,
TERM_CMD = 19,
HOST_VER = 20,
PING_PEERS = 21,
CH_MEMBER_INFO = 22,
CH_ID = 23,
KILL_CMD = 24,
YIELD_CMD = 25,
RESUME_CMD = 26,
PROMPT_TEXT = 27,
PROG = 28,
PROG_LAST = 29,
ASYNC_PAYLOAD = 30
};
enum GenFileType : quint8
{
GEN_UPLOAD = 2,
GEN_DOWNLOAD = 3
};
enum AsyncCommands : quint16
{
ASYNC_RDY = 1, // client | retricted
ASYNC_SYS_MSG = 2, // client | retricted
ASYNC_CAST = 4, // client | public
ASYNC_USER_DELETED = 7, // client | public
ASYNC_TO_PEER = 16, // client | retricted
ASYNC_LIMITED_CAST = 17, // client | public
ASYNC_P2P = 19, // client | public
ASYNC_NEW_CH_MEMBER = 21, // client | public
ASYNC_DEL_CH = 22, // client | public
ASYNC_RENAME_CH = 23, // client | public
ASYNC_NEW_SUB_CH = 25, // client | public
ASYNC_RM_SUB_CH = 26, // client | public
ASYNC_RENAME_SUB_CH = 27, // client | public
ASYNC_INVITED_TO_CH = 28, // client | public
ASYNC_RM_CH_MEMBER = 29, // client | public
ASYNC_INVITE_ACCEPTED = 30, // client | public
ASYNC_MEM_LEVEL_CHANGED = 31, // client | public
ASYNC_SUB_CH_LEVEL_CHG = 32, // client | public
ASYNC_ADD_RDONLY = 33, // client | public
ASYNC_RM_RDONLY = 34, // client | public
ASYNC_ADD_CMD = 35, // client | retricted
ASYNC_RM_CMD = 36, // client | retricted
2019-09-14 13:03:34 -04:00
};
enum ChannelMemberLevel
{
OWNER = 1,
ADMIN = 2,
OFFICER = 3,
REGULAR = 4,
PUBLIC = 5
};
enum UserIOFlags
{
HOST_HOOK = 1,
LOCAL_HOOK = 1 << 2,
GEN_HOOK = 1 << 3,
HIDDEN = 1 << 4
};
void setupThemeSettings(QJsonObject *data);
void loadTheme(QJsonObject *data, QWidget *widget, bool setHighlight = false);
2019-09-14 13:03:34 -04:00
void saveLocalData(QJsonObject *obj);
void loadLocalData(QJsonObject *obj);
void wordWrap(const QString &label, QTextStream &txtOut, const QString &txtIn, QWidget *measureWid);
bool argExists(const QString &key, const QStringList &args);
QByteArray wrInt(quint64 num, int numOfBits);
QByteArray wrFrame(quint16 cmdId, const QByteArray &data, uchar dType);
QByteArray toFixedTEXT(const QString &txt, int len);
2019-09-14 13:03:34 -04:00
QStringList parseArgs(const QByteArray &data, int maxArgs);
QStringList parseArgs(const QString &line);
QString appDataDir();
QString getParam(const QString &key, const QStringList &args);
QString extractCmdName(const QByteArray &data);
QString boolText(bool state);
QString verText();
2019-09-14 13:03:34 -04:00
quint64 rdInt(const QByteArray &bytes);
class Command;
class CmdLine;
class Genfile;
class MainWindow;
class Session;
class TextBody;
class TextWorker;
2019-09-14 13:03:34 -04:00
class ContextReloader;
class HostDoc;
class ThreadKiller;
2019-09-14 13:03:34 -04:00
class Shared : public QObject
{
Q_OBJECT
public:
static bool *connectedToHost;
static bool *activeDisp;
2019-09-14 13:03:34 -04:00
static QByteArray *sessionId;
static ushort *servMajor;
static ushort *servMinor;
static ushort *tcpRev;
static ushort *modRev;
2019-09-14 13:03:34 -04:00
static QString *hostAddress;
static QString *clientHookedCmd;
static quint16 *hostPort;
static QStringList *hookBypass;
static QSslSocket *socket;
static QHash<QString, Command*> *clientCmds;
static QHash<quint16, QString> *hostCmds;
static QHash<quint16, QString> *genfileCmds;
static QHash<quint16, quint8> *genfileTypes;
static QHash<QString, Command*> *hostDocs;
static QList<quint8> *idCache;
static QList<QString> *txtCache;
2019-09-14 13:03:34 -04:00
static QJsonObject *localData;
static quint16 *termCmdId;
static CmdLine *cmdLine;
static Genfile *genFile;
static MainWindow *mainWin;
static Session *session;
static TextBody *textBody;
static TextWorker *textWorker;
2019-09-14 13:03:34 -04:00
static ContextReloader *contextReloader;
static QWidget *mainWidget;
static ThreadKiller *theadKiller;
static QProgressBar *prog;
enum CacheOp
{
TXT_IN,
TXT_OUT,
TXT_CLEAR,
TXT_IS_EMPTY
};
static bool cacheTxt(CacheOp op);
static bool cacheTxt(CacheOp op, quint8 &typeId, QString &txt);
2019-09-14 13:03:34 -04:00
explicit Shared(QObject *parent = nullptr);
};
class ContextReloader : public QObject
{
Q_OBJECT
public:
explicit ContextReloader(QObject *parent = nullptr);
public slots:
void reloadCmdLine();
};
class ThreadKiller : public QObject
{
Q_OBJECT
private:
int threadCount;
public:
explicit ThreadKiller(QObject *parent = nullptr);
public slots:
void threadFinished();
signals:
void quitThreads();
};
2019-09-14 13:03:34 -04:00
#endif // COMMON_H