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
controller.cpp
controller.h
models/roomlistmodel.cpp
models/roomlistmodel.h
models/sortfilterspacelistmodel.cpp
models/sortfilterspacelistmodel.h
roommanager.cpp
roommanager.h
models/userlistmodel.cpp
models/userlistmodel.h
models/userfiltermodel.cpp
models/userfiltermodel.h
models/publicroomlistmodel.cpp
@@ -40,8 +36,6 @@ add_library(neochat STATIC
models/sortfilterroomlistmodel.h
models/roomtreemodel.cpp
models/roomtreemodel.h
chatdocumenthandler.cpp
chatdocumenthandler.h
models/webshortcutmodel.cpp
models/webshortcutmodel.h
blurhash.cpp
@@ -50,10 +44,6 @@ add_library(neochat STATIC
blurhashimageprovider.h
windowcontroller.cpp
windowcontroller.h
models/completionmodel.cpp
models/completionmodel.h
models/completionproxymodel.cpp
models/completionproxymodel.h
models/serverlistmodel.cpp
models/serverlistmodel.h
models/statemodel.cpp
@@ -68,7 +58,6 @@ add_library(neochat STATIC
models/notificationsmodel.h
proxycontroller.cpp
proxycontroller.h
enums/neochatroomtype.h
models/sortfilterroomtreemodel.cpp
models/sortfilterroomtreemodel.h
mediamanager.cpp
@@ -233,13 +222,6 @@ ecm_qt_declare_logging_category(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
main.cpp
)

View File

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

View File

@@ -19,11 +19,12 @@
#include <Quotient/qt_connection_util.h>
#include <Quotient/settings.h>
#include "mediasizehelper.h"
#include "accountmanager.h"
#include "mediasizehelper.h"
#include "models/actionsmodel.h"
#include "models/messagemodel.h"
#include "models/pushrulemodel.h"
#include "models/roomlistmodel.h"
#include "neochatconfig.h"
#include "neochatconnection.h"
#include "neochatroom.h"
@@ -50,6 +51,22 @@
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)
: QObject(parent)
{
@@ -76,21 +93,8 @@ Controller::Controller(QObject *parent)
ActionsModel::setAllowQuickEdit(NeoChatConfig::allowQuickEdit());
});
MessageModel::setHiddenFilter([](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;
});
MessageModel::setHiddenFilter(hiddenEventFilter);
RoomListModel::setHiddenFilter(hiddenEventFilter);
MediaSizeHelper::setMaxSize(NeoChatConfig::mediaMaxWidth(), NeoChatConfig::mediaMaxHeight());
connect(NeoChatConfig::self(), &NeoChatConfig::MediaMaxWidthChanged, this, []() {

View File

@@ -9,6 +9,7 @@ target_sources(LibNeoChat PRIVATE
neochatroommember.cpp
accountmanager.cpp
chatbarcache.cpp
chatdocumenthandler.cpp
clipboard.cpp
delegatesizehelper.cpp
emojitones.cpp
@@ -28,12 +29,16 @@ target_sources(LibNeoChat PRIVATE
events/imagepackevent.cpp
events/pollevent.cpp
models/actionsmodel.cpp
models/completionmodel.cpp
models/completionproxymodel.cpp
models/customemojimodel.cpp
models/emojimodel.cpp
models/imagepacksmodel.cpp
models/livelocationsmodel.cpp
models/locationsmodel.cpp
models/roomlistmodel.cpp
models/stickermodel.cpp
models/userlistmodel.cpp
)
ecm_add_qml_module(LibNeoChat GENERATE_PLUGIN_SOURCE
@@ -48,16 +53,25 @@ ecm_qt_declare_logging_category(LibNeoChat
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)
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
Qt::Core
Qt::Multimedia
Qt::Quick
Qt::QuickControls2
KF6::ConfigCore
KF6::CoreAddons
KF6::I18n
KF6::Kirigami
KF6::SonnetCore
QuotientQt6
cmark::cmark
QCoro::Core

View File

@@ -9,13 +9,11 @@
#include "models/customemojimodel.h"
#include "models/emojimodel.h"
#include "neochatroom.h"
#include "roommanager.h"
#include "userlistmodel.h"
CompletionModel::CompletionModel(QObject *parent)
: QAbstractListModel(parent)
, m_filterModel(new CompletionProxyModel())
, m_userListModel(RoomManager::instance().userListModel())
, m_emojiModel(new QConcatenateTablesProxyModel(this))
{
connect(this, &CompletionModel::textChanged, this, &CompletionModel::updateCompletion);
@@ -192,4 +190,19 @@ void CompletionModel::setRoomListModel(RoomListModel *roomListModel)
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"

View File

@@ -49,6 +49,11 @@ class CompletionModel : public QAbstractListModel
*/
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:
/**
* @brief Defines the different types of completion available.
@@ -105,6 +110,9 @@ public:
RoomListModel *roomListModel() const;
void setRoomListModel(RoomListModel *roomListModel);
UserListModel *userListModel() const;
void setUserListModel(UserListModel *userListModel);
AutoCompletionType autoCompletionType() const;
void setAutoCompletionType(AutoCompletionType autoCompletionType);
@@ -113,6 +121,7 @@ Q_SIGNALS:
void roomChanged();
void autoCompletionTypeChanged();
void roomListModelChanged();
void userListModelChanged();
private:
QString m_text;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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