Move ChatDocumentHandler and related includes to LibNeoChat

This commit is contained in:
James Graham
2025-04-13 15:40:19 +01:00
parent 4fe9c76d90
commit bffd7fb13d
21 changed files with 81 additions and 60 deletions

View File

@@ -14,14 +14,10 @@ add_subdirectory(timeline)
add_library(neochat STATIC add_library(neochat STATIC
controller.cpp controller.cpp
controller.h controller.h
models/roomlistmodel.cpp
models/roomlistmodel.h
models/sortfilterspacelistmodel.cpp models/sortfilterspacelistmodel.cpp
models/sortfilterspacelistmodel.h models/sortfilterspacelistmodel.h
roommanager.cpp roommanager.cpp
roommanager.h roommanager.h
models/userlistmodel.cpp
models/userlistmodel.h
models/userfiltermodel.cpp models/userfiltermodel.cpp
models/userfiltermodel.h models/userfiltermodel.h
models/publicroomlistmodel.cpp models/publicroomlistmodel.cpp
@@ -40,8 +36,6 @@ add_library(neochat STATIC
models/sortfilterroomlistmodel.h models/sortfilterroomlistmodel.h
models/roomtreemodel.cpp models/roomtreemodel.cpp
models/roomtreemodel.h models/roomtreemodel.h
chatdocumenthandler.cpp
chatdocumenthandler.h
models/webshortcutmodel.cpp models/webshortcutmodel.cpp
models/webshortcutmodel.h models/webshortcutmodel.h
blurhash.cpp blurhash.cpp
@@ -50,10 +44,6 @@ add_library(neochat STATIC
blurhashimageprovider.h blurhashimageprovider.h
windowcontroller.cpp windowcontroller.cpp
windowcontroller.h windowcontroller.h
models/completionmodel.cpp
models/completionmodel.h
models/completionproxymodel.cpp
models/completionproxymodel.h
models/serverlistmodel.cpp models/serverlistmodel.cpp
models/serverlistmodel.h models/serverlistmodel.h
models/statemodel.cpp models/statemodel.cpp
@@ -68,7 +58,6 @@ add_library(neochat STATIC
models/notificationsmodel.h models/notificationsmodel.h
proxycontroller.cpp proxycontroller.cpp
proxycontroller.h proxycontroller.h
enums/neochatroomtype.h
models/sortfilterroomtreemodel.cpp models/sortfilterroomtreemodel.cpp
models/sortfilterroomtreemodel.h models/sortfilterroomtreemodel.h
mediamanager.cpp mediamanager.cpp
@@ -233,13 +222,6 @@ ecm_qt_declare_logging_category(neochat
EXPORT NEOCHAT EXPORT NEOCHAT
) )
ecm_qt_declare_logging_category(neochat
HEADER "chatdocumenthandler_logging.h"
IDENTIFIER "ChatDocumentHandling"
CATEGORY_NAME "org.kde.neochat.chatdocumenthandler"
DEFAULT_SEVERITY Info
)
add_executable(neochat-app add_executable(neochat-app
main.cpp main.cpp
) )

View File

@@ -27,6 +27,7 @@ QQC2.Popup {
Component.onCompleted: { Component.onCompleted: {
chatDocumentHandler.completionModel.roomListModel = RoomManager.roomListModel; chatDocumentHandler.completionModel.roomListModel = RoomManager.roomListModel;
chatDocumentHandler.completionModel.userListModel = RoomManager.userListModel;
} }
function incrementIndex() { function incrementIndex() {

View File

@@ -19,11 +19,12 @@
#include <Quotient/qt_connection_util.h> #include <Quotient/qt_connection_util.h>
#include <Quotient/settings.h> #include <Quotient/settings.h>
#include "mediasizehelper.h"
#include "accountmanager.h" #include "accountmanager.h"
#include "mediasizehelper.h"
#include "models/actionsmodel.h" #include "models/actionsmodel.h"
#include "models/messagemodel.h" #include "models/messagemodel.h"
#include "models/pushrulemodel.h" #include "models/pushrulemodel.h"
#include "models/roomlistmodel.h"
#include "neochatconfig.h" #include "neochatconfig.h"
#include "neochatconnection.h" #include "neochatconnection.h"
#include "neochatroom.h" #include "neochatroom.h"
@@ -50,6 +51,22 @@
using namespace Quotient; using namespace Quotient;
static std::function<bool(const Quotient::RoomEvent *)> hiddenEventFilter = [](const RoomEvent *event) -> bool {
if (event->isStateEvent() && !NeoChatConfig::showStateEvent()) {
return true;
}
if (auto roomMemberEvent = eventCast<const RoomMemberEvent>(event)) {
if ((roomMemberEvent->isJoin() || roomMemberEvent->isLeave()) && !NeoChatConfig::showLeaveJoinEvent()) {
return true;
} else if (roomMemberEvent->isRename() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() && !NeoChatConfig::showRename()) {
return true;
} else if (roomMemberEvent->isAvatarUpdate() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() && !NeoChatConfig::showAvatarUpdate()) {
return true;
}
}
return false;
};
Controller::Controller(QObject *parent) Controller::Controller(QObject *parent)
: QObject(parent) : QObject(parent)
{ {
@@ -76,21 +93,8 @@ Controller::Controller(QObject *parent)
ActionsModel::setAllowQuickEdit(NeoChatConfig::allowQuickEdit()); ActionsModel::setAllowQuickEdit(NeoChatConfig::allowQuickEdit());
}); });
MessageModel::setHiddenFilter([](const RoomEvent *event) -> bool { MessageModel::setHiddenFilter(hiddenEventFilter);
if (event->isStateEvent() && !NeoChatConfig::showStateEvent()) { RoomListModel::setHiddenFilter(hiddenEventFilter);
return true;
}
if (auto roomMemberEvent = eventCast<const RoomMemberEvent>(event)) {
if ((roomMemberEvent->isJoin() || roomMemberEvent->isLeave()) && !NeoChatConfig::showLeaveJoinEvent()) {
return true;
} else if (roomMemberEvent->isRename() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() && !NeoChatConfig::showRename()) {
return true;
} else if (roomMemberEvent->isAvatarUpdate() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() && !NeoChatConfig::showAvatarUpdate()) {
return true;
}
}
return false;
});
MediaSizeHelper::setMaxSize(NeoChatConfig::mediaMaxWidth(), NeoChatConfig::mediaMaxHeight()); MediaSizeHelper::setMaxSize(NeoChatConfig::mediaMaxWidth(), NeoChatConfig::mediaMaxHeight());
connect(NeoChatConfig::self(), &NeoChatConfig::MediaMaxWidthChanged, this, []() { connect(NeoChatConfig::self(), &NeoChatConfig::MediaMaxWidthChanged, this, []() {

View File

@@ -9,6 +9,7 @@ target_sources(LibNeoChat PRIVATE
neochatroommember.cpp neochatroommember.cpp
accountmanager.cpp accountmanager.cpp
chatbarcache.cpp chatbarcache.cpp
chatdocumenthandler.cpp
clipboard.cpp clipboard.cpp
delegatesizehelper.cpp delegatesizehelper.cpp
emojitones.cpp emojitones.cpp
@@ -28,12 +29,16 @@ target_sources(LibNeoChat PRIVATE
events/imagepackevent.cpp events/imagepackevent.cpp
events/pollevent.cpp events/pollevent.cpp
models/actionsmodel.cpp models/actionsmodel.cpp
models/completionmodel.cpp
models/completionproxymodel.cpp
models/customemojimodel.cpp models/customemojimodel.cpp
models/emojimodel.cpp models/emojimodel.cpp
models/imagepacksmodel.cpp models/imagepacksmodel.cpp
models/livelocationsmodel.cpp models/livelocationsmodel.cpp
models/locationsmodel.cpp models/locationsmodel.cpp
models/roomlistmodel.cpp
models/stickermodel.cpp models/stickermodel.cpp
models/userlistmodel.cpp
) )
ecm_add_qml_module(LibNeoChat GENERATE_PLUGIN_SOURCE ecm_add_qml_module(LibNeoChat GENERATE_PLUGIN_SOURCE
@@ -48,16 +53,25 @@ ecm_qt_declare_logging_category(LibNeoChat
DEFAULT_SEVERITY Info DEFAULT_SEVERITY Info
) )
ecm_qt_declare_logging_category(LibNeoChat
HEADER "chatdocumenthandler_logging.h"
IDENTIFIER "ChatDocumentHandling"
CATEGORY_NAME "org.kde.neochat.chatdocumenthandler"
DEFAULT_SEVERITY Info
)
generate_export_header(LibNeoChat BASE_NAME LibNeoChat) generate_export_header(LibNeoChat BASE_NAME LibNeoChat)
target_include_directories(LibNeoChat PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/enums ${CMAKE_CURRENT_SOURCE_DIR}/events ${CMAKE_CURRENT_SOURCE_DIR}/models) target_include_directories(LibNeoChat PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/enums ${CMAKE_CURRENT_SOURCE_DIR}/events ${CMAKE_CURRENT_SOURCE_DIR}/models)
target_link_libraries(LibNeoChat PUBLIC target_link_libraries(LibNeoChat PUBLIC
Qt::Core Qt::Core
Qt::Multimedia Qt::Multimedia
Qt::Quick Qt::Quick
Qt::QuickControls2
KF6::ConfigCore KF6::ConfigCore
KF6::CoreAddons KF6::CoreAddons
KF6::I18n KF6::I18n
KF6::Kirigami KF6::Kirigami
KF6::SonnetCore
QuotientQt6 QuotientQt6
cmark::cmark cmark::cmark
QCoro::Core QCoro::Core

View File

@@ -9,13 +9,11 @@
#include "models/customemojimodel.h" #include "models/customemojimodel.h"
#include "models/emojimodel.h" #include "models/emojimodel.h"
#include "neochatroom.h" #include "neochatroom.h"
#include "roommanager.h"
#include "userlistmodel.h" #include "userlistmodel.h"
CompletionModel::CompletionModel(QObject *parent) CompletionModel::CompletionModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
, m_filterModel(new CompletionProxyModel()) , m_filterModel(new CompletionProxyModel())
, m_userListModel(RoomManager::instance().userListModel())
, m_emojiModel(new QConcatenateTablesProxyModel(this)) , m_emojiModel(new QConcatenateTablesProxyModel(this))
{ {
connect(this, &CompletionModel::textChanged, this, &CompletionModel::updateCompletion); connect(this, &CompletionModel::textChanged, this, &CompletionModel::updateCompletion);
@@ -192,4 +190,19 @@ void CompletionModel::setRoomListModel(RoomListModel *roomListModel)
Q_EMIT roomListModelChanged(); Q_EMIT roomListModelChanged();
} }
UserListModel *CompletionModel::userListModel() const
{
return m_userListModel;
}
void CompletionModel::setUserListModel(UserListModel *userListModel)
{
if (userListModel == m_userListModel) {
return;
}
m_userListModel = userListModel;
Q_EMIT userListModelChanged();
}
#include "moc_completionmodel.cpp" #include "moc_completionmodel.cpp"

View File

@@ -49,6 +49,11 @@ class CompletionModel : public QAbstractListModel
*/ */
Q_PROPERTY(RoomListModel *roomListModel READ roomListModel WRITE setRoomListModel NOTIFY roomListModelChanged) Q_PROPERTY(RoomListModel *roomListModel READ roomListModel WRITE setRoomListModel NOTIFY roomListModelChanged)
/**
* @brief The UserListModel to be used for room completions.
*/
Q_PROPERTY(UserListModel *userListModel READ userListModel WRITE setUserListModel NOTIFY userListModelChanged)
public: public:
/** /**
* @brief Defines the different types of completion available. * @brief Defines the different types of completion available.
@@ -105,6 +110,9 @@ public:
RoomListModel *roomListModel() const; RoomListModel *roomListModel() const;
void setRoomListModel(RoomListModel *roomListModel); void setRoomListModel(RoomListModel *roomListModel);
UserListModel *userListModel() const;
void setUserListModel(UserListModel *userListModel);
AutoCompletionType autoCompletionType() const; AutoCompletionType autoCompletionType() const;
void setAutoCompletionType(AutoCompletionType autoCompletionType); void setAutoCompletionType(AutoCompletionType autoCompletionType);
@@ -113,6 +121,7 @@ Q_SIGNALS:
void roomChanged(); void roomChanged();
void autoCompletionTypeChanged(); void autoCompletionTypeChanged();
void roomListModelChanged(); void roomListModelChanged();
void userListModelChanged();
private: private:
QString m_text; QString m_text;

View File

@@ -5,11 +5,10 @@
#include <Quotient/events/roommemberevent.h> #include <Quotient/events/roommemberevent.h>
#include "enums/neochatroomtype.h"
#include "eventhandler.h" #include "eventhandler.h"
#include "neochatconfig.h"
#include "neochatconnection.h" #include "neochatconnection.h"
#include "neochatroom.h" #include "neochatroom.h"
#include "roommanager.h"
#include "spacehierarchycache.h" #include "spacehierarchycache.h"
#include <KLocalizedString> #include <KLocalizedString>
@@ -18,6 +17,10 @@ using namespace Quotient;
Q_DECLARE_METATYPE(Quotient::JoinState) Q_DECLARE_METATYPE(Quotient::JoinState)
std::function<bool(const Quotient::RoomEvent *)> RoomListModel::m_hiddenFilter = [](const Quotient::RoomEvent *) -> bool {
return false;
};
RoomListModel::RoomListModel(QObject *parent) RoomListModel::RoomListModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
{ {
@@ -242,22 +245,7 @@ QVariant RoomListModel::data(const QModelIndex &index, int role) const
return QVariant::fromValue(room); return QVariant::fromValue(room);
} }
if (role == SubtitleTextRole) { if (role == SubtitleTextRole) {
const auto lastEvent = room->lastEvent([](const RoomEvent *event) -> bool { const auto lastEvent = room->lastEvent(m_hiddenFilter);
if (event->isStateEvent() && !NeoChatConfig::showStateEvent()) {
return true;
}
if (auto roomMemberEvent = eventCast<const RoomMemberEvent>(event)) {
if ((roomMemberEvent->isJoin() || roomMemberEvent->isLeave()) && !NeoChatConfig::showLeaveJoinEvent()) {
return true;
} else if (roomMemberEvent->isRename() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave() && !NeoChatConfig::showRename()) {
return true;
} else if (roomMemberEvent->isAvatarUpdate() && !roomMemberEvent->isJoin() && !roomMemberEvent->isLeave()
&& !NeoChatConfig::showAvatarUpdate()) {
return true;
}
}
return false;
});
if (lastEvent == nullptr || room->lastEventIsSpoiler()) { if (lastEvent == nullptr || room->lastEventIsSpoiler()) {
return QString(); return QString();
} }
@@ -332,4 +320,9 @@ int RoomListModel::rowForRoom(NeoChatRoom *room) const
return m_rooms.indexOf(room); return m_rooms.indexOf(room);
} }
void RoomListModel::setHiddenFilter(std::function<bool(const Quotient::RoomEvent *)> hiddenFilter)
{
RoomListModel::m_hiddenFilter = hiddenFilter;
}
#include "moc_roomlistmodel.cpp" #include "moc_roomlistmodel.cpp"

View File

@@ -11,6 +11,7 @@ class NeoChatRoom;
namespace Quotient namespace Quotient
{ {
class Room; class Room;
class RoomEvent;
} }
class NeoChatConnection; class NeoChatConnection;
@@ -99,6 +100,8 @@ public:
*/ */
Q_INVOKABLE NeoChatRoom *roomByAliasOrId(const QString &aliasOrId); Q_INVOKABLE NeoChatRoom *roomByAliasOrId(const QString &aliasOrId);
static void setHiddenFilter(std::function<bool(const Quotient::RoomEvent *)> hiddenFilter);
private Q_SLOTS: private Q_SLOTS:
void doResetModel(); void doResetModel();
void doAddRoom(Quotient::Room *room); void doAddRoom(Quotient::Room *room);
@@ -114,6 +117,8 @@ private:
void connectRoomSignals(NeoChatRoom *room); void connectRoomSignals(NeoChatRoom *room);
static std::function<bool(const Quotient::RoomEvent *)> m_hiddenFilter;
Q_SIGNALS: Q_SIGNALS:
void connectionChanged(); void connectionChanged();
void roomAdded(NeoChatRoom *_t1); void roomAdded(NeoChatRoom *_t1);

View File

@@ -6,10 +6,10 @@
#include <Quotient/events/roommemberevent.h> #include <Quotient/events/roommemberevent.h>
#include <Quotient/room.h> #include <Quotient/room.h>
#include "enums/neochatroomtype.h"
#include "eventhandler.h" #include "eventhandler.h"
#include "neochatconfig.h" #include "neochatconfig.h"
#include "neochatconnection.h" #include "neochatconnection.h"
#include "neochatroomtype.h"
#include "spacehierarchycache.h" #include "spacehierarchycache.h"
using namespace Quotient; using namespace Quotient;

View File

@@ -3,7 +3,7 @@
#include "sortfilterroomlistmodel.h" #include "sortfilterroomlistmodel.h"
#include "roomlistmodel.h" #include "models/roomlistmodel.h"
#include "neochatconnection.h" #include "neochatconnection.h"

View File

@@ -4,11 +4,11 @@
#include "sortfilterroomtreemodel.h" #include "sortfilterroomtreemodel.h"
#include "enums/neochatroomtype.h"
#include "enums/roomsortparameter.h" #include "enums/roomsortparameter.h"
#include "neochatconfig.h" #include "neochatconfig.h"
#include "neochatconnection.h" #include "neochatconnection.h"
#include "neochatroom.h" #include "neochatroom.h"
#include "neochatroomtype.h"
#include "roommanager.h" #include "roommanager.h"
#include "roomtreemodel.h" #include "roomtreemodel.h"
#include "spacehierarchycache.h" #include "spacehierarchycache.h"

View File

@@ -3,7 +3,7 @@
#include "sortfilterspacelistmodel.h" #include "sortfilterspacelistmodel.h"
#include "roomlistmodel.h" #include "models/roomlistmodel.h"
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;

View File

@@ -3,7 +3,7 @@
#include "userfiltermodel.h" #include "userfiltermodel.h"
#include "userlistmodel.h" #include "models/userlistmodel.h"
bool UserFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const bool UserFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{ {

View File

@@ -6,7 +6,7 @@
#include <QDBusMetaType> #include <QDBusMetaType>
#include "controller.h" #include "controller.h"
#include "roomlistmodel.h" #include "models/roomlistmodel.h"
#include "roommanager.h" #include "roommanager.h"
#include "sortfilterroomlistmodel.h" #include "sortfilterroomlistmodel.h"
#include "windowcontroller.h" #include "windowcontroller.h"