From 10f0f7462a117e94bd2d965270425fcda3214486 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 15 May 2020 10:39:32 +0200 Subject: [PATCH 01/13] Try to fix arm builds hanging breaking CI --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 08126853..cccc359a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -141,7 +141,7 @@ install: - export PATH=/usr/local/bin:${PATH} script: - - ./.ci/script.sh + - travis_wait ./.ci/script.sh - sed -i -e "s/VERSION_NAME_VALUE/${VERSION}/g" ./.ci/bintray-release.json || true - cp ./.ci/bintray-release.json . deploy: From 5a5b85cded263ae50bcce722e723522d091d0c23 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 15 May 2020 11:11:31 +0200 Subject: [PATCH 02/13] Wait on maybe long running install script in CI --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cccc359a..443836cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -137,7 +137,7 @@ before_install: # Use TRAVIS_TAG if defined, or the short commit SHA otherwise - export VERSION=${TRAVIS_TAG:-$(git rev-parse --short HEAD)} install: - - ./.ci/install.sh + - travis_wait ./.ci/install.sh - export PATH=/usr/local/bin:${PATH} script: From 54e2e7ef7f6638c34abce3f9af8cb57533d06eea Mon Sep 17 00:00:00 2001 From: "DeepBlueV7.X" Date: Fri, 15 May 2020 10:29:43 +0000 Subject: [PATCH 03/13] Translated using Weblate (German) Currently translated at 100.0% (277 of 277 strings) Translation: Nheko/nheko Translate-URL: http://weblate.nheko.im/projects/nheko/nheko-master/de/ --- resources/langs/nheko_de.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 2b5a5393..a05bdf4d 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -196,7 +196,7 @@ This message is not encrypted! - + Diese Nachricht ist nicht verschlüsselt! @@ -624,7 +624,7 @@ Beispiel: https://mein.server:8787 %1 made this room require and invitation to join. - + %1 hat eingestellt, dass dieser Raum eine Einladung benötigt um beizutreten. @@ -978,7 +978,7 @@ Beispiel: https://mein.server:8787 INTERFACE - + OBERFLÄCHE From 30d61e3114927a93305fc52ed4a78ab0dc50024f Mon Sep 17 00:00:00 2001 From: CH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com> Date: Tue, 12 May 2020 22:39:53 +0530 Subject: [PATCH 04/13] minor fixes --- src/Cache.h | 2 ++ src/ChatPage.cpp | 6 ++--- src/Olm.cpp | 68 +++++++++++++++++++++++++----------------------- src/Olm.h | 4 +-- 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/Cache.h b/src/Cache.h index 12465c9d..3bb118c7 100644 --- a/src/Cache.h +++ b/src/Cache.h @@ -22,11 +22,13 @@ #include #include +#if defined __has_include #if __has_include() #include #else #include #endif +#endif #include diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 4043fdf5..5450cdfa 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -1010,8 +1010,8 @@ ChatPage::trySync() // TODO: fine grained error handling try { - cache::saveState(res); - olm::handle_to_device_messages(res.to_device); + cache::saveState(res); + olm::handle_to_device_messages(res.to_device.events); auto updates = cache::roomUpdates(res); @@ -1234,7 +1234,7 @@ ChatPage::initialSyncHandler(const mtx::responses::Sync &res, mtx::http::Request try { cache::saveState(res); - olm::handle_to_device_messages(res.to_device); + olm::handle_to_device_messages(res.to_device.events); emit initializeViews(std::move(res.rooms)); emit initializeRoomList(cache::roomInfo()); diff --git a/src/Olm.cpp b/src/Olm.cpp index 8ea39566..1f87b3f9 100644 --- a/src/Olm.cpp +++ b/src/Olm.cpp @@ -23,52 +23,54 @@ client() } void -handle_to_device_messages(const std::vector &msgs) +handle_to_device_messages(const std::vector &msgs) { if (msgs.empty()) return; nhlog::crypto()->info("received {} to_device messages", msgs.size()); + nlohmann::json j_msg; for (const auto &msg : msgs) { - if (msg.count("type") == 0) { + j_msg = std::visit([](auto &e){ return json(e); },std::move(msg)); + if (j_msg.count("type") == 0) { nhlog::crypto()->warn("received message with no type field: {}", - msg.dump(2)); + j_msg.dump(2)); continue; } - std::string msg_type = msg.at("type"); + std::string msg_type = j_msg.at("type"); if (msg_type == to_string(mtx::events::EventType::RoomEncrypted)) { try { - OlmMessage olm_msg = msg; + OlmMessage olm_msg = j_msg; handle_olm_message(std::move(olm_msg)); } catch (const nlohmann::json::exception &e) { nhlog::crypto()->warn( - "parsing error for olm message: {} {}", e.what(), msg.dump(2)); + "parsing error for olm message: {} {}", e.what(), j_msg.dump(2)); } catch (const std::invalid_argument &e) { nhlog::crypto()->warn( - "validation error for olm message: {} {}", e.what(), msg.dump(2)); + "validation error for olm message: {} {}", e.what(), j_msg.dump(2)); } } else if (msg_type == to_string(mtx::events::EventType::RoomKeyRequest)) { - nhlog::crypto()->warn("handling key request event: {}", msg.dump(2)); + nhlog::crypto()->warn("handling key request event: {}", j_msg.dump(2)); try { - mtx::events::msg::KeyRequest req = msg; - if (req.action == mtx::events::msg::RequestAction::Request) - handle_key_request_message(std::move(req)); + mtx::events::DeviceEvent req = j_msg; + if (req.content.action == mtx::events::msg::RequestAction::Request) + handle_key_request_message(req); else nhlog::crypto()->warn( "ignore key request (unhandled action): {}", - req.request_id); + req.content.request_id); } catch (const nlohmann::json::exception &e) { nhlog::crypto()->warn( "parsing error for key_request message: {} {}", e.what(), - msg.dump(2)); + j_msg.dump(2)); } } else { - nhlog::crypto()->warn("unhandled event: {}", msg.dump(2)); + nhlog::crypto()->warn("unhandled event: {}", j_msg.dump(2)); } } } @@ -341,51 +343,51 @@ send_key_request_for(const std::string &room_id, } void -handle_key_request_message(const mtx::events::msg::KeyRequest &req) +handle_key_request_message(const mtx::events::DeviceEvent &req) { - if (req.algorithm != MEGOLM_ALGO) { + if (req.content.algorithm != MEGOLM_ALGO) { nhlog::crypto()->debug("ignoring key request {} with invalid algorithm: {}", - req.request_id, - req.algorithm); + req.content.request_id, + req.content.algorithm); return; } // Check if we were the sender of the session being requested. - if (req.sender_key != olm::client()->identity_keys().curve25519) { + if (req.content.sender_key != olm::client()->identity_keys().curve25519) { nhlog::crypto()->debug("ignoring key request {} because we were not the sender: " "\nrequested({}) ours({})", - req.request_id, - req.sender_key, + req.content.request_id, + req.content.sender_key, olm::client()->identity_keys().curve25519); return; } // Check if we have the keys for the requested session. - if (!cache::outboundMegolmSessionExists(req.room_id)) { - nhlog::crypto()->warn("requested session not found in room: {}", req.room_id); + if (!cache::outboundMegolmSessionExists(req.content.room_id)) { + nhlog::crypto()->warn("requested session not found in room: {}", req.content.room_id); return; } // Check that the requested session_id and the one we have saved match. - const auto session = cache::getOutboundMegolmSession(req.room_id); - if (req.session_id != session.data.session_id) { + const auto session = cache::getOutboundMegolmSession(req.content.room_id); + if (req.content.session_id != session.data.session_id) { nhlog::crypto()->warn("session id of retrieved session doesn't match the request: " "requested({}), ours({})", - req.session_id, + req.content.session_id, session.data.session_id); return; } - if (!cache::isRoomMember(req.sender, req.room_id)) { + if (!cache::isRoomMember(req.sender, req.content.room_id)) { nhlog::crypto()->warn( "user {} that requested the session key is not member of the room {}", req.sender, - req.room_id); + req.content.room_id); return; } - if (!utils::respondsToKeyRequests(req.room_id)) { - nhlog::crypto()->debug("ignoring all key requests for room {}", req.room_id); + if (!utils::respondsToKeyRequests(req.content.room_id)) { + nhlog::crypto()->debug("ignoring all key requests for room {}", req.content.room_id); return; } @@ -393,11 +395,11 @@ handle_key_request_message(const mtx::events::msg::KeyRequest &req) // Prepare the m.room_key event. // auto payload = json{{"algorithm", "m.megolm.v1.aes-sha2"}, - {"room_id", req.room_id}, - {"session_id", req.session_id}, + {"room_id", req.content.room_id}, + {"session_id", req.content.session_id}, {"session_key", session.data.session_key}}; - send_megolm_key_to_device(req.sender, req.requesting_device_id, payload); + send_megolm_key_to_device(req.sender, req.content.requesting_device_id, payload); } void diff --git a/src/Olm.h b/src/Olm.h index 28521413..09038ad1 100644 --- a/src/Olm.h +++ b/src/Olm.h @@ -40,7 +40,7 @@ mtx::crypto::OlmClient * client(); void -handle_to_device_messages(const std::vector &msgs); +handle_to_device_messages(const std::vector &msgs); nlohmann::json try_olm_decryption(const std::string &sender_key, @@ -77,7 +77,7 @@ send_key_request_for(const std::string &room_id, const mtx::events::EncryptedEvent &); void -handle_key_request_message(const mtx::events::msg::KeyRequest &); +handle_key_request_message(const mtx::events::DeviceEvent &); void send_megolm_key_to_device(const std::string &user_id, From e4a7e859354653d4ddd60dc9e2b83132feffaceb Mon Sep 17 00:00:00 2001 From: CH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com> Date: Fri, 15 May 2020 16:33:51 +0530 Subject: [PATCH 05/13] Change the commit hash for mtxclient --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.json | 4 ++-- src/ChatPage.cpp | 2 +- src/Olm.cpp | 13 ++++++++----- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed714e31..04d20690 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -337,7 +337,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 71bd56b66cf634341ffef804f07d33f01fd57c25 + GIT_TAG dfc39651ac02b48787b9d4e27932ef2feceb162c ) FetchContent_MakeAvailable(MatrixClient) else() diff --git a/io.github.NhekoReborn.Nheko.json b/io.github.NhekoReborn.Nheko.json index 60d984fb..b6f7e708 100644 --- a/io.github.NhekoReborn.Nheko.json +++ b/io.github.NhekoReborn.Nheko.json @@ -146,9 +146,9 @@ "name": "mtxclient", "sources": [ { - "sha256": "7055f1459a43a12f27f949564624f13cc593ac894e445e6de0e6563ad38ebc3e", + "sha256": "4f859cdcb42b052ed07d55ac8890e9051fa49a1e8bc43648106ddce351b6868b", "type": "archive", - "url": "https://github.com/Nheko-Reborn/mtxclient/archive/71bd56b66cf634341ffef804f07d33f01fd57c25.tar.gz" + "url": "https://github.com/Nheko-Reborn/mtxclient/archive/dfc39651ac02b48787b9d4e27932ef2feceb162c.tar.gz" } ] }, diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 5450cdfa..d0ca4670 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -1010,7 +1010,7 @@ ChatPage::trySync() // TODO: fine grained error handling try { - cache::saveState(res); + cache::saveState(res); olm::handle_to_device_messages(res.to_device.events); auto updates = cache::roomUpdates(res); diff --git a/src/Olm.cpp b/src/Olm.cpp index 1f87b3f9..2c4f6186 100644 --- a/src/Olm.cpp +++ b/src/Olm.cpp @@ -32,7 +32,7 @@ handle_to_device_messages(const std::vectorwarn("received message with no type field: {}", j_msg.dump(2)); @@ -49,8 +49,9 @@ handle_to_device_messages(const std::vectorwarn( "parsing error for olm message: {} {}", e.what(), j_msg.dump(2)); } catch (const std::invalid_argument &e) { - nhlog::crypto()->warn( - "validation error for olm message: {} {}", e.what(), j_msg.dump(2)); + nhlog::crypto()->warn("validation error for olm message: {} {}", + e.what(), + j_msg.dump(2)); } } else if (msg_type == to_string(mtx::events::EventType::RoomKeyRequest)) { @@ -364,7 +365,8 @@ handle_key_request_message(const mtx::events::DeviceEventwarn("requested session not found in room: {}", req.content.room_id); + nhlog::crypto()->warn("requested session not found in room: {}", + req.content.room_id); return; } @@ -387,7 +389,8 @@ handle_key_request_message(const mtx::events::DeviceEventdebug("ignoring all key requests for room {}", req.content.room_id); + nhlog::crypto()->debug("ignoring all key requests for room {}", + req.content.room_id); return; } From 57b8cdbd4d94bd0adf5c92f775227e04dd5f2bf1 Mon Sep 17 00:00:00 2001 From: CH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com> Date: Fri, 15 May 2020 17:00:52 +0530 Subject: [PATCH 06/13] remove #if defined __has_include --- src/Cache.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Cache.h b/src/Cache.h index 3bb118c7..12465c9d 100644 --- a/src/Cache.h +++ b/src/Cache.h @@ -22,13 +22,11 @@ #include #include -#if defined __has_include #if __has_include() #include #else #include #endif -#endif #include From ca20e2a98f884607f7c69b9137006b8275d641cd Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Fri, 15 May 2020 13:23:19 -0400 Subject: [PATCH 07/13] Remove accidental compiled translation commit --- resources/langs/.gitignore | 1 + resources/langs/nheko_en.qm | Bin 32178 -> 0 bytes 2 files changed, 1 insertion(+) create mode 100644 resources/langs/.gitignore delete mode 100644 resources/langs/nheko_en.qm diff --git a/resources/langs/.gitignore b/resources/langs/.gitignore new file mode 100644 index 00000000..fc168248 --- /dev/null +++ b/resources/langs/.gitignore @@ -0,0 +1 @@ +*.qm \ No newline at end of file diff --git a/resources/langs/nheko_en.qm b/resources/langs/nheko_en.qm deleted file mode 100644 index 0973db2d9c4232eec42ce38a1493607f33abb136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32178 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 Date: Fri, 15 May 2020 22:45:23 +0200 Subject: [PATCH 08/13] Prevent timeline being black on some platforms --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.cpp b/src/main.cpp index 09c326f4..ec4f638d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -116,6 +116,7 @@ main(int argc, char *argv[]) QCoreApplication::setApplicationName("nheko"); QCoreApplication::setApplicationVersion(nheko::version); QCoreApplication::setOrganizationName("nheko"); + QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); SingleApplication app(argc, From 73e0a9f453dbb7095fbfdaca1d6d6680f2aef17c Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 15 May 2020 22:48:30 +0200 Subject: [PATCH 09/13] Drop explicit ZLIB dependency --- CMakeLists.txt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04d20690..532efb9b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,8 +35,6 @@ option(USE_BUNDLED_OPENSSL "Use the bundled version of OpenSSL." option(USE_BUNDLED_MTXCLIENT "Use the bundled version of the Matrix Client library." ${HUNTER_ENABLED}) option(USE_BUNDLED_SODIUM "Use the bundled version of libsodium." ${HUNTER_ENABLED}) -option(USE_BUNDLED_ZLIB "Use the bundled version of zlib." - ${HUNTER_ENABLED}) option(USE_BUNDLED_LMDB "Use the bundled version of lmdb." ${HUNTER_ENABLED}) option(USE_BUNDLED_LMDBXX "Use the bundled version of lmdb++." @@ -322,10 +320,7 @@ find_package(Boost 1.70 REQUIRED COMPONENTS iostreams system thread) -if(USE_BUNDLED_ZLIB) - hunter_add_package(ZLIB) -endif() -find_package(ZLIB REQUIRED) + if(USE_BUNDLED_OPENSSL) hunter_add_package(OpenSSL) endif() From 3db9298e6697dc8f117de7a4b49ac2d4e61f8396 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 16 May 2020 00:10:59 +0200 Subject: [PATCH 10/13] Bump mtxclient version --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 532efb9b..669ce980 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -332,7 +332,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG dfc39651ac02b48787b9d4e27932ef2feceb162c + GIT_TAG 1018c0822b80cdfc5d6b589fe94d1fd759113ef6 ) FetchContent_MakeAvailable(MatrixClient) else() diff --git a/io.github.NhekoReborn.Nheko.json b/io.github.NhekoReborn.Nheko.json index b6f7e708..3de04370 100644 --- a/io.github.NhekoReborn.Nheko.json +++ b/io.github.NhekoReborn.Nheko.json @@ -146,9 +146,9 @@ "name": "mtxclient", "sources": [ { - "sha256": "4f859cdcb42b052ed07d55ac8890e9051fa49a1e8bc43648106ddce351b6868b", + "sha256": "537f4e6b280f351ad950cd6598c2407505a55f0d6c856b4ff97a9c59fc6fdb7a", "type": "archive", - "url": "https://github.com/Nheko-Reborn/mtxclient/archive/dfc39651ac02b48787b9d4e27932ef2feceb162c.tar.gz" + "url": "https://github.com/Nheko-Reborn/mtxclient/archive/1018c0822b80cdfc5d6b589fe94d1fd759113ef6.tar.gz" } ] }, From 2c21f6e3fa6d876e594178fe826d7f2de299a6cf Mon Sep 17 00:00:00 2001 From: lkito Date: Sat, 16 May 2020 01:27:41 +0400 Subject: [PATCH 11/13] Implemented optional message body highlighting feature. --- resources/qml/TimelineRow.qml | 6 +++++- resources/qml/TimelineView.qml | 2 ++ src/UserSettingsPage.cpp | 20 +++++++++++++++----- src/UserSettingsPage.h | 8 ++++++++ 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index 8dcd0056..42791e0b 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -13,6 +13,7 @@ MouseArea { height: row.height propagateComposedEvents: true preventStealing: true + hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: { @@ -23,7 +24,10 @@ MouseArea { if (mouse.source === Qt.MouseEventNotSynthesized) messageContextMenu.show(model.id, model.type, model.isEncrypted, row) } - + Rectangle { + color: (timelineSettings.message_hover_highlight && parent.containsMouse) ? colors.base : "transparent" + anchors.fill: row + } RowLayout { id: row diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 15cafd8c..b5097bc7 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -32,6 +32,7 @@ Page { id: timelineSettings category: "user/timeline" property bool buttons: true + property bool message_hover_highlight: false } Menu { @@ -97,6 +98,7 @@ Page { } BusyIndicator { + visible: running anchors.centerIn: parent running: timelineManager.isInitialSync height: 200 diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index e19aa876..6af08e12 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -51,11 +51,13 @@ void UserSettings::load() { QSettings settings; - isTrayEnabled_ = settings.value("user/window/tray", false).toBool(); - hasDesktopNotifications_ = settings.value("user/desktop_notifications", true).toBool(); - isStartInTrayEnabled_ = settings.value("user/window/start_in_tray", false).toBool(); - isGroupViewEnabled_ = settings.value("user/group_view", true).toBool(); - isButtonsInTimelineEnabled_ = settings.value("user/timeline/buttons", true).toBool(); + isTrayEnabled_ = settings.value("user/window/tray", false).toBool(); + hasDesktopNotifications_ = settings.value("user/desktop_notifications", true).toBool(); + isStartInTrayEnabled_ = settings.value("user/window/start_in_tray", false).toBool(); + isGroupViewEnabled_ = settings.value("user/group_view", true).toBool(); + isButtonsInTimelineEnabled_ = settings.value("user/timeline/buttons", true).toBool(); + isMessageHoverHighlightEnabled_ = + settings.value("user/timeline/message_hover_highlight", false).toBool(); isMarkdownEnabled_ = settings.value("user/markdown_enabled", true).toBool(); isTypingNotificationsEnabled_ = settings.value("user/typing_notifications", true).toBool(); sortByImportance_ = settings.value("user/sort_by_unread", true).toBool(); @@ -165,6 +167,7 @@ UserSettings::save() settings.beginGroup("timeline"); settings.setValue("buttons", isButtonsInTimelineEnabled_); + settings.setValue("message_hover_highlight", isMessageHoverHighlightEnabled_); settings.endGroup(); settings.setValue("avatar_circles", avatarCircles_); @@ -235,6 +238,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge groupViewToggle_ = new Toggle{this}; timelineButtonsToggle_ = new Toggle{this}; typingNotifications_ = new Toggle{this}; + messageHoverHighlight_ = new Toggle{this}; sortByImportance_ = new Toggle{this}; readReceipts_ = new Toggle{this}; markdownEnabled_ = new Toggle{this}; @@ -345,6 +349,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge boxWrap(tr("Read receipts"), readReceipts_); boxWrap(tr("Send messages as Markdown"), markdownEnabled_); boxWrap(tr("Desktop notifications"), desktopNotifications_); + boxWrap(tr("Highlight message on hover"), messageHoverHighlight_); formLayout_->addRow(uiLabel_); formLayout_->addRow(new HorizontalLine{this}); @@ -463,6 +468,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge settings_->setDesktopNotifications(!isDisabled); }); + connect(messageHoverHighlight_, &Toggle::toggled, this, [this](bool isDisabled) { + settings_->setMessageHoverHighlight(!isDisabled); + }); + connect( sessionKeysImportBtn, &QPushButton::clicked, this, &UserSettingsPage::importSessionKeys); @@ -495,6 +504,7 @@ UserSettingsPage::showEvent(QShowEvent *) readReceipts_->setState(!settings_->isReadReceiptsEnabled()); markdownEnabled_->setState(!settings_->isMarkdownEnabled()); desktopNotifications_->setState(!settings_->hasDesktopNotifications()); + messageHoverHighlight_->setState(!settings_->isMessageHoverHighlightEnabled()); deviceIdValue_->setText(QString::fromStdString(http::client()->device_id())); deviceFingerprintValue_->setText( diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 6b9834ea..088bbfb5 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -44,6 +44,11 @@ public: void load(); void applyTheme(); void setTheme(QString theme); + void setMessageHoverHighlight(bool state) + { + isMessageHoverHighlightEnabled_ = state; + save(); + } void setTray(bool state) { isTrayEnabled_ = state; @@ -118,6 +123,7 @@ public: } QString theme() const { return !theme_.isEmpty() ? theme_ : defaultTheme_; } + bool isMessageHoverHighlightEnabled() const { return isMessageHoverHighlightEnabled_; } bool isTrayEnabled() const { return isTrayEnabled_; } bool isStartInTrayEnabled() const { return isStartInTrayEnabled_; } bool isGroupViewEnabled() const { return isGroupViewEnabled_; } @@ -144,6 +150,7 @@ private: ? "light" : "system"; QString theme_; + bool isMessageHoverHighlightEnabled_; bool isTrayEnabled_; bool isStartInTrayEnabled_; bool isGroupViewEnabled_; @@ -203,6 +210,7 @@ private: Toggle *groupViewToggle_; Toggle *timelineButtonsToggle_; Toggle *typingNotifications_; + Toggle *messageHoverHighlight_; Toggle *sortByImportance_; Toggle *readReceipts_; Toggle *markdownEnabled_; From 14eaad355ec5e268effac04f22270b534aa2b8d8 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Sat, 16 May 2020 13:10:13 -0500 Subject: [PATCH 12/13] Update macOS building dependencies now that libolm is available in Homebrew --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0cb3e044..18cf1f0d 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,7 @@ guix environment nheko ```bash brew update -brew install qt5 lmdb cmake llvm libsodium spdlog boost cmark +brew install qt5 lmdb cmake llvm libsodium spdlog boost cmark libolm ``` ##### Windows From 3338ecd39f775972911d1a2ea114c545bb1d57c0 Mon Sep 17 00:00:00 2001 From: Aaron Raimist Date: Sat, 16 May 2020 13:46:23 -0500 Subject: [PATCH 13/13] Remove MacPorts install instructions Signed-off-by: Aaron Raimist --- README.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/README.md b/README.md index 18cf1f0d..d051eadd 100644 --- a/README.md +++ b/README.md @@ -97,13 +97,6 @@ guix install nheko #### macOS (10.14 and above) - -with [macports](https://www.macports.org/): - -```sh -sudo port install nheko -``` - with [homebrew](https://brew.sh/): ```sh @@ -120,7 +113,7 @@ brew cask install nheko - [LMDB](https://symas.com/lightning-memory-mapped-database/) - [cmark](https://github.com/commonmark/cmark) 0.29 or greater. - Boost 1.70 or greater. -- [libolm](https://git.matrix.org/git/olm) +- [libolm](https://gitlab.matrix.org/matrix-org/olm) - [libsodium](https://github.com/jedisct1/libsodium) - [spdlog](https://github.com/gabime/spdlog) - A compiler that supports C++ 17: