You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.5 KiB

#include <QObject>
#include <QDir>
#include <QMessageBox>
#include <QJsonArray>
#include <QJsonObject>
#include <QCommandLineParser>
#include <QStandardPaths>
#include "conversations.h"
#include "lib/utils.h"
#include "lib/globals.h"
Conversations::Conversations(QCommandLineParser *cmdargs) {
this->cmdargs = cmdargs;
// Paths
pathGenericData = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
configRoot = QDir::homePath();
accountName = Utils::getUnixAccountName();
homeDir = QDir::homePath();
configDirectory = QString("%1/.config/%2/").arg(configRoot, QCoreApplication::applicationName());
// Create some directories
createConfigDirectory(configDirectory);
// flags, iso codes, etc
countries = new Countries();
if(this->isDebug) {
qDebug() << "configRoot: " << configRoot;
qDebug() << "homeDir: " << homeDir;
qDebug() << "configDirectory: " << configDirectory;
}
chatModel = new ChatModel();
// https://stackoverflow.com/q/53018492
this->ws = new WSClient(this, "135.125.235.26:7000");
this->ws->start();
connect(this->ws, &WSClient::WSMessage, this, &Conversations::onWSMessage);
}
void Conversations::onWSMessage(const QJsonObject &msg) {
auto _chats = msg.value("data").toArray();
for (auto &&chat: _chats) {
auto obj = chat.toObject();
auto nick = obj.value("nick").toString();
auto message = obj.value("message").toString();
auto date = obj.value("date").toInt();
auto date_t = QDateTime::fromTime_t(date);
auto *chat_obj = new ChatMessage(nick, date_t, message);
chatModel->appendMessage(chat_obj);
//qDebug() << nick << " [" << date << "]: " << message;
}
}
void Conversations::onSendMessage(const QString &message) {
auto _msg = message.toUtf8();
auto date_t = QDateTime::currentDateTime();
auto *chat_obj = new ChatMessage("_self", date_t, _msg);
chatModel->appendMessage(chat_obj);
this->ws->sendMsg(_msg);
}
void Conversations::getMessages(const QString &contact_uid, int limit, int offset) {
}
void Conversations::setWindowTitle(const QString &title) {
emit setTitle(title);
}
void Conversations::createConfigDirectory(const QString &dir) {
QStringList createDirs({dir});
for(const auto &d: createDirs) {
if(!Utils::dirExists(d)) {
qDebug() << QString("Creating directory: %1").arg(d);
if (!QDir().mkpath(d))
throw std::runtime_error("Could not create directory " + d.toStdString());
}
}
}
Conversations::~Conversations() {}