Move all timeline relevant models and classes to the module
This commit is contained in:
@@ -7,16 +7,19 @@ qt_add_executable(timeline-memtest
|
|||||||
main.cpp
|
main.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(timeline-memtest PRIVATE neochatplugin timelineplugin)
|
target_link_libraries(timeline-memtest PRIVATE neochatplugin Timelineplugin)
|
||||||
target_link_libraries(timeline-memtest PUBLIC
|
target_link_libraries(timeline-memtest PUBLIC
|
||||||
Qt::Core
|
Qt::Core
|
||||||
Qt::Quick
|
Qt::Quick
|
||||||
Qt::Qml
|
Qt::Qml
|
||||||
Qt::Gui
|
Qt::Gui
|
||||||
Qt::QuickControls2
|
Qt::QuickControls2
|
||||||
|
Qt::Widgets
|
||||||
|
KF6::I18n
|
||||||
KF6::Kirigami
|
KF6::Kirigami
|
||||||
QuotientQt6
|
QuotientQt6
|
||||||
neochat
|
LibNeoChat
|
||||||
|
Timeline
|
||||||
)
|
)
|
||||||
|
|
||||||
ecm_add_qml_module(timeline-memtest URI org.kde.neochat.timeline-memtest GENERATE_PLUGIN_SOURCE
|
ecm_add_qml_module(timeline-memtest URI org.kde.neochat.timeline-memtest GENERATE_PLUGIN_SOURCE
|
||||||
@@ -30,5 +33,5 @@ ecm_add_qml_module(timeline-memtest URI org.kde.neochat.timeline-memtest GENERAT
|
|||||||
QtCore
|
QtCore
|
||||||
QtQuick
|
QtQuick
|
||||||
IMPORTS
|
IMPORTS
|
||||||
org.kde.neochat
|
org.kde.neochat.timeline
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,14 +8,11 @@ if (NOT ANDROID AND NOT WIN32 AND NOT APPLE AND NOT NEOCHAT_FLATPAK AND NOT NEOC
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(libneochat)
|
add_subdirectory(libneochat)
|
||||||
|
add_subdirectory(timeline)
|
||||||
|
|
||||||
add_library(neochat STATIC
|
add_library(neochat STATIC
|
||||||
controller.cpp
|
controller.cpp
|
||||||
controller.h
|
controller.h
|
||||||
models/timelinemessagemodel.cpp
|
|
||||||
models/timelinemessagemodel.h
|
|
||||||
models/messagefiltermodel.cpp
|
|
||||||
models/messagefiltermodel.h
|
|
||||||
models/roomlistmodel.cpp
|
models/roomlistmodel.cpp
|
||||||
models/roomlistmodel.h
|
models/roomlistmodel.h
|
||||||
models/sortfilterspacelistmodel.cpp
|
models/sortfilterspacelistmodel.cpp
|
||||||
@@ -53,8 +50,6 @@ add_library(neochat STATIC
|
|||||||
models/devicesmodel.cpp
|
models/devicesmodel.cpp
|
||||||
models/devicesmodel.h
|
models/devicesmodel.h
|
||||||
models/devicesproxymodel.cpp
|
models/devicesproxymodel.cpp
|
||||||
filetype.cpp
|
|
||||||
filetype.h
|
|
||||||
login.cpp
|
login.cpp
|
||||||
login.h
|
login.h
|
||||||
models/webshortcutmodel.cpp
|
models/webshortcutmodel.cpp
|
||||||
@@ -63,8 +58,6 @@ add_library(neochat STATIC
|
|||||||
blurhash.h
|
blurhash.h
|
||||||
blurhashimageprovider.cpp
|
blurhashimageprovider.cpp
|
||||||
blurhashimageprovider.h
|
blurhashimageprovider.h
|
||||||
models/mediamessagefiltermodel.cpp
|
|
||||||
models/mediamessagefiltermodel.h
|
|
||||||
windowcontroller.cpp
|
windowcontroller.cpp
|
||||||
windowcontroller.h
|
windowcontroller.h
|
||||||
models/completionmodel.cpp
|
models/completionmodel.cpp
|
||||||
@@ -77,43 +70,31 @@ add_library(neochat STATIC
|
|||||||
models/statemodel.h
|
models/statemodel.h
|
||||||
models/statefiltermodel.cpp
|
models/statefiltermodel.cpp
|
||||||
models/statefiltermodel.h
|
models/statefiltermodel.h
|
||||||
models/searchmodel.cpp
|
|
||||||
models/searchmodel.h
|
|
||||||
logger.cpp
|
logger.cpp
|
||||||
logger.h
|
logger.h
|
||||||
models/stickermodel.cpp
|
models/stickermodel.cpp
|
||||||
models/stickermodel.h
|
models/stickermodel.h
|
||||||
models/imagepacksmodel.cpp
|
models/imagepacksmodel.cpp
|
||||||
models/imagepacksmodel.h
|
models/imagepacksmodel.h
|
||||||
models/reactionmodel.cpp
|
|
||||||
models/reactionmodel.h
|
|
||||||
models/livelocationsmodel.cpp
|
models/livelocationsmodel.cpp
|
||||||
models/livelocationsmodel.h
|
models/livelocationsmodel.h
|
||||||
models/locationsmodel.cpp
|
models/locationsmodel.cpp
|
||||||
models/locationsmodel.h
|
models/locationsmodel.h
|
||||||
locationhelper.cpp
|
locationhelper.cpp
|
||||||
locationhelper.h
|
locationhelper.h
|
||||||
pollhandler.cpp
|
|
||||||
registration.cpp
|
registration.cpp
|
||||||
jobs/neochatgetcommonroomsjob.cpp
|
jobs/neochatgetcommonroomsjob.cpp
|
||||||
jobs/neochatgetcommonroomsjob.h
|
jobs/neochatgetcommonroomsjob.h
|
||||||
mediasizehelper.cpp
|
mediasizehelper.cpp
|
||||||
mediasizehelper.h
|
mediasizehelper.h
|
||||||
enums/delegatetype.h
|
|
||||||
colorschemer.cpp
|
colorschemer.cpp
|
||||||
colorschemer.h
|
colorschemer.h
|
||||||
models/notificationsmodel.cpp
|
models/notificationsmodel.cpp
|
||||||
models/notificationsmodel.h
|
models/notificationsmodel.h
|
||||||
models/timelinemodel.cpp
|
|
||||||
models/timelinemodel.h
|
|
||||||
models/itinerarymodel.cpp
|
|
||||||
models/itinerarymodel.h
|
|
||||||
proxycontroller.cpp
|
proxycontroller.cpp
|
||||||
proxycontroller.h
|
proxycontroller.h
|
||||||
models/linemodel.cpp
|
models/linemodel.cpp
|
||||||
models/linemodel.h
|
models/linemodel.h
|
||||||
models/messagecontentmodel.cpp
|
|
||||||
models/messagecontentmodel.h
|
|
||||||
enums/neochatroomtype.h
|
enums/neochatroomtype.h
|
||||||
models/sortfilterroomtreemodel.cpp
|
models/sortfilterroomtreemodel.cpp
|
||||||
models/sortfilterroomtreemodel.h
|
models/sortfilterroomtreemodel.h
|
||||||
@@ -136,26 +117,12 @@ add_library(neochat STATIC
|
|||||||
models/permissionsmodel.h
|
models/permissionsmodel.h
|
||||||
threepidbindhelper.cpp
|
threepidbindhelper.cpp
|
||||||
threepidbindhelper.h
|
threepidbindhelper.h
|
||||||
models/readmarkermodel.cpp
|
|
||||||
models/readmarkermodel.h
|
|
||||||
models/threadmodel.cpp
|
|
||||||
models/threadmodel.h
|
|
||||||
enums/roomsortparameter.cpp
|
enums/roomsortparameter.cpp
|
||||||
enums/roomsortparameter.h
|
enums/roomsortparameter.h
|
||||||
models/roomsortparametermodel.cpp
|
models/roomsortparametermodel.cpp
|
||||||
models/roomsortparametermodel.h
|
models/roomsortparametermodel.h
|
||||||
models/messagemodel.cpp
|
|
||||||
models/messagemodel.h
|
|
||||||
models/messagecontentfiltermodel.cpp
|
|
||||||
models/messagecontentfiltermodel.h
|
|
||||||
models/pinnedmessagemodel.cpp
|
|
||||||
models/pinnedmessagemodel.h
|
|
||||||
models/commonroomsmodel.cpp
|
models/commonroomsmodel.cpp
|
||||||
models/commonroomsmodel.h
|
models/commonroomsmodel.h
|
||||||
models/pollanswermodel.cpp
|
|
||||||
models/pollanswermodel.h
|
|
||||||
contentprovider.cpp
|
|
||||||
contentprovider.h
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set_source_files_properties(qml/TextToSpeechWrapper.qml PROPERTIES
|
set_source_files_properties(qml/TextToSpeechWrapper.qml PROPERTIES
|
||||||
@@ -262,9 +229,6 @@ ecm_add_qml_module(neochat URI org.kde.neochat GENERATE_PLUGIN_SOURCE
|
|||||||
qml/AvatarNotification.qml
|
qml/AvatarNotification.qml
|
||||||
qml/ReasonDialog.qml
|
qml/ReasonDialog.qml
|
||||||
qml/NewPollDialog.qml
|
qml/NewPollDialog.qml
|
||||||
SOURCES
|
|
||||||
messageattached.cpp
|
|
||||||
messageattached.h
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
QtCore
|
QtCore
|
||||||
QtQuick
|
QtQuick
|
||||||
@@ -278,7 +242,6 @@ ecm_add_qml_module(neochat URI org.kde.neochat GENERATE_PLUGIN_SOURCE
|
|||||||
)
|
)
|
||||||
|
|
||||||
add_subdirectory(settings)
|
add_subdirectory(settings)
|
||||||
add_subdirectory(timeline)
|
|
||||||
add_subdirectory(devtools)
|
add_subdirectory(devtools)
|
||||||
add_subdirectory(login)
|
add_subdirectory(login)
|
||||||
add_subdirectory(chatbar)
|
add_subdirectory(chatbar)
|
||||||
@@ -293,21 +256,10 @@ else()
|
|||||||
qt_target_qml_sources(neochat QML_FILES qml/ShareActionStub.qml)
|
qt_target_qml_sources(neochat QML_FILES qml/ShareActionStub.qml)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_file(config-neochat.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-neochat.h)
|
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set_target_properties(neochat PROPERTIES OUTPUT_NAME "neochatlib")
|
set_target_properties(neochat PROPERTIES OUTPUT_NAME "neochatlib")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ecm_qt_declare_logging_category(neochat
|
|
||||||
HEADER "messagemodel_logging.h"
|
|
||||||
IDENTIFIER "Message"
|
|
||||||
CATEGORY_NAME "org.kde.neochat.messagemodel"
|
|
||||||
DESCRIPTION "Neochat: messagemodel"
|
|
||||||
DEFAULT_SEVERITY Info
|
|
||||||
EXPORT NEOCHAT
|
|
||||||
)
|
|
||||||
|
|
||||||
ecm_qt_declare_logging_category(neochat
|
ecm_qt_declare_logging_category(neochat
|
||||||
HEADER "publicroomlist_logging.h"
|
HEADER "publicroomlist_logging.h"
|
||||||
IDENTIFIER "PublicRoomList"
|
IDENTIFIER "PublicRoomList"
|
||||||
@@ -367,9 +319,10 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(neochat PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/models ${CMAKE_CURRENT_SOURCE_DIR}/enums)
|
target_include_directories(neochat PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/models ${CMAKE_CURRENT_SOURCE_DIR}/enums)
|
||||||
target_link_libraries(neochat PRIVATE settingsplugin timelineplugin devtoolsplugin loginplugin chatbarplugin)
|
target_link_libraries(neochat PRIVATE settingsplugin Timelineplugin devtoolsplugin loginplugin chatbarplugin)
|
||||||
target_link_libraries(neochat PUBLIC
|
target_link_libraries(neochat PUBLIC
|
||||||
LibNeoChat
|
LibNeoChat
|
||||||
|
Timeline
|
||||||
Qt::Core
|
Qt::Core
|
||||||
Qt::Quick
|
Qt::Quick
|
||||||
Qt::Qml
|
Qt::Qml
|
||||||
@@ -506,7 +459,7 @@ if(ANDROID)
|
|||||||
)
|
)
|
||||||
ecm_add_android_apk(neochat-app ANDROID_DIR ${CMAKE_SOURCE_DIR}/android)
|
ecm_add_android_apk(neochat-app ANDROID_DIR ${CMAKE_SOURCE_DIR}/android)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(neochat PUBLIC Qt::Widgets KF6::KIOWidgets KF6::SyntaxHighlighting)
|
target_link_libraries(neochat PUBLIC Qt::Widgets KF6::KIOWidgets)
|
||||||
install(FILES neochat.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})
|
install(FILES neochat.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -15,10 +15,12 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#include <Quotient/csapi/notifications.h>
|
#include <Quotient/csapi/notifications.h>
|
||||||
|
#include <Quotient/events/roommemberevent.h>
|
||||||
#include <Quotient/qt_connection_util.h>
|
#include <Quotient/qt_connection_util.h>
|
||||||
#include <Quotient/settings.h>
|
#include <Quotient/settings.h>
|
||||||
|
|
||||||
#include "models/actionsmodel.h"
|
#include "models/actionsmodel.h"
|
||||||
|
#include "models/messagemodel.h"
|
||||||
#include "neochatconfig.h"
|
#include "neochatconfig.h"
|
||||||
#include "neochatconnection.h"
|
#include "neochatconnection.h"
|
||||||
#include "neochatroom.h"
|
#include "neochatroom.h"
|
||||||
@@ -68,6 +70,22 @@ Controller::Controller(QObject *parent)
|
|||||||
ActionsModel::setAllowQuickEdit(NeoChatConfig::allowQuickEdit());
|
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;
|
||||||
|
});
|
||||||
|
|
||||||
ProxyController::instance().setApplicationProxy();
|
ProxyController::instance().setApplicationProxy();
|
||||||
|
|
||||||
#ifndef Q_OS_ANDROID
|
#ifndef Q_OS_ANDROID
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ target_sources(LibNeoChat PRIVATE
|
|||||||
emojitones.cpp
|
emojitones.cpp
|
||||||
eventhandler.cpp
|
eventhandler.cpp
|
||||||
filetransferpseudojob.cpp
|
filetransferpseudojob.cpp
|
||||||
|
filetype.cpp
|
||||||
linkpreviewer.cpp
|
linkpreviewer.cpp
|
||||||
roomlastmessageprovider.cpp
|
roomlastmessageprovider.cpp
|
||||||
spacehierarchycache.cpp
|
spacehierarchycache.cpp
|
||||||
|
|||||||
@@ -56,7 +56,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
Q_INVOKABLE QMimeType mimeTypeForName(const QString &nameOrAlias) const;
|
Q_INVOKABLE QMimeType mimeTypeForName(const QString &nameOrAlias) const;
|
||||||
|
|
||||||
enum MatchMode { MatchDefault, MatchExtension, MatchContent };
|
enum MatchMode {
|
||||||
|
MatchDefault,
|
||||||
|
MatchExtension,
|
||||||
|
MatchContent,
|
||||||
|
};
|
||||||
Q_ENUM(MatchMode)
|
Q_ENUM(MatchMode)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -5,9 +5,11 @@
|
|||||||
#include "roommanager.h"
|
#include "roommanager.h"
|
||||||
|
|
||||||
#include "chatbarcache.h"
|
#include "chatbarcache.h"
|
||||||
|
#include "contentprovider.h"
|
||||||
#include "controller.h"
|
#include "controller.h"
|
||||||
#include "eventhandler.h"
|
#include "eventhandler.h"
|
||||||
#include "models/actionsmodel.h"
|
#include "models/actionsmodel.h"
|
||||||
|
#include "models/messagefiltermodel.h"
|
||||||
#include "neochatconfig.h"
|
#include "neochatconfig.h"
|
||||||
#include "neochatconnection.h"
|
#include "neochatconnection.h"
|
||||||
#include "neochatroom.h"
|
#include "neochatroom.h"
|
||||||
@@ -72,6 +74,49 @@ RoomManager::RoomManager(QObject *parent)
|
|||||||
resolveResource(idOrUri, action);
|
resolveResource(idOrUri, action);
|
||||||
});
|
});
|
||||||
connect(&ActionsModel::instance(), &ActionsModel::knockRoom, this, &RoomManager::knockRoom);
|
connect(&ActionsModel::instance(), &ActionsModel::knockRoom, this, &RoomManager::knockRoom);
|
||||||
|
connect(NeoChatConfig::self(), &NeoChatConfig::ShowStateEventChanged, this, [this] {
|
||||||
|
if (m_messageFilterModel) {
|
||||||
|
m_messageFilterModel->invalidate();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect(NeoChatConfig::self(), &NeoChatConfig::ShowLeaveJoinEventChanged, this, [this] {
|
||||||
|
if (m_messageFilterModel) {
|
||||||
|
m_messageFilterModel->invalidate();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect(NeoChatConfig::self(), &NeoChatConfig::ShowRenameChanged, this, [this] {
|
||||||
|
if (m_messageFilterModel) {
|
||||||
|
m_messageFilterModel->invalidate();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect(NeoChatConfig::self(), &NeoChatConfig::ShowAvatarUpdateChanged, this, [this] {
|
||||||
|
if (m_messageFilterModel) {
|
||||||
|
m_messageFilterModel->invalidate();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
MessageFilterModel::setShowAllEvents(NeoChatConfig::self()->showAllEvents());
|
||||||
|
connect(NeoChatConfig::self(), &NeoChatConfig::ShowAllEventsChanged, this, [this] {
|
||||||
|
MessageFilterModel::setShowAllEvents(NeoChatConfig::self()->showAllEvents());
|
||||||
|
if (m_messageFilterModel) {
|
||||||
|
m_messageFilterModel->invalidate();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
MessageFilterModel::setShowDeletedMessages(NeoChatConfig::self()->showDeletedMessages());
|
||||||
|
connect(NeoChatConfig::self(), &NeoChatConfig::ShowDeletedMessagesChanged, this, [this] {
|
||||||
|
MessageFilterModel::setShowDeletedMessages(NeoChatConfig::self()->showDeletedMessages());
|
||||||
|
if (m_messageFilterModel) {
|
||||||
|
m_messageFilterModel->invalidate();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ContentProvider::self().setThreadsEnabled(NeoChatConfig::threads());
|
||||||
|
MessageModel::setThreadsEnabled(NeoChatConfig::threads());
|
||||||
|
connect(NeoChatConfig::self(), &NeoChatConfig::ThreadsChanged, this, [this] {
|
||||||
|
ContentProvider::self().setThreadsEnabled(NeoChatConfig::threads());
|
||||||
|
MessageModel::setThreadsEnabled(NeoChatConfig::threads());
|
||||||
|
if (m_timelineModel) {
|
||||||
|
Q_EMIT m_timelineModel->threadsEnabledChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
RoomManager::~RoomManager()
|
RoomManager::~RoomManager()
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# SPDX-FileCopyrightText: 2024 James Graham <james.h.graham@protonmail.com>
|
# SPDX-FileCopyrightText: 2024 James Graham <james.h.graham@protonmail.com>
|
||||||
# SPDX-License-Identifier: BSD-2-Clause
|
# SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
|
||||||
qt_add_library(timeline STATIC)
|
qt_add_library(Timeline STATIC)
|
||||||
ecm_add_qml_module(timeline GENERATE_PLUGIN_SOURCE
|
ecm_add_qml_module(Timeline GENERATE_PLUGIN_SOURCE
|
||||||
URI org.kde.neochat.timeline
|
URI org.kde.neochat.timeline
|
||||||
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/src/org/kde/neochat/timeline
|
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/src/org/kde/neochat/timeline
|
||||||
QML_FILES
|
QML_FILES
|
||||||
@@ -55,8 +55,25 @@ ecm_add_qml_module(timeline GENERATE_PLUGIN_SOURCE
|
|||||||
ThreadBodyComponent.qml
|
ThreadBodyComponent.qml
|
||||||
VideoComponent.qml
|
VideoComponent.qml
|
||||||
SOURCES
|
SOURCES
|
||||||
|
contentprovider.cpp
|
||||||
|
messageattached.cpp
|
||||||
|
pollhandler.cpp
|
||||||
timelinedelegate.cpp
|
timelinedelegate.cpp
|
||||||
timelinedelegate.h
|
enums/delegatetype.h
|
||||||
|
models/itinerarymodel.cpp
|
||||||
|
models/mediamessagefiltermodel.cpp
|
||||||
|
models/messagecontentmodel.cpp
|
||||||
|
models/messagecontentfiltermodel.cpp
|
||||||
|
models/messagefiltermodel.cpp
|
||||||
|
models/messagemodel.cpp
|
||||||
|
models/pinnedmessagemodel.cpp
|
||||||
|
models/pollanswermodel.cpp
|
||||||
|
models/reactionmodel.cpp
|
||||||
|
models/readmarkermodel.cpp
|
||||||
|
models/searchmodel.cpp
|
||||||
|
models/timelinemessagemodel.cpp
|
||||||
|
models/timelinemodel.cpp
|
||||||
|
models/threadmodel.cpp
|
||||||
RESOURCES
|
RESOURCES
|
||||||
images/bike.svg
|
images/bike.svg
|
||||||
images/bus.svg
|
images/bus.svg
|
||||||
@@ -87,8 +104,26 @@ ecm_add_qml_module(timeline GENERATE_PLUGIN_SOURCE
|
|||||||
QtQuick
|
QtQuick
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(timeline PRIVATE
|
configure_file(config-neochat.h.in ${CMAKE_CURRENT_BINARY_DIR}/config-neochat.h)
|
||||||
Qt::Quick
|
|
||||||
KF6::Kirigami
|
ecm_qt_declare_logging_category(Timeline
|
||||||
LibNeoChat
|
HEADER "messagemodel_logging.h"
|
||||||
|
IDENTIFIER "Message"
|
||||||
|
CATEGORY_NAME "org.kde.neochat.messagemodel"
|
||||||
|
DESCRIPTION "Neochat: messagemodel"
|
||||||
|
DEFAULT_SEVERITY Info
|
||||||
|
EXPORT NEOCHAT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_include_directories(Timeline PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/enums ${CMAKE_CURRENT_SOURCE_DIR}/models)
|
||||||
|
target_link_libraries(Timeline PRIVATE
|
||||||
|
LibNeoChat
|
||||||
|
Qt::Core
|
||||||
|
Qt::Quick
|
||||||
|
Qt::QuickControls2
|
||||||
|
KF6::Kirigami
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT ANDROID)
|
||||||
|
target_link_libraries(Timeline PUBLIC KF6::SyntaxHighlighting)
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -106,4 +106,13 @@ PollHandler *ContentProvider::handlerForPoll(NeoChatRoom *room, const QString &e
|
|||||||
return m_pollHandlers.object(eventId);
|
return m_pollHandlers.object(eventId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ContentProvider::setThreadsEnabled(bool enableThreads)
|
||||||
|
{
|
||||||
|
MessageContentModel::setThreadsEnabled(enableThreads);
|
||||||
|
|
||||||
|
for (const auto &key : m_eventContentModels.keys()) {
|
||||||
|
m_eventContentModels.object(key)->threadsEnabledChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#include "moc_contentprovider.cpp"
|
#include "moc_contentprovider.cpp"
|
||||||
@@ -81,6 +81,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
Q_INVOKABLE PollHandler *handlerForPoll(NeoChatRoom *room, const QString &eventId);
|
Q_INVOKABLE PollHandler *handlerForPoll(NeoChatRoom *room, const QString &eventId);
|
||||||
|
|
||||||
|
void setThreadsEnabled(bool enableThreads);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit ContentProvider(QObject *parent = nullptr);
|
explicit ContentProvider(QObject *parent = nullptr);
|
||||||
|
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
#include "contentprovider.h"
|
#include "contentprovider.h"
|
||||||
#include "enums/messagecomponenttype.h"
|
#include "enums/messagecomponenttype.h"
|
||||||
#include "eventhandler.h"
|
#include "eventhandler.h"
|
||||||
#include "neochatconfig.h"
|
|
||||||
|
|
||||||
#include <QImageReader>
|
#include <QImageReader>
|
||||||
|
|
||||||
@@ -37,6 +36,8 @@
|
|||||||
|
|
||||||
using namespace Quotient;
|
using namespace Quotient;
|
||||||
|
|
||||||
|
bool MessageContentModel::m_threadsEnabled = false;
|
||||||
|
|
||||||
MessageContentModel::MessageContentModel(NeoChatRoom *room, const QString &eventId, bool isReply, bool isPending, MessageContentModel *parent)
|
MessageContentModel::MessageContentModel(NeoChatRoom *room, const QString &eventId, bool isReply, bool isPending, MessageContentModel *parent)
|
||||||
: QAbstractListModel(parent)
|
: QAbstractListModel(parent)
|
||||||
, m_room(room)
|
, m_room(room)
|
||||||
@@ -149,7 +150,7 @@ void MessageContentModel::initializeModel()
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(NeoChatConfig::self(), &NeoChatConfig::ThreadsChanged, this, [this]() {
|
connect(this, &MessageContentModel::threadsEnabledChanged, this, [this]() {
|
||||||
updateReplyModel();
|
updateReplyModel();
|
||||||
resetModel();
|
resetModel();
|
||||||
});
|
});
|
||||||
@@ -497,11 +498,10 @@ QList<MessageComponent> MessageContentModel::messageContentComponents(bool isEdi
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if Quotient_VERSION_MINOR > 9 || (Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH > 1)
|
#if Quotient_VERSION_MINOR > 9 || (Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH > 1)
|
||||||
if (NeoChatConfig::self()->threads() && roomMessageEvent && (roomMessageEvent->isThreaded() || m_room->threads().contains(roomMessageEvent->id()))
|
if (m_threadsEnabled && roomMessageEvent && (roomMessageEvent->isThreaded() || m_room->threads().contains(roomMessageEvent->id()))
|
||||||
&& roomMessageEvent->id() == roomMessageEvent->threadRootEventId()) {
|
&& roomMessageEvent->id() == roomMessageEvent->threadRootEventId()) {
|
||||||
#else
|
#else
|
||||||
if (NeoChatConfig::self()->threads() && roomMessageEvent && roomMessageEvent->isThreaded()
|
if (m_threadsEnabled && roomMessageEvent && roomMessageEvent->isThreaded() && roomMessageEvent->id() == roomMessageEvent->threadRootEventId()) {
|
||||||
&& roomMessageEvent->id() == roomMessageEvent->threadRootEventId()) {
|
|
||||||
#endif
|
#endif
|
||||||
newComponents += MessageComponent{MessageComponentType::Separator, {}, {}};
|
newComponents += MessageComponent{MessageComponentType::Separator, {}, {}};
|
||||||
newComponents += MessageComponent{MessageComponentType::ThreadBody, u"Thread Body"_s, {}};
|
newComponents += MessageComponent{MessageComponentType::ThreadBody, u"Thread Body"_s, {}};
|
||||||
@@ -530,7 +530,7 @@ void MessageContentModel::updateReplyModel()
|
|||||||
if (roomMessageEvent == nullptr) {
|
if (roomMessageEvent == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!roomMessageEvent->isReply(!NeoChatConfig::self()->threads()) || (roomMessageEvent->isThreaded() && NeoChatConfig::self()->threads())) {
|
if (!roomMessageEvent->isReply(m_threadsEnabled) || (roomMessageEvent->isThreaded() && m_threadsEnabled)) {
|
||||||
if (m_replyModel) {
|
if (m_replyModel) {
|
||||||
delete m_replyModel;
|
delete m_replyModel;
|
||||||
}
|
}
|
||||||
@@ -541,7 +541,7 @@ void MessageContentModel::updateReplyModel()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_replyModel = new MessageContentModel(m_room, roomMessageEvent->replyEventId(!NeoChatConfig::self()->threads()), true, false, this);
|
m_replyModel = new MessageContentModel(m_room, roomMessageEvent->replyEventId(!m_threadsEnabled), true, false, this);
|
||||||
|
|
||||||
connect(m_replyModel, &MessageContentModel::eventUpdated, this, [this]() {
|
connect(m_replyModel, &MessageContentModel::eventUpdated, this, [this]() {
|
||||||
Q_EMIT dataChanged(index(0), index(0), {ReplyAuthorRole});
|
Q_EMIT dataChanged(index(0), index(0), {ReplyAuthorRole});
|
||||||
@@ -774,4 +774,9 @@ ThreadModel *MessageContentModel::modelForThread(const QString &threadRootId)
|
|||||||
return ContentProvider::self().modelForThread(m_room, threadRootId);
|
return ContentProvider::self().modelForThread(m_room, threadRootId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageContentModel::setThreadsEnabled(bool enableThreads)
|
||||||
|
{
|
||||||
|
m_threadsEnabled = enableThreads;
|
||||||
|
}
|
||||||
|
|
||||||
#include "moc_messagecontentmodel.cpp"
|
#include "moc_messagecontentmodel.cpp"
|
||||||
@@ -112,10 +112,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
Q_INVOKABLE ThreadModel *modelForThread(const QString &threadRootId);
|
Q_INVOKABLE ThreadModel *modelForThread(const QString &threadRootId);
|
||||||
|
|
||||||
|
static void setThreadsEnabled(bool enableThreads);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void showAuthorChanged();
|
void showAuthorChanged();
|
||||||
void eventUpdated();
|
void eventUpdated();
|
||||||
|
|
||||||
|
void threadsEnabledChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<NeoChatRoom> m_room;
|
QPointer<NeoChatRoom> m_room;
|
||||||
QString m_eventId;
|
QString m_eventId;
|
||||||
@@ -150,4 +154,6 @@ private:
|
|||||||
bool m_emptyItinerary = false;
|
bool m_emptyItinerary = false;
|
||||||
|
|
||||||
void updateReactionModel();
|
void updateReactionModel();
|
||||||
|
|
||||||
|
static bool m_threadsEnabled;
|
||||||
};
|
};
|
||||||
@@ -7,37 +7,23 @@
|
|||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
|
||||||
#include "enums/delegatetype.h"
|
#include "enums/delegatetype.h"
|
||||||
#include "neochatconfig.h"
|
|
||||||
#include "timelinemessagemodel.h"
|
#include "timelinemessagemodel.h"
|
||||||
|
|
||||||
using namespace Quotient;
|
using namespace Quotient;
|
||||||
|
|
||||||
|
bool MessageFilterModel::m_showAllEvents = false;
|
||||||
|
bool MessageFilterModel::m_showDeletedMessages = false;
|
||||||
|
|
||||||
MessageFilterModel::MessageFilterModel(QObject *parent, QAbstractItemModel *sourceModel)
|
MessageFilterModel::MessageFilterModel(QObject *parent, QAbstractItemModel *sourceModel)
|
||||||
: QSortFilterProxyModel(parent)
|
: QSortFilterProxyModel(parent)
|
||||||
{
|
{
|
||||||
Q_ASSERT(sourceModel);
|
Q_ASSERT(sourceModel);
|
||||||
setSourceModel(sourceModel);
|
setSourceModel(sourceModel);
|
||||||
|
|
||||||
connect(NeoChatConfig::self(), &NeoChatConfig::ShowStateEventChanged, this, [this] {
|
|
||||||
invalidateFilter();
|
|
||||||
});
|
|
||||||
connect(NeoChatConfig::self(), &NeoChatConfig::ShowLeaveJoinEventChanged, this, [this] {
|
|
||||||
invalidateFilter();
|
|
||||||
});
|
|
||||||
connect(NeoChatConfig::self(), &NeoChatConfig::ShowRenameChanged, this, [this] {
|
|
||||||
invalidateFilter();
|
|
||||||
});
|
|
||||||
connect(NeoChatConfig::self(), &NeoChatConfig::ShowAvatarUpdateChanged, this, [this] {
|
|
||||||
invalidateFilter();
|
|
||||||
});
|
|
||||||
connect(NeoChatConfig::self(), &NeoChatConfig::ShowDeletedMessagesChanged, this, [this] {
|
|
||||||
invalidateFilter();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
bool MessageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
||||||
{
|
{
|
||||||
if (NeoChatConfig::self()->showAllEvents()) {
|
if (m_showAllEvents) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return eventIsVisible(sourceRow, sourceParent);
|
return eventIsVisible(sourceRow, sourceParent);
|
||||||
@@ -48,7 +34,7 @@ bool MessageFilterModel::eventIsVisible(int sourceRow, const QModelIndex &source
|
|||||||
const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
|
const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
|
||||||
|
|
||||||
// Don't show redacted (i.e. deleted) messages.
|
// Don't show redacted (i.e. deleted) messages.
|
||||||
if (index.data(TimelineMessageModel::IsRedactedRole).toBool() && !NeoChatConfig::self()->showDeletedMessages()) {
|
if (index.data(TimelineMessageModel::IsRedactedRole).toBool() && !m_showDeletedMessages) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +65,7 @@ bool MessageFilterModel::eventIsVisible(int sourceRow, const QModelIndex &source
|
|||||||
|
|
||||||
QVariant MessageFilterModel::data(const QModelIndex &index, int role) const
|
QVariant MessageFilterModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (role == TimelineMessageModel::DelegateTypeRole && NeoChatConfig::self()->showAllEvents()) {
|
if (role == TimelineMessageModel::DelegateTypeRole && m_showAllEvents) {
|
||||||
if (!eventIsVisible(index.row(), index.parent())) {
|
if (!eventIsVisible(index.row(), index.parent())) {
|
||||||
return DelegateType::Other;
|
return DelegateType::Other;
|
||||||
}
|
}
|
||||||
@@ -220,4 +206,14 @@ QString MessageFilterModel::excessAuthors(int row) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageFilterModel::setShowAllEvents(bool enabled)
|
||||||
|
{
|
||||||
|
MessageFilterModel::m_showAllEvents = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessageFilterModel::setShowDeletedMessages(bool enabled)
|
||||||
|
{
|
||||||
|
MessageFilterModel::m_showDeletedMessages = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
#include "moc_messagefiltermodel.cpp"
|
#include "moc_messagefiltermodel.cpp"
|
||||||
@@ -58,7 +58,13 @@ public:
|
|||||||
*/
|
*/
|
||||||
[[nodiscard]] QHash<int, QByteArray> roleNames() const override;
|
[[nodiscard]] QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
|
static void setShowAllEvents(bool enabled);
|
||||||
|
static void setShowDeletedMessages(bool enabled);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static bool m_showAllEvents;
|
||||||
|
static bool m_showDeletedMessages;
|
||||||
|
|
||||||
bool eventIsVisible(int sourceRow, const QModelIndex &sourceParent) const;
|
bool eventIsVisible(int sourceRow, const QModelIndex &sourceParent) const;
|
||||||
|
|
||||||
bool showAuthor(QModelIndex index) const;
|
bool showAuthor(QModelIndex index) const;
|
||||||
@@ -3,11 +3,9 @@
|
|||||||
|
|
||||||
#include "messagemodel.h"
|
#include "messagemodel.h"
|
||||||
|
|
||||||
#include "neochatconfig.h"
|
#include <QEvent>
|
||||||
#include "threadmodel.h"
|
|
||||||
|
|
||||||
#include <Quotient/events/encryptedevent.h>
|
#include <Quotient/events/encryptedevent.h>
|
||||||
#include <Quotient/events/roommemberevent.h>
|
|
||||||
#include <Quotient/events/roommessageevent.h>
|
#include <Quotient/events/roommessageevent.h>
|
||||||
#include <Quotient/events/stickerevent.h>
|
#include <Quotient/events/stickerevent.h>
|
||||||
#if Quotient_VERSION_MINOR > 9 || (Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH > 1)
|
#if Quotient_VERSION_MINOR > 9 || (Quotient_VERSION_MINOR == 9 && Quotient_VERSION_PATCH > 1)
|
||||||
@@ -26,6 +24,11 @@
|
|||||||
|
|
||||||
using namespace Quotient;
|
using namespace Quotient;
|
||||||
|
|
||||||
|
std::function<bool(const Quotient::RoomEvent *)> MessageModel::m_hiddenFilter = [](const Quotient::RoomEvent *) -> bool {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
bool MessageModel::m_threadsEnabled = false;
|
||||||
|
|
||||||
MessageModel::MessageModel(QObject *parent)
|
MessageModel::MessageModel(QObject *parent)
|
||||||
: QAbstractListModel(parent)
|
: QAbstractListModel(parent)
|
||||||
{
|
{
|
||||||
@@ -38,7 +41,7 @@ MessageModel::MessageModel(QObject *parent)
|
|||||||
resetting = false;
|
resetting = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(NeoChatConfig::self(), &NeoChatConfig::ThreadsChanged, this, [this]() {
|
connect(this, &MessageModel::threadsEnabledChanged, this, [this]() {
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
endResetModel();
|
endResetModel();
|
||||||
});
|
});
|
||||||
@@ -129,7 +132,7 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get());
|
auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get());
|
||||||
if (NeoChatConfig::self()->threads() && roomMessageEvent && roomMessageEvent->isThreaded()) {
|
if (m_threadsEnabled && roomMessageEvent && roomMessageEvent->isThreaded()) {
|
||||||
return QVariant::fromValue<MessageContentModel *>(ContentProvider::self().contentModelForEvent(m_room, roomMessageEvent->threadRootEventId()));
|
return QVariant::fromValue<MessageContentModel *>(ContentProvider::self().contentModelForEvent(m_room, roomMessageEvent->threadRootEventId()));
|
||||||
}
|
}
|
||||||
return QVariant::fromValue<MessageContentModel *>(ContentProvider::self().contentModelForEvent(m_room, &event->get()));
|
return QVariant::fromValue<MessageContentModel *>(ContentProvider::self().contentModelForEvent(m_room, &event->get()));
|
||||||
@@ -176,22 +179,7 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
return pendingIt->deliveryStatus();
|
return pendingIt->deliveryStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EventHandler::isHidden(m_room, &event.value().get(), [](const RoomEvent *event) -> bool {
|
if (EventHandler::isHidden(m_room, &event.value().get(), 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;
|
|
||||||
})) {
|
|
||||||
return EventStatus::Hidden;
|
return EventStatus::Hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,8 +192,7 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (roomMessageEvent && roomMessageEvent->isThreaded() && roomMessageEvent->threadRootEventId() != event.value().get().id()
|
if (roomMessageEvent && roomMessageEvent->isThreaded() && roomMessageEvent->threadRootEventId() != event.value().get().id() && m_threadsEnabled) {
|
||||||
&& NeoChatConfig::threads()) {
|
|
||||||
return EventStatus::Hidden;
|
return EventStatus::Hidden;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -239,7 +226,7 @@ QVariant MessageModel::data(const QModelIndex &idx, int role) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (role == IsThreadedRole) {
|
if (role == IsThreadedRole) {
|
||||||
if (!NeoChatConfig::self()->threads()) {
|
if (!m_threadsEnabled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get())) {
|
if (auto roomMessageEvent = eventCast<const RoomMessageEvent>(&event.value().get())) {
|
||||||
@@ -501,4 +488,14 @@ bool MessageModel::event(QEvent *event)
|
|||||||
return QObject::event(event);
|
return QObject::event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageModel::setHiddenFilter(std::function<bool(const Quotient::RoomEvent *)> hiddenFilter)
|
||||||
|
{
|
||||||
|
MessageModel::m_hiddenFilter = hiddenFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessageModel::setThreadsEnabled(bool enableThreads)
|
||||||
|
{
|
||||||
|
MessageModel::m_threadsEnabled = enableThreads;
|
||||||
|
}
|
||||||
|
|
||||||
#include "moc_messagemodel.cpp"
|
#include "moc_messagemodel.cpp"
|
||||||
@@ -112,6 +112,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
Q_INVOKABLE [[nodiscard]] int eventIdToRow(const QString &eventID) const;
|
Q_INVOKABLE [[nodiscard]] int eventIdToRow(const QString &eventID) const;
|
||||||
|
|
||||||
|
static void setHiddenFilter(std::function<bool(const Quotient::RoomEvent *)> hiddenFilter);
|
||||||
|
|
||||||
|
static void setThreadsEnabled(bool enableThreads);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
/**
|
/**
|
||||||
* @brief Emitted when the room is changed.
|
* @brief Emitted when the room is changed.
|
||||||
@@ -126,6 +130,8 @@ Q_SIGNALS:
|
|||||||
*/
|
*/
|
||||||
void newEventAdded(const Quotient::RoomEvent *event);
|
void newEventAdded(const Quotient::RoomEvent *event);
|
||||||
|
|
||||||
|
void threadsEnabledChanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QPointer<NeoChatRoom> m_room;
|
QPointer<NeoChatRoom> m_room;
|
||||||
QPersistentModelIndex m_lastReadEventIndex;
|
QPersistentModelIndex m_lastReadEventIndex;
|
||||||
@@ -150,4 +156,7 @@ private:
|
|||||||
QMap<QString, QSharedPointer<ReadMarkerModel>> m_readMarkerModels;
|
QMap<QString, QSharedPointer<ReadMarkerModel>> m_readMarkerModels;
|
||||||
|
|
||||||
void createEventObjects(const Quotient::RoomEvent *event);
|
void createEventObjects(const Quotient::RoomEvent *event);
|
||||||
|
|
||||||
|
static std::function<bool(const Quotient::RoomEvent *)> m_hiddenFilter;
|
||||||
|
static bool m_threadsEnabled;
|
||||||
};
|
};
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include <Quotient/qt_connection_util.h>
|
#include <Quotient/qt_connection_util.h>
|
||||||
|
|
||||||
#include "delegatetype.h"
|
#include "enums/delegatetype.h"
|
||||||
|
|
||||||
TimelineModel::TimelineModel(QObject *parent)
|
TimelineModel::TimelineModel(QObject *parent)
|
||||||
: QConcatenateTablesProxyModel(parent)
|
: QConcatenateTablesProxyModel(parent)
|
||||||
@@ -16,6 +16,8 @@ TimelineModel::TimelineModel(QObject *parent)
|
|||||||
addSourceModel(m_timelineMessageModel);
|
addSourceModel(m_timelineMessageModel);
|
||||||
m_timelineEndModel = new TimelineEndModel(this);
|
m_timelineEndModel = new TimelineEndModel(this);
|
||||||
addSourceModel(m_timelineEndModel);
|
addSourceModel(m_timelineEndModel);
|
||||||
|
|
||||||
|
connect(this, &TimelineModel::threadsEnabledChanged, m_timelineMessageModel, &TimelineMessageModel::threadsEnabledChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
NeoChatRoom *TimelineModel::room() const
|
NeoChatRoom *TimelineModel::room() const
|
||||||
@@ -156,6 +156,7 @@ public:
|
|||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void roomChanged();
|
void roomChanged();
|
||||||
|
void threadsEnabledChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TimelineMessageModel *m_timelineMessageModel = nullptr;
|
TimelineMessageModel *m_timelineMessageModel = nullptr;
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
#include "events/pollevent.h"
|
#include "events/pollevent.h"
|
||||||
#include "neochatroom.h"
|
#include "neochatroom.h"
|
||||||
#include "pollanswermodel.h"
|
|
||||||
|
|
||||||
#include <Quotient/csapi/relations.h>
|
#include <Quotient/csapi/relations.h>
|
||||||
#include <Quotient/events/roompowerlevelsevent.h>
|
#include <Quotient/events/roompowerlevelsevent.h>
|
||||||
Reference in New Issue
Block a user