From 0794f0a3fdc80f3316a206305a01a5356b1d270f Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Mon, 25 Jan 2021 23:46:55 -0500 Subject: [PATCH 01/37] Initial commit for privacy screen Missing window focus event and knowing when room is encryption --- resources/qml/PrivacyScreen.qml | 74 +++++++++++++++++++++++++++++++++ resources/qml/TimelineRow.qml | 2 +- resources/qml/TimelineView.qml | 8 ++++ resources/res.qrc | 1 + src/UserSettingsPage.cpp | 63 +++++++++++++++++++++++++++- src/UserSettingsPage.h | 13 ++++++ 6 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 resources/qml/PrivacyScreen.qml diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml new file mode 100644 index 00000000..497630f1 --- /dev/null +++ b/resources/qml/PrivacyScreen.qml @@ -0,0 +1,74 @@ +import QtQuick 2.12 +import QtGraphicalEffects 1.0 + +Item { + property var timelineRoot + property var imageSource + property int screenTimeout + anchors.fill: parent + + Timer { + id: screenSaverTimer + interval: screenTimeout * 1000 + running: true + onTriggered: { + timelineRoot.grabToImage(function(result) { + imageSource = result.url; + screenSaver.visible = true + particles.resume() + }, Qt.size(width, height)) + } + } + + // Reset screensaver timer when clicks are received + MouseArea { + anchors.fill: parent + // Pass mouse events through + propagateComposedEvents: true + hoverEnabled: true + onClicked: { + screenSaverTimer.restart(); + mouse.accepted = false; + } + } + + Rectangle { + id: screenSaver + anchors.fill: parent + visible: false + color: "transparent" + + Image { + id: image + visible : screenSaver.visible + anchors.fill: parent + source: imageSource + } + + ShaderEffectSource { + id: effectSource + + sourceItem: image + anchors.fill: image + sourceRect: Qt.rect(0,0, width, height) + } + + FastBlur{ + id: blur + anchors.fill: effectSource + source: effectSource + radius: 50 + } + + MouseArea { + anchors.fill: parent + propagateComposedEvents: true + hoverEnabled: true + onClicked: { + screenSaver.visible = false; + screenSaverTimer.restart(); + mouse.accepted = false + } + } + } +} \ No newline at end of file diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index c4c18e0e..95a025cf 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -28,7 +28,7 @@ Item { if (mouse.button === Qt.RightButton) messageContextMenu.show(model.id, model.type, model.isEncrypted, row); else - event.accepted = false; + mouse.accepted = false; } onPressAndHold: { messageContextMenu.show(model.id, model.type, model.isEncrypted, row, mapToItem(timelineRoot, mouse.x, mouse.y)); diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 38e3a928..5f43de55 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -1,3 +1,4 @@ +import "." import "./delegates" import "./device-verification" import "./emoji" @@ -187,6 +188,7 @@ Page { } ColumnLayout { + id: timelineLayout visible: TimelineManager.timeline != null anchors.fill: parent spacing: 0 @@ -271,6 +273,12 @@ Page { } + PrivacyScreen { + visible: Settings.privacyScreen + screenTimeout: Settings.privacyScreenTimeout + timelineRoot: timelineRoot + } + } systemInactive: SystemPalette { diff --git a/resources/res.qrc b/resources/res.qrc index e3998bd1..308d81a6 100644 --- a/resources/res.qrc +++ b/resources/res.qrc @@ -131,6 +131,7 @@ qml/MessageInput.qml qml/MessageView.qml qml/NhekoBusyIndicator.qml + qml/PrivacyScreen.qml qml/Reactions.qml qml/ReplyPopup.qml qml/ScrollHelper.qml diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index f90938c9..1875e4f9 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -95,6 +95,8 @@ UserSettings::load(std::optional profile) font_ = settings.value("user/font_family", "default").toString(); avatarCircles_ = settings.value("user/avatar_circles", true).toBool(); decryptSidebar_ = settings.value("user/decrypt_sidebar", true).toBool(); + privacyScreen_ = settings.value("user/privacy_screen", false).toBool(); + privacyScreenTimeout_ = settings.value("user/privacy_screen_timeout", 0).toInt(); shareKeysWithTrustedUsers_ = settings.value("user/share_keys_with_trusted_users", true).toBool(); mobileMode_ = settings.value("user/mobile_mode", false).toBool(); @@ -284,6 +286,28 @@ UserSettings::setDecryptSidebar(bool state) save(); } +void +UserSettings::setPrivacyScreen(bool state) +{ + if (state == privacyScreen_) { + return; + } + privacyScreen_ = state; + emit privacyScreenChanged(state); + save(); +} + +void +UserSettings::setPrivacyScreenTimeout(int state) +{ + if (state == privacyScreenTimeout_) { + return; + } + privacyScreenTimeout_ = state; + emit privacyScreenTimeoutChanged(state); + save(); +} + void UserSettings::setFontSize(double size) { @@ -531,6 +555,8 @@ UserSettings::save() settings.setValue("avatar_circles", avatarCircles_); settings.setValue("decrypt_sidebar", decryptSidebar_); + settings.setValue("privacy_screen", privacyScreen_); + settings.setValue("privacy_screen_timeout", privacyScreenTimeout_); settings.setValue("share_keys_with_trusted_users", shareKeysWithTrustedUsers_); settings.setValue("mobile_mode", mobileMode_); settings.setValue("font_size", baseFontSize_); @@ -619,6 +645,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge startInTrayToggle_ = new Toggle{this}; avatarCircles_ = new Toggle{this}; decryptSidebar_ = new Toggle(this); + privacyScreen_ = new Toggle{this}; shareKeysWithTrustedUsers_ = new Toggle(this); groupViewToggle_ = new Toggle{this}; timelineButtonsToggle_ = new Toggle{this}; @@ -642,11 +669,13 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge cameraResolutionCombo_ = new QComboBox{this}; cameraFrameRateCombo_ = new QComboBox{this}; timelineMaxWidthSpin_ = new QSpinBox{this}; + privacyScreenTimeout_ = new QSpinBox{this}; trayToggle_->setChecked(settings_->tray()); startInTrayToggle_->setChecked(settings_->startInTray()); avatarCircles_->setChecked(settings_->avatarCircles()); decryptSidebar_->setChecked(settings_->decryptSidebar()); + privacyScreen_->setChecked(settings_->privacyScreen()); shareKeysWithTrustedUsers_->setChecked(settings_->shareKeysWithTrustedUsers()); groupViewToggle_->setChecked(settings_->groupView()); timelineButtonsToggle_->setChecked(settings_->buttonsInTimeline()); @@ -666,6 +695,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge startInTrayToggle_->setDisabled(true); } + if (!settings_->privacyScreen()) { + privacyScreenTimeout_->setDisabled(true); + } + avatarCircles_->setFixedSize(64, 48); auto uiLabel_ = new QLabel{tr("INTERFACE"), this}; @@ -706,6 +739,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge timelineMaxWidthSpin_->setMaximum(100'000'000); timelineMaxWidthSpin_->setSingleStep(10); + privacyScreenTimeout_->setMinimum(0); + privacyScreenTimeout_->setMaximum(3600); + privacyScreenTimeout_->setSingleStep(10); + auto callsLabel = new QLabel{tr("CALLS"), this}; callsLabel->setFixedHeight(callsLabel->minimumHeight() + LayoutTopMargin); callsLabel->setAlignment(Qt::AlignBottom); @@ -799,6 +836,13 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge decryptSidebar_, tr("Decrypt the messages shown in the sidebar.\nOnly affects messages in " "encrypted chats.")); + boxWrap(tr("Encrypted chat privacy screen"), + privacyScreen_, + tr("When the window loses focus, the timeline will\nbe blurred.")); + boxWrap(tr("Privacy screen timeout"), + privacyScreenTimeout_, + tr("Set timeout for how long after window loses\nfocus before the screen" + " will be blurred.\nSet to 0 to blur immediately after focus loss.")); boxWrap(tr("Show buttons in timeline"), timelineButtonsToggle_, tr("Show buttons to quickly reply, react or access additional options next to each " @@ -1057,7 +1101,15 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge connect(decryptSidebar_, &Toggle::toggled, this, [this](bool enabled) { settings_->setDecryptSidebar(enabled); - emit decryptSidebarChanged(); + }); + + connect(privacyScreen_, &Toggle::toggled, this, [this](bool enabled) { + settings_->setPrivacyScreen(enabled); + if (enabled) { + privacyScreenTimeout_->setEnabled(true); + } else { + privacyScreenTimeout_->setDisabled(true); + } }); connect(shareKeysWithTrustedUsers_, &Toggle::toggled, this, [this](bool enabled) { @@ -1113,6 +1165,13 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge this, [this](int newValue) { settings_->setTimelineMaxWidth(newValue); }); + connect(privacyScreenTimeout_, + qOverload(&QSpinBox::valueChanged), + this, + [this](int newValue) { + settings_->setPrivacyScreenTimeout(newValue); + }); + connect( sessionKeysImportBtn, &QPushButton::clicked, this, &UserSettingsPage::importSessionKeys); @@ -1146,6 +1205,7 @@ UserSettingsPage::showEvent(QShowEvent *) startInTrayToggle_->setState(settings_->startInTray()); groupViewToggle_->setState(settings_->groupView()); decryptSidebar_->setState(settings_->decryptSidebar()); + privacyScreen_->setState(settings_->privacyScreen()); shareKeysWithTrustedUsers_->setState(settings_->shareKeysWithTrustedUsers()); avatarCircles_->setState(settings_->avatarCircles()); typingNotifications_->setState(settings_->typingNotifications()); @@ -1160,6 +1220,7 @@ UserSettingsPage::showEvent(QShowEvent *) enlargeEmojiOnlyMessages_->setState(settings_->enlargeEmojiOnlyMessages()); deviceIdValue_->setText(QString::fromStdString(http::client()->device_id())); timelineMaxWidthSpin_->setValue(settings_->timelineMaxWidth()); + privacyScreenTimeout_->setValue(settings_->privacyScreenTimeout()); WebRTCSession::instance().refreshDevices(); auto mics = diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 6744d101..7e475c3b 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -67,6 +67,9 @@ class UserSettings : public QObject bool avatarCircles READ avatarCircles WRITE setAvatarCircles NOTIFY avatarCirclesChanged) Q_PROPERTY(bool decryptSidebar READ decryptSidebar WRITE setDecryptSidebar NOTIFY decryptSidebarChanged) + Q_PROPERTY(bool privacyScreen READ privacyScreen WRITE setPrivacyScreen NOTIFY + privacyScreenChanged) + Q_PROPERTY(int privacyScreenTimeout READ privacyScreenTimeout WRITE setPrivacyScreenTimeout NOTIFY privacyScreenTimeoutChanged) Q_PROPERTY(int timelineMaxWidth READ timelineMaxWidth WRITE setTimelineMaxWidth NOTIFY timelineMaxWidthChanged) Q_PROPERTY(bool mobileMode READ mobileMode WRITE setMobileMode NOTIFY mobileModeChanged) @@ -131,6 +134,8 @@ public: void setAlertOnNotification(bool state); void setAvatarCircles(bool state); void setDecryptSidebar(bool state); + void setPrivacyScreen(bool state); + void setPrivacyScreenTimeout(int state); void setPresence(Presence state); void setRingtone(QString ringtone); void setMicrophone(QString microphone); @@ -153,6 +158,8 @@ public: bool groupView() const { return groupView_; } bool avatarCircles() const { return avatarCircles_; } bool decryptSidebar() const { return decryptSidebar_; } + bool privacyScreen() const { return privacyScreen_; } + int privacyScreenTimeout() const { return privacyScreenTimeout_; } bool markdown() const { return markdown_; } bool typingNotifications() const { return typingNotifications_; } bool sortByImportance() const { return sortByImportance_; } @@ -199,6 +206,8 @@ signals: void alertOnNotificationChanged(bool state); void avatarCirclesChanged(bool state); void decryptSidebarChanged(bool state); + void privacyScreenChanged(bool state); + void privacyScreenTimeoutChanged(int state); void timelineMaxWidthChanged(int state); void mobileModeChanged(bool mode); void fontSizeChanged(double state); @@ -239,6 +248,8 @@ private: bool hasAlertOnNotification_; bool avatarCircles_; bool decryptSidebar_; + bool privacyScreen_; + int privacyScreenTimeout_; bool shareKeysWithTrustedUsers_; bool mobileMode_; int timelineMaxWidth_; @@ -317,6 +328,8 @@ private: Toggle *avatarCircles_; Toggle *useStunServer_; Toggle *decryptSidebar_; + Toggle *privacyScreen_; + QSpinBox *privacyScreenTimeout_; Toggle *shareKeysWithTrustedUsers_; Toggle *mobileMode_; QLabel *deviceFingerprintValue_; From cb93ac3402a9b8d8862ce97d05386c52811166c5 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Tue, 26 Jan 2021 00:03:09 -0500 Subject: [PATCH 02/37] Fix formatting --- .ci/format.sh | 10 ++++++++++ resources/qml/PrivacyScreen.qml | 27 +++++++++++++++++---------- resources/qml/TimelineView.qml | 1 + src/UserSettingsPage.cpp | 26 ++++++++++++-------------- src/UserSettingsPage.h | 7 ++++--- 5 files changed, 44 insertions(+), 27 deletions(-) diff --git a/.ci/format.sh b/.ci/format.sh index e1e6c1e4..7f201bb8 100755 --- a/.ci/format.sh +++ b/.ci/format.sh @@ -14,4 +14,14 @@ do clang-format -i "$f" done; +QMLFORMAT_PATH=$(which qmlformat) +if [ ! -z "$QMLFORMAT_PATH" ]; then + QML_FILES=$(find resources -type f -iname "*.qml") + + for f in $QML_FILES + do + qmlformat -i "$f" + done; +fi + git diff --exit-code diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index 497630f1..9fdd35e0 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -1,22 +1,24 @@ -import QtQuick 2.12 import QtGraphicalEffects 1.0 +import QtQuick 2.12 Item { property var timelineRoot property var imageSource property int screenTimeout + anchors.fill: parent Timer { id: screenSaverTimer + interval: screenTimeout * 1000 running: true onTriggered: { timelineRoot.grabToImage(function(result) { imageSource = result.url; - screenSaver.visible = true - particles.resume() - }, Qt.size(width, height)) + screenSaver.visible = true; + particles.resume(); + }, Qt.size(width, height)); } } @@ -34,13 +36,15 @@ Item { Rectangle { id: screenSaver + anchors.fill: parent visible: false color: "transparent" Image { id: image - visible : screenSaver.visible + + visible: screenSaver.visible anchors.fill: parent source: imageSource } @@ -50,11 +54,12 @@ Item { sourceItem: image anchors.fill: image - sourceRect: Qt.rect(0,0, width, height) + sourceRect: Qt.rect(0, 0, width, height) } - FastBlur{ + FastBlur { id: blur + anchors.fill: effectSource source: effectSource radius: 50 @@ -64,11 +69,13 @@ Item { anchors.fill: parent propagateComposedEvents: true hoverEnabled: true - onClicked: { + onClicked: { screenSaver.visible = false; screenSaverTimer.restart(); - mouse.accepted = false + mouse.accepted = false; } } + } -} \ No newline at end of file + +} diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 5f43de55..35d09d5a 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -189,6 +189,7 @@ Page { ColumnLayout { id: timelineLayout + visible: TimelineManager.timeline != null anchors.fill: parent spacing: 0 diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 1875e4f9..a8558e95 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -87,16 +87,16 @@ UserSettings::load(std::optional profile) settings.value("user/timeline/message_hover_highlight", false).toBool(); enlargeEmojiOnlyMessages_ = settings.value("user/timeline/enlarge_emoji_only_msg", false).toBool(); - markdown_ = settings.value("user/markdown_enabled", true).toBool(); - typingNotifications_ = settings.value("user/typing_notifications", true).toBool(); - sortByImportance_ = settings.value("user/sort_by_unread", true).toBool(); - readReceipts_ = settings.value("user/read_receipts", true).toBool(); - theme_ = settings.value("user/theme", defaultTheme_).toString(); - font_ = settings.value("user/font_family", "default").toString(); - avatarCircles_ = settings.value("user/avatar_circles", true).toBool(); - decryptSidebar_ = settings.value("user/decrypt_sidebar", true).toBool(); - privacyScreen_ = settings.value("user/privacy_screen", false).toBool(); - privacyScreenTimeout_ = settings.value("user/privacy_screen_timeout", 0).toInt(); + markdown_ = settings.value("user/markdown_enabled", true).toBool(); + typingNotifications_ = settings.value("user/typing_notifications", true).toBool(); + sortByImportance_ = settings.value("user/sort_by_unread", true).toBool(); + readReceipts_ = settings.value("user/read_receipts", true).toBool(); + theme_ = settings.value("user/theme", defaultTheme_).toString(); + font_ = settings.value("user/font_family", "default").toString(); + avatarCircles_ = settings.value("user/avatar_circles", true).toBool(); + decryptSidebar_ = settings.value("user/decrypt_sidebar", true).toBool(); + privacyScreen_ = settings.value("user/privacy_screen", false).toBool(); + privacyScreenTimeout_ = settings.value("user/privacy_screen_timeout", 0).toInt(); shareKeysWithTrustedUsers_ = settings.value("user/share_keys_with_trusted_users", true).toBool(); mobileMode_ = settings.value("user/mobile_mode", false).toBool(); @@ -842,7 +842,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge boxWrap(tr("Privacy screen timeout"), privacyScreenTimeout_, tr("Set timeout for how long after window loses\nfocus before the screen" - " will be blurred.\nSet to 0 to blur immediately after focus loss.")); + " will be blurred.\nSet to 0 to blur immediately after focus loss.")); boxWrap(tr("Show buttons in timeline"), timelineButtonsToggle_, tr("Show buttons to quickly reply, react or access additional options next to each " @@ -1168,9 +1168,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge connect(privacyScreenTimeout_, qOverload(&QSpinBox::valueChanged), this, - [this](int newValue) { - settings_->setPrivacyScreenTimeout(newValue); - }); + [this](int newValue) { settings_->setPrivacyScreenTimeout(newValue); }); connect( sessionKeysImportBtn, &QPushButton::clicked, this, &UserSettingsPage::importSessionKeys); diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 7e475c3b..8654afcf 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -67,9 +67,10 @@ class UserSettings : public QObject bool avatarCircles READ avatarCircles WRITE setAvatarCircles NOTIFY avatarCirclesChanged) Q_PROPERTY(bool decryptSidebar READ decryptSidebar WRITE setDecryptSidebar NOTIFY decryptSidebarChanged) - Q_PROPERTY(bool privacyScreen READ privacyScreen WRITE setPrivacyScreen NOTIFY - privacyScreenChanged) - Q_PROPERTY(int privacyScreenTimeout READ privacyScreenTimeout WRITE setPrivacyScreenTimeout NOTIFY privacyScreenTimeoutChanged) + Q_PROPERTY( + bool privacyScreen READ privacyScreen WRITE setPrivacyScreen NOTIFY privacyScreenChanged) + Q_PROPERTY(int privacyScreenTimeout READ privacyScreenTimeout WRITE setPrivacyScreenTimeout + NOTIFY privacyScreenTimeoutChanged) Q_PROPERTY(int timelineMaxWidth READ timelineMaxWidth WRITE setTimelineMaxWidth NOTIFY timelineMaxWidthChanged) Q_PROPERTY(bool mobileMode READ mobileMode WRITE setMobileMode NOTIFY mobileModeChanged) From bfeb766a91e259dce7924fb0bbcfcac85b91092b Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Tue, 26 Jan 2021 17:23:28 -0500 Subject: [PATCH 03/37] Implement Privacy Screen * Add handles for window focus gained / focus lossed and connect to timer * Clean up some of the PrivacyScreen.qml code * Connect settings to PrivacyScreen visibility --- .ci/format.sh | 2 + resources/qml/PrivacyScreen.qml | 120 ++++++++++++++++++++++------- src/ChatPage.cpp | 2 + src/ChatPage.h | 2 +- src/MainWindow.cpp | 16 ++++ src/MainWindow.h | 4 + src/UserSettingsPage.cpp | 12 +-- src/timeline/TimelineViewManager.h | 14 +++- 8 files changed, 137 insertions(+), 35 deletions(-) diff --git a/.ci/format.sh b/.ci/format.sh index 7f201bb8..4df4282a 100755 --- a/.ci/format.sh +++ b/.ci/format.sh @@ -22,6 +22,8 @@ if [ ! -z "$QMLFORMAT_PATH" ]; then do qmlformat -i "$f" done; +else + echo "qmlformat not found; skipping qml formatting" fi git diff --exit-code diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index 9fdd35e0..45ae5cb5 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -1,13 +1,28 @@ import QtGraphicalEffects 1.0 import QtQuick 2.12 +import im.nheko 1.0 Item { + id: privacyScreen + property var timelineRoot - property var imageSource + property var imageSource: "" property int screenTimeout anchors.fill: parent + Connections { + target: TimelineManager + onFocusChanged: { + if (TimelineManager.isWindowFocused) { + screenSaverTimer.stop(); + screenSaver.state = "Invisible"; + } else { + screenSaverTimer.start(); + } + } + } + Timer { id: screenSaverTimer @@ -15,36 +30,98 @@ Item { running: true onTriggered: { timelineRoot.grabToImage(function(result) { + screenSaver.state = "Visible"; imageSource = result.url; - screenSaver.visible = true; - particles.resume(); }, Qt.size(width, height)); } } - // Reset screensaver timer when clicks are received - MouseArea { - anchors.fill: parent - // Pass mouse events through - propagateComposedEvents: true - hoverEnabled: true - onClicked: { - screenSaverTimer.restart(); - mouse.accepted = false; - } - } - Rectangle { id: screenSaver + state: "Invisible" anchors.fill: parent visible: false color: "transparent" + states: [ + State { + name: "Visible" + + PropertyChanges { + target: screenSaver + visible: true + } + + PropertyChanges { + target: screenSaver + opacity: 1 + } + + }, + State { + name: "Invisible" + + PropertyChanges { + target: screenSaver + opacity: 0 + } + + PropertyChanges { + target: screenSaver + visible: false + } + + } + ] + transitions: [ + Transition { + from: "Visible" + to: "Invisible" + + SequentialAnimation { + NumberAnimation { + target: screenSaver + property: "opacity" + duration: 250 + easing.type: Easing.InQuad + } + + NumberAnimation { + target: screenSaver + property: "visible" + duration: 0 + } + + } + + }, + Transition { + from: "Invisible" + to: "Visible" + + SequentialAnimation { + NumberAnimation { + target: screenSaver + property: "visible" + duration: 0 + } + + NumberAnimation { + target: screenSaver + property: "opacity" + duration: 500 + easing.type: Easing.InQuad + } + + } + + } + ] Image { id: image - visible: screenSaver.visible + cache: false anchors.fill: parent source: imageSource } @@ -65,17 +142,6 @@ Item { radius: 50 } - MouseArea { - anchors.fill: parent - propagateComposedEvents: true - hoverEnabled: true - onClicked: { - screenSaver.visible = false; - screenSaverTimer.restart(); - mouse.accepted = false; - } - } - } } diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 0377ce30..5bbfa351 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -312,6 +312,8 @@ ChatPage::ChatPage(QSharedPointer userSettings, QWidget *parent) &ChatPage::initializeMentions, user_mentions_popup_, &popups::UserMentions::initializeMentions); + connect( + this, &ChatPage::chatFocusChanged, view_manager_, &TimelineViewManager::chatFocusChanged); connect(this, &ChatPage::syncUI, this, [this](const mtx::responses::Rooms &rooms) { try { room_list_->cleanupInvites(cache::invites()); diff --git a/src/ChatPage.h b/src/ChatPage.h index 0516f87d..917bd785 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -127,7 +127,6 @@ public slots: void receivedSessionKey(const std::string &room_id, const std::string &session_id); void decryptDownloadedSecrets(mtx::secret_storage::AesHmacSha2KeyDescription keyDesc, const SecretsToDecrypt &secrets); - signals: void connectionLost(); void connectionRestored(); @@ -176,6 +175,7 @@ signals: void retrievedPresence(const QString &statusMsg, mtx::presence::PresenceState state); void themeChanged(); void decryptSidebarChanged(); + void chatFocusChanged(const bool focused); //! Signals for device verificaiton void receivedDeviceVerificationAccept( diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 77269008..8fd5c7e2 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -130,6 +130,9 @@ MainWindow::MainWindow(QWidget *parent) SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); connect(chat_page_, SIGNAL(contentLoaded()), this, SLOT(removeOverlayProgressBar())); + + connect(this, &MainWindow::focusChanged, chat_page_, &ChatPage::chatFocusChanged); + connect( chat_page_, &ChatPage::showUserSettingsPage, this, &MainWindow::showUserSettingsPage); @@ -204,6 +207,19 @@ MainWindow::resizeEvent(QResizeEvent *event) QMainWindow::resizeEvent(event); } +bool +MainWindow::event(QEvent *event) +{ + auto type = event->type(); + if (type == QEvent::WindowActivate) { + emit focusChanged(true); + } else if (type == QEvent::WindowDeactivate) { + emit focusChanged(false); + } + + return QMainWindow::event(event); +} + void MainWindow::adjustSideBars() { diff --git a/src/MainWindow.h b/src/MainWindow.h index 0915a849..4560ec65 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -88,6 +88,7 @@ protected: void closeEvent(QCloseEvent *event) override; void resizeEvent(QResizeEvent *event) override; void showEvent(QShowEvent *event) override; + bool event(QEvent *event) override; private slots: //! Show or hide the sidebars based on window's size. @@ -115,6 +116,9 @@ private slots: virtual void setWindowTitle(int notificationCount); +signals: + void focusChanged(const bool focused); + private: bool loadJdenticonPlugin(); diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index a8558e95..c26bf2e9 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -836,13 +836,15 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge decryptSidebar_, tr("Decrypt the messages shown in the sidebar.\nOnly affects messages in " "encrypted chats.")); - boxWrap(tr("Encrypted chat privacy screen"), + boxWrap(tr("Privacy Screen"), privacyScreen_, tr("When the window loses focus, the timeline will\nbe blurred.")); - boxWrap(tr("Privacy screen timeout"), - privacyScreenTimeout_, - tr("Set timeout for how long after window loses\nfocus before the screen" - " will be blurred.\nSet to 0 to blur immediately after focus loss.")); + boxWrap( + tr("Privacy screen timeout"), + privacyScreenTimeout_, + tr("Set timeout (in seconds) for how long after window loses\nfocus before the screen" + " will be blurred.\nSet to 0 to blur immediately after focus loss. Max value of 1 " + "hour (3600 seconds)")); boxWrap(tr("Show buttons in timeline"), timelineButtonsToggle_, tr("Show buttons to quickly reply, react or access additional options next to each " diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h index 23a960b8..74128865 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h @@ -36,6 +36,8 @@ class TimelineViewManager : public QObject bool isInitialSync MEMBER isInitialSync_ READ isInitialSync NOTIFY initialSyncChanged) Q_PROPERTY( bool isNarrowView MEMBER isNarrowView_ READ isNarrowView NOTIFY narrowViewChanged) + Q_PROPERTY( + bool isWindowFocused MEMBER isWindowFocused_ READ isWindowFocused NOTIFY focusChanged) public: TimelineViewManager(CallManager *callManager, ChatPage *parent = nullptr); @@ -54,6 +56,7 @@ public: Q_INVOKABLE TimelineModel *activeTimeline() const { return timeline_; } Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; } bool isNarrowView() const { return isNarrowView_; } + bool isWindowFocused() const { return isWindowFocused_; } Q_INVOKABLE void openImageOverlay(QString mxcUrl, QString eventId) const; Q_INVOKABLE QColor userColor(QString id, QColor background); Q_INVOKABLE QString escapeEmoji(QString str) const; @@ -83,11 +86,17 @@ signals: void inviteUsers(QStringList users); void showRoomList(); void narrowViewChanged(); + void focusChanged(); public slots: void updateReadReceipts(const QString &room_id, const std::vector &event_ids); void receivedSessionKey(const std::string &room_id, const std::string &session_id); void initWithMessages(const std::vector &roomIds); + void chatFocusChanged(bool focused) + { + isWindowFocused_ = focused; + emit focusChanged(); + } void setHistoryView(const QString &room_id); TimelineModel *getHistoryView(const QString &room_id) @@ -145,8 +154,9 @@ private: TimelineModel *timeline_ = nullptr; CallManager *callManager_ = nullptr; - bool isInitialSync_ = true; - bool isNarrowView_ = false; + bool isInitialSync_ = true; + bool isNarrowView_ = false; + bool isWindowFocused_ = false; QHash userColors; From a413c538e4d3daa19f4a389c02214e6ccee1df73 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 27 Jan 2021 01:21:08 -0500 Subject: [PATCH 04/37] Translated using Weblate (Hungarian) Currently translated at 53.7% (234 of 435 strings) Co-authored-by: maxigaz Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/hu/ Translation: Nheko/nheko --- resources/langs/nheko_hu.ts | 51 +++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index 39fcd64e..781639ac 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -1132,125 +1132,126 @@ Példa: https://szerver.em:8787 Save image - + Kép mentése Save video - + Videó mentése Save audio - + Hang mentése Save file - + Fájl mentése %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) - - + + %1%2 gépel. + %1 és %2 gépelnek. %1 opened the room to the public. - + %1 nyilvánosan elérhetővé tette a szobát. %1 made this room require and invitation to join. - + %1 beállította, hogy meghívással lehessen csatlakozni ehhez a szobához. %1 made the room open to guests. - + %1 elérhetővé tette a szobát vendégeknek. %1 has closed the room to guest access. - + %1 eltávolította a szoba elérhetőségét vendégek számára. %1 made the room history world readable. Events may be now read by non-joined people. - + %1 olvashatóvá tette a világon bárki számára a szoba előzményeit. Az eseményeket most már azok is láthatják, akik nem csatlakoztak. %1 set the room history visible to members from this point on. - + %1 beállította, hogy a szoba előzményei ezentúl csak a tagok számára legyenek láthatóak. %1 set the room history visible to members since they were invited. - + %1 beállította, hogy a szoba előzményei láthatóak legyenek a tagok számára a meghívásuktól kezdve. %1 set the room history visible to members since they joined the room. - + %1 beállította, hogy a szoba előzményei láthatóak legyenek a tagok számára a csatlakozásuktól kezdve. %1 has changed the room's permissions. - + %1 megváltoztatta a szoba engedélyeit. %1 was invited. - + %1 meg lett hívva. %1 changed their display name and avatar. - + %1 megváltoztatta a megjelenítési nevét és a profilképét. %1 changed their display name. - + %1 megváltoztatta a megjelenítési nevét. %1 changed their avatar. - + %1 megváltoztatta a profilképét. %1 changed some profile info. - + %1 megváltoztatta a profiladatait. %1 joined. - + %1 csatlakozott. %1 rejected their invite. - + %1 elutasította a meghívását. Revoked the invite to %1. - + Meghívás elutasítva a(z) %1 szobába. %1 left the room. - + %1 elhagyta a szobát. Kicked %1. - + %1 ki lett rúgva. From 0ac7912f50042a9b78751ff77fbf1da6b5ccdd0c Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 27 Jan 2021 08:12:27 -0500 Subject: [PATCH 05/37] Translated using Weblate (Hungarian) Currently translated at 62.7% (273 of 435 strings) Co-authored-by: maxigaz Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/hu/ Translation: Nheko/nheko --- resources/langs/nheko_hu.ts | 78 ++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index 781639ac..b2af3068 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -1256,17 +1256,17 @@ Példa: https://szerver.em:8787 Unbanned %1. - + %1 tiltása vissza lett vonva. %1 was banned. - + %1 ki lett tiltva. %1 redacted their knock. - + %1 visszavonta a kopogását. @@ -1276,23 +1276,23 @@ Példa: https://szerver.em:8787 Rejected the knock from %1. - + Kopogás elutasítva tőle: %1. %1 left after having already left! This is a leave event after the user already left and shouldn't happen apart from state resets - + %1 távozott, miután már egyszer távozott! Reason: %1 - + Ok: %1 %1 knocked. - + %1 kopogott. @@ -1300,17 +1300,17 @@ Példa: https://szerver.em:8787 React - + Reakció Reply - + Válasz Options - + Műveletek @@ -1318,47 +1318,47 @@ Példa: https://szerver.em:8787 React - + Reakció Reply - + Válasz Read receipts - + Olvasási jegyek Mark as read - + Megjelölés olvasottként View raw message - + Nyers üzenet megtekintése View decrypted raw message - + Előzőleg titkosított nyers üzenet megtekintése Remove message - + Üzenet eltávolítása Save as - + Mentés másként No room open - + Nincs nyitott szoba @@ -1366,7 +1366,7 @@ Példa: https://szerver.em:8787 No encrypted private chat found with this user. Create an encrypted private chat with this user and try again. - + Nem található titkosított privát csevegés ezzel a felhasználóval. Hozz létre egy titkosított privát csevegést vele, és próbáld újra! @@ -1374,38 +1374,38 @@ Példa: https://szerver.em:8787 Back to room list - + Vissza a szobák listájára No room selected - + Nincs kiválasztva szoba Room options - + Szoba beállításai Invite users - + Felhasználók meghívása Members - + Tagok Leave room - + Szoba elhagyása Settings - + Beállítások @@ -1413,12 +1413,12 @@ Példa: https://szerver.em:8787 Show - + Mutat Quit - + Kilépés @@ -1426,42 +1426,42 @@ Példa: https://szerver.em:8787 Logout - + Kijelentkezés Set custom status message - + Egyéni állapotüzenet megadása Custom status message - + Egyéni állapotüzenet Status: - + Állapot: Set presence automatically - + Elérhetőség megadása automatikusan Online - + Bejelentkezve Unavailable - + Nem elérhető Offline - + Kiejelentkezve @@ -1469,12 +1469,12 @@ Példa: https://szerver.em:8787 Verify - + Hitelesítés Ban the user - + A felhasználó tiltása From b07f26bde6a3c62d00ce864165bfd7049db27860 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 14:49:25 +0100 Subject: [PATCH 06/37] Update translations --- resources/langs/nheko_cs.ts | 50 ++++++++++++------- resources/langs/nheko_de.ts | 50 ++++++++++++------- resources/langs/nheko_el.ts | 50 ++++++++++++------- resources/langs/nheko_en.ts | 50 ++++++++++++------- resources/langs/nheko_eo.ts | 50 ++++++++++++------- resources/langs/nheko_et.ts | 50 ++++++++++++------- resources/langs/nheko_fi.ts | 50 ++++++++++++------- resources/langs/nheko_fr.ts | 50 ++++++++++++------- resources/langs/nheko_hu.ts | 73 +++++++++++++++++----------- resources/langs/nheko_it.ts | 50 ++++++++++++------- resources/langs/nheko_ja.ts | 50 ++++++++++++------- resources/langs/nheko_ml.ts | 88 ++++++++++++++++++++-------------- resources/langs/nheko_nl.ts | 52 +++++++++++++------- resources/langs/nheko_pl.ts | 50 ++++++++++++------- resources/langs/nheko_pt_PT.ts | 50 ++++++++++++------- resources/langs/nheko_ro.ts | 50 ++++++++++++------- resources/langs/nheko_ru.ts | 50 ++++++++++++------- resources/langs/nheko_si.ts | 50 ++++++++++++------- resources/langs/nheko_sv.ts | 50 ++++++++++++------- resources/langs/nheko_zh_CN.ts | 50 ++++++++++++------- 20 files changed, 691 insertions(+), 372 deletions(-) diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts index 9010c704..54c956aa 100644 --- a/resources/langs/nheko_cs.ts +++ b/resources/langs/nheko_cs.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. @@ -126,7 +126,7 @@ - + Invited user: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN @@ -763,7 +774,7 @@ Example: https://server.my:8787 - + Emoji @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1266,12 +1277,12 @@ Example: https://server.my:8787 - + You joined this room. - + Rejected the knock from %1. @@ -1352,6 +1363,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1464,7 +1480,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1487,7 +1503,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 48909ba2..498e38e9 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Du bist dem Raum beigetreten. @@ -126,7 +126,7 @@ - + Invited user: %1 Eingeladener Benutzer: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Alle Räume @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Verschlüsseltes Event (keine Schlüssel zur Entschlüsselung gefunden) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Alle Dateien (*) - + Failed to upload media. Please try again. Medienupload fehlgeschlagen. Bitte versuche es erneut. @@ -617,7 +628,7 @@ Beispiel: https://mein.server:8787 - + LOGIN ANMELDEN @@ -767,7 +778,7 @@ Beispiel: https://mein.server:8787 Schreibe eine Nachricht… - + Emoji Emoji @@ -874,7 +885,7 @@ Beispiel: https://mein.server:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Benutze ein separates profil, wodurch mehrere Accounts und Nhekoinstanzen zur gleichen Zeit verwendet werden können. @@ -977,7 +988,7 @@ Beispiel: https://mein.server:8787 RoomInfo - + no version stored keine Version gespeichert @@ -1019,7 +1030,7 @@ Beispiel: https://mein.server:8787 Fügt einen Tag hinzu oder entfernt ihn. - + New tag... Add a new tag to the room Neuer Tag... @@ -1119,7 +1130,7 @@ Beispiel: https://mein.server:8787 TimelineModel - + Message redaction failed: %1 Nachricht zurückziehen fehlgeschlagen: %1 @@ -1130,7 +1141,7 @@ Beispiel: https://mein.server:8787 Event konnte nicht verschlüsselt werden, senden wurde abgebrochen! - + Save image Bild speichern @@ -1150,7 +1161,7 @@ Beispiel: https://mein.server:8787 Datei speichern - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1269,12 +1280,12 @@ Beispiel: https://mein.server:8787 %1 hat das Anklopfen zurückgezogen. - + You joined this room. Du bist dem Raum beigetreten. - + Rejected the knock from %1. Hat das Anklopfen von %1 abgewiesen. @@ -1355,6 +1366,11 @@ Beispiel: https://mein.server:8787 Save as Speichern unter... + + + Open in external program + + No room open @@ -1467,7 +1483,7 @@ Beispiel: https://mein.server:8787 UserProfile - + Verify Verifizieren @@ -1490,7 +1506,7 @@ Beispiel: https://mein.server:8787 UserSettingsPage - + Minimize to tray Ins Benachrichtigungsfeld minimieren diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index 36c29389..0d0070a0 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. @@ -126,7 +126,7 @@ - + Invited user: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Όλα τα αρχεία (*) - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN ΕΙΣΟΔΟΣ @@ -763,7 +774,7 @@ Example: https://server.my:8787 Γράψε ένα μήνυμα... - + Emoji @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image Αποθήκευση Εικόνας @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1265,12 +1276,12 @@ Example: https://server.my:8787 - + You joined this room. - + Rejected the knock from %1. @@ -1351,6 +1362,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1463,7 +1479,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1486,7 +1502,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray Ελαχιστοποίηση diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index f354cf87..21e9783b 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. You joined this room. @@ -126,7 +126,7 @@ - + Invited user: %1 Invited user: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms All rooms @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Encrypted Event (No keys found for decryption) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ All Files (*) - + Failed to upload media. Please try again. Failed to upload media. Please try again. @@ -617,7 +628,7 @@ Example: https://server.my:8787 - + LOGIN LOGIN @@ -767,7 +778,7 @@ Example: https://server.my:8787 Write a message… - + Emoji Emoji @@ -874,7 +885,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -977,7 +988,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored no version stored @@ -1019,7 +1030,7 @@ Example: https://server.my:8787 Adds or removes the specified tag. - + New tag... Add a new tag to the room New tag… @@ -1119,7 +1130,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 Message redaction failed: %1 @@ -1130,7 +1141,7 @@ Example: https://server.my:8787 Failed to encrypt event, sending aborted! - + Save image Save image @@ -1150,7 +1161,7 @@ Example: https://server.my:8787 Save file - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1269,12 +1280,12 @@ Example: https://server.my:8787 %1 redacted their knock. - + You joined this room. You joined this room. - + Rejected the knock from %1. Rejected the knock from %1. @@ -1355,6 +1366,11 @@ Example: https://server.my:8787 Save as Save as + + + Open in external program + + No room open @@ -1467,7 +1483,7 @@ Example: https://server.my:8787 UserProfile - + Verify Verify @@ -1490,7 +1506,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray Minimize to tray diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts index eb94d4ab..3a58a4b5 100644 --- a/resources/langs/nheko_eo.ts +++ b/resources/langs/nheko_eo.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Vi aliĝis ĉi tiun ĉambron. @@ -126,7 +126,7 @@ - + Invited user: %1 @@ -281,7 +281,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Ĉiuj ĉambroj @@ -475,11 +480,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -558,7 +569,7 @@ Ĉiuj dosieroj (*) - + Failed to upload media. Please try again. @@ -617,7 +628,7 @@ Ekzemplo: https://servisto.mia:8787 - + LOGIN Maybe shouldn't be imperative? ENSALUTU @@ -768,7 +779,7 @@ Ekzemplo: https://servisto.mia:8787 Skribu mesaĝon... - + Emoji @@ -875,7 +886,7 @@ Ekzemplo: https://servisto.mia:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -978,7 +989,7 @@ Ekzemplo: https://servisto.mia:8787 RoomInfo - + no version stored @@ -1020,7 +1031,7 @@ Ekzemplo: https://servisto.mia:8787 - + New tag... Add a new tag to the room Nova etikedo... @@ -1122,7 +1133,7 @@ Ekzemplo: https://servisto.mia:8787 TimelineModel - + Message redaction failed: %1 @@ -1133,7 +1144,7 @@ Ekzemplo: https://servisto.mia:8787 - + Save image @@ -1153,7 +1164,7 @@ Ekzemplo: https://servisto.mia:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1274,12 +1285,12 @@ Ekzemplo: https://servisto.mia:8787 - + You joined this room. Vi aliĝis ĉi tiun ĉambron. - + Rejected the knock from %1. @@ -1360,6 +1371,11 @@ Ekzemplo: https://servisto.mia:8787 Save as + + + Open in external program + + No room open @@ -1472,7 +1488,7 @@ Ekzemplo: https://servisto.mia:8787 UserProfile - + Verify @@ -1495,7 +1511,7 @@ Ekzemplo: https://servisto.mia:8787 UserSettingsPage - + Minimize to tray diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 1a00659b..f446c903 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Sa liitusid selle jututoaga. @@ -126,7 +126,7 @@ - + Invited user: %1 Kutsutud kasutaja: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Kõik jututoad @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Krüptitud sündmus (Dekrüptimisvõtmeid ei leidunud) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Kõik failid (*) - + Failed to upload media. Please try again. Meediafailide üleslaadimine ei õnnestunud. Palun proovi uuesti. @@ -617,7 +628,7 @@ Näiteks: https://server.minu:8787 - + LOGIN LOGI SISSE @@ -767,7 +778,7 @@ Näiteks: https://server.minu:8787 Kirjuta sõnum… - + Emoji Emoji @@ -874,7 +885,7 @@ Näiteks: https://server.minu:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Loo unikaalne profiil, mis võimaldab sul logida samaaegselt sisse erinevatele kasutajakontodele ning käivitada mitu Nheko programmiakent. @@ -977,7 +988,7 @@ Näiteks: https://server.minu:8787 RoomInfo - + no version stored salvestatud versiooni ei leidu @@ -1019,7 +1030,7 @@ Näiteks: https://server.minu:8787 Lisab või eemaldab selle sildi. - + New tag... Add a new tag to the room Uus silt… @@ -1119,7 +1130,7 @@ Näiteks: https://server.minu:8787 TimelineModel - + Message redaction failed: %1 Sõnumi ümbersõnastamine ebaõnnestus: %1 @@ -1130,7 +1141,7 @@ Näiteks: https://server.minu:8787 Sündmuse krüptimine ei õnnestunud, katkestame saatmise! - + Save image Salvesta pilt @@ -1150,7 +1161,7 @@ Näiteks: https://server.minu:8787 Salvesta fail - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1269,12 +1280,12 @@ Näiteks: https://server.minu:8787 %1 muutis oma koputust jututoa uksele. - + You joined this room. Sa liitusid jututoaga. - + Rejected the knock from %1. Lükkas tagasi %1 koputuse jututoa uksele. @@ -1355,6 +1366,11 @@ Näiteks: https://server.minu:8787 Save as Salvesta kui + + + Open in external program + + No room open @@ -1467,7 +1483,7 @@ Näiteks: https://server.minu:8787 UserProfile - + Verify Verifitseeri @@ -1490,7 +1506,7 @@ Näiteks: https://server.minu:8787 UserSettingsPage - + Minimize to tray Vähenda tegumiribale diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index a5af584c..5be454a7 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. @@ -126,7 +126,7 @@ - + Invited user: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Kaikki huoneet @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Salattu viesti (salauksen purkuavaimia ei löydetty) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Kaikki Tiedostot (*) - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN KIRJAUDU @@ -763,7 +774,7 @@ Example: https://server.my:8787 Kirjoita viesti… - + Emoji Emoji @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored ei tallennettua versiota @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 Viestin muokkaus epäonnistui: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image Tallenna kuva @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1265,12 +1276,12 @@ Example: https://server.my:8787 - + You joined this room. - + Rejected the knock from %1. @@ -1351,6 +1362,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1463,7 +1479,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1486,7 +1502,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray Pienennä ilmoitusalueelle diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index 1750360b..e87fcfda 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Vous avez rejoint ce salon. @@ -126,7 +126,7 @@ - + Invited user: %1 %1 a été invité(e) @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Tous les salons @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Évènement chiffré (pas de clé trouvée pour le déchiffrement) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Tous les types de fichiers (*) - + Failed to upload media. Please try again. Échec de l'envoi du média. Veuillez réessayer. @@ -617,7 +628,7 @@ Exemple : https ://monserveur.example.com :8787 - + LOGIN CONNEXION @@ -767,7 +778,7 @@ Exemple : https ://monserveur.example.com :8787 Écrivez un message… - + Emoji Émoji @@ -874,7 +885,7 @@ Exemple : https ://monserveur.example.com :8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Créer un profil unique, vous permettant de vous connecter simultanément à plusieurs comptes et à lancer plusieurs instances de nheko. @@ -977,7 +988,7 @@ Exemple : https ://monserveur.example.com :8787 RoomInfo - + no version stored pas de version enregistrée @@ -1019,7 +1030,7 @@ Exemple : https ://monserveur.example.com :8787 Ajoute ou retire l'étiquette spécifiée. - + New tag... Add a new tag to the room Nouvelle étiquette… @@ -1119,7 +1130,7 @@ Exemple : https ://monserveur.example.com :8787 TimelineModel - + Message redaction failed: %1 Échec de la suppression du message : %1 @@ -1130,7 +1141,7 @@ Exemple : https ://monserveur.example.com :8787 Échec du chiffrement de l'évènement, envoi abandonné ! - + Save image Enregistrer l'image @@ -1150,7 +1161,7 @@ Exemple : https ://monserveur.example.com :8787 Enregistrer le fichier - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1269,12 +1280,12 @@ Exemple : https ://monserveur.example.com :8787 %1 ne frappe plus au salon. - + You joined this room. Vous avez rejoint ce salon. - + Rejected the knock from %1. %1 a été rejeté après avoir frappé au salon. @@ -1355,6 +1366,11 @@ Exemple : https ://monserveur.example.com :8787 Save as Enregistrer sous + + + Open in external program + + No room open @@ -1467,7 +1483,7 @@ Exemple : https ://monserveur.example.com :8787 UserProfile - + Verify Vérifier @@ -1490,7 +1506,7 @@ Exemple : https ://monserveur.example.com :8787 UserSettingsPage - + Minimize to tray Réduire à la barre des tâches diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index b2af3068..cb911fdd 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Csatlakoztál ehhez a szobához. @@ -126,7 +126,7 @@ - + Invited user: %1 A felhasználó meg lett hívva: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Az összes szoba @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Titkosított esemény (Nem találhatók kulcsok a titkosítás feloldásához) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Minden fájl (*) - + Failed to upload media. Please try again. Nem sikerült feltölteni a médiafájlt. Kérlek, próbáld újra! @@ -617,7 +628,7 @@ Példa: https://szerver.em:8787 - + LOGIN BEJELENTKEZÉS @@ -767,7 +778,7 @@ Példa: https://szerver.em:8787 Írj egy üzenetet… - + Emoji Hangulatjelek @@ -874,7 +885,7 @@ Példa: https://szerver.em:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Egy egyedi profil létrehozása, amellyel be tudsz jelentkezni egyszerre több fiókon keresztül és a Nheko több példányát is tudod futtatni. @@ -977,7 +988,7 @@ Példa: https://szerver.em:8787 RoomInfo - + no version stored nincs tárolva verzió @@ -1019,7 +1030,7 @@ Példa: https://szerver.em:8787 Hozzáadja vagy eltávolítja az adott címkét. - + New tag... Add a new tag to the room Új címke… @@ -1119,7 +1130,7 @@ Példa: https://szerver.em:8787 TimelineModel - + Message redaction failed: %1 Az üzenet visszavonása nem sikerült: %1 @@ -1130,7 +1141,7 @@ Példa: https://szerver.em:8787 Nem sikerült titkosítani az eseményt, küldés megszakítva! - + Save image Kép mentése @@ -1150,12 +1161,11 @@ Példa: https://szerver.em:8787 Fájl mentése - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) %1%2 gépel. - %1 és %2 gépelnek. @@ -1269,12 +1279,12 @@ Példa: https://szerver.em:8787 %1 visszavonta a kopogását. - + You joined this room. Csatlakoztál ehhez a szobához. - + Rejected the knock from %1. Kopogás elutasítva tőle: %1. @@ -1355,6 +1365,11 @@ Példa: https://szerver.em:8787 Save as Mentés másként + + + Open in external program + + No room open @@ -1467,7 +1482,7 @@ Példa: https://szerver.em:8787 UserProfile - + Verify Hitelesítés @@ -1490,7 +1505,7 @@ Példa: https://szerver.em:8787 UserSettingsPage - + Minimize to tray @@ -1612,7 +1627,7 @@ If this is on, rooms which have active notifications (the small circle with a nu Read receipts - + Olvasási jegyek @@ -1855,12 +1870,12 @@ This usually causes the application icon in the task bar to animate in some fash Select a file - + Fájl kiválasztása All Files (*) - + Minden fájl (*) @@ -1948,12 +1963,12 @@ This usually causes the application icon in the task bar to animate in some fash REGISTER - + REGISZTRÁCIÓ LOGIN - + BEJELENTKEZÉS @@ -1979,12 +1994,12 @@ This usually causes the application icon in the task bar to animate in some fash Name - + Név Topic - + Téma @@ -2130,12 +2145,12 @@ Media size: %2 Read receipts - + Olvasási jegyek Close - + Bezárás @@ -2156,7 +2171,7 @@ Media size: %2 Settings - + Beállítások @@ -2260,7 +2275,7 @@ Media size: %2 All Files (*) - + Minden fájl (*) diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts index a8aeeab2..ade3292d 100644 --- a/resources/langs/nheko_it.ts +++ b/resources/langs/nheko_it.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Sei entrato in questa stanza. @@ -126,7 +126,7 @@ - + Invited user: %1 Invitato utente: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Tutte le stanze @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Evento Criptato (Chiavi per la decriptazione non trovate) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Tutti i File (*) - + Failed to upload media. Please try again. Impossibile inviare il file multimediale. Per favore riprova. @@ -617,7 +628,7 @@ Esempio: https://server.mio:8787 - + LOGIN ACCEDI @@ -767,7 +778,7 @@ Esempio: https://server.mio:8787 Scrivi un messaggio… - + Emoji Emoji @@ -874,7 +885,7 @@ Esempio: https://server.mio:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -977,7 +988,7 @@ Esempio: https://server.mio:8787 RoomInfo - + no version stored nessuna versione memorizzata @@ -1019,7 +1030,7 @@ Esempio: https://server.mio:8787 Aggiungi o rimuovi il tag specificato. - + New tag... Add a new tag to the room @@ -1119,7 +1130,7 @@ Esempio: https://server.mio:8787 TimelineModel - + Message redaction failed: %1 Oscuramento del messaggio fallito: %1 @@ -1130,7 +1141,7 @@ Esempio: https://server.mio:8787 - + Save image Salva immagine @@ -1150,7 +1161,7 @@ Esempio: https://server.mio:8787 Salva file - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1269,12 +1280,12 @@ Esempio: https://server.mio:8787 %1 ha oscurato la sua bussata. - + You joined this room. Sei entrato in questa stanza. - + Rejected the knock from %1. Rifiutata la bussata di %1. @@ -1355,6 +1366,11 @@ Esempio: https://server.mio:8787 Save as Salva come + + + Open in external program + + No room open @@ -1467,7 +1483,7 @@ Esempio: https://server.mio:8787 UserProfile - + Verify @@ -1490,7 +1506,7 @@ Esempio: https://server.mio:8787 UserSettingsPage - + Minimize to tray Minimizza nella tray diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index 78bb8a0a..5b8689cb 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. @@ -126,7 +126,7 @@ - + Invited user: %1 招待されたユーザー: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms 全ての部屋 @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- 暗号化イベント (復号鍵が見つかりません) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ 全てのファイル (*) - + Failed to upload media. Please try again. メディアをアップロードできませんでした。やり直して下さい。 @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN ログイン @@ -763,7 +774,7 @@ Example: https://server.my:8787 メッセージを書く... - + Emoji 絵文字 @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored バージョンが保存されていません @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 メッセージを編集できませんでした: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image 画像を保存 @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 ファイルを保存 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1264,12 +1275,12 @@ Example: https://server.my:8787 %1がノックを編集しました。 - + You joined this room. - + Rejected the knock from %1. %1からのノックを拒否しました。 @@ -1350,6 +1361,11 @@ Example: https://server.my:8787 Save as 名前を付けて保存 + + + Open in external program + + No room open @@ -1462,7 +1478,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1485,7 +1501,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray トレイへ最小化 diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts index 4efe8835..68094c03 100644 --- a/resources/langs/nheko_ml.ts +++ b/resources/langs/nheko_ml.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. നിങ്ങൾ ഈ മുറിയിൽ ചേർന്നു. @@ -126,7 +126,7 @@ - + Invited user: %1 ക്ഷണിച്ച ഉപയോക്താവ്:% 1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms എല്ലാ മുറികളും @@ -455,7 +460,7 @@ They match! - + അവ പൊരുത്തപ്പെടുന്നു! @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN @@ -763,7 +774,7 @@ Example: https://server.my:8787 ഒരു സന്ദേശം എഴുതുക…. - + Emoji ഇമോജി @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -909,7 +920,7 @@ Example: https://server.my:8787 Password - + പാസ്‍വേഡ് @@ -967,13 +978,13 @@ Example: https://server.my:8787 Close - + അടയ്‌ക്കുക RoomInfo - + no version stored @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1040,7 +1051,7 @@ Example: https://server.my:8787 Decline - + നിരസിക്കുക @@ -1109,13 +1120,13 @@ Example: https://server.my:8787 Close - + അടയ്‌ക്കുക TimelineModel - + Message redaction failed: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1265,12 +1276,12 @@ Example: https://server.my:8787 - + You joined this room. - + നിങ്ങൾ ഈ മുറിയിൽ ചേർന്നു. - + Rejected the knock from %1. @@ -1351,6 +1362,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1463,7 +1479,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1486,7 +1502,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray @@ -1851,7 +1867,7 @@ This usually causes the application icon in the task bar to animate in some fash Select a file - + ഒരു ഫയൽ തിരഞ്ഞെടുക്കുക @@ -1926,7 +1942,7 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു @@ -1970,17 +1986,17 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു Name - + പേര് Topic - + വിഷയം @@ -2013,7 +2029,7 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു @@ -2031,7 +2047,7 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു @@ -2049,7 +2065,7 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു @@ -2062,7 +2078,7 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു @@ -2075,7 +2091,7 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു @@ -2093,7 +2109,7 @@ This usually causes the application icon in the task bar to animate in some fash Cancel - + റദ്ദാക്കു @@ -2108,7 +2124,7 @@ Media size: %2 Cancel - + റദ്ദാക്കു @@ -2131,7 +2147,7 @@ Media size: %2 Close - + അടയ്‌ക്കുക diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index 19f9474d..44991967 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Je bent lid geworden van deze kamer. @@ -126,7 +126,7 @@ - + Invited user: %1 Gebruiker uitgenodigd: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Alle bestanden (*) - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN INLOGGEN @@ -763,7 +774,7 @@ Example: https://server.my:8787 Typ een bericht... - + Emoji @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image Afbeelding opslaan @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1265,12 +1276,12 @@ Example: https://server.my:8787 - + You joined this room. - + Je bent lid geworden van deze kamer. - + Rejected the knock from %1. @@ -1351,6 +1362,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1463,7 +1479,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1486,7 +1502,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray Minimaliseren naar systeemvak diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 8c4d64c8..9e4624c0 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Dołączyłeś(-łaś) do tego pokoju. @@ -126,7 +126,7 @@ - + Invited user: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Wszystkie pokoje @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Zdarzenie szyfrowania (Nie znaleziono kluczy deszyfrujących) + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Wszystkie pliki (*) - + Failed to upload media. Please try again. @@ -615,7 +626,7 @@ Example: https://server.my:8787 - + LOGIN ZALOGUJ @@ -765,7 +776,7 @@ Example: https://server.my:8787 Napisz wiadomość… - + Emoji Emoji @@ -872,7 +883,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Stwórz unikalny profil, który pozwoli Ci na zalogowanie się do kilku kont jednocześnie i uruchomienie wielu instancji Nheko. @@ -975,7 +986,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -1017,7 +1028,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1117,7 +1128,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 Redagowanie wiadomości nie powiodło się: %1 @@ -1128,7 +1139,7 @@ Example: https://server.my:8787 - + Save image Zapisz obraz @@ -1148,7 +1159,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1268,12 +1279,12 @@ Example: https://server.my:8787 - + You joined this room. Dołączyłeś(-łaś) do tego pokoju. - + Rejected the knock from %1. @@ -1354,6 +1365,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1466,7 +1482,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1489,7 +1505,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray Zminimalizuj do paska zadań diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts index 33637f22..19520429 100644 --- a/resources/langs/nheko_pt_PT.ts +++ b/resources/langs/nheko_pt_PT.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. @@ -126,7 +126,7 @@ - + Invited user: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN @@ -763,7 +774,7 @@ Example: https://server.my:8787 - + Emoji @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1265,12 +1276,12 @@ Example: https://server.my:8787 - + You joined this room. - + Rejected the knock from %1. @@ -1351,6 +1362,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1463,7 +1479,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1486,7 +1502,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts index c4e195f5..66106fb2 100644 --- a/resources/langs/nheko_ro.ts +++ b/resources/langs/nheko_ro.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Te-ai alăturat camerei. @@ -126,7 +126,7 @@ - + Invited user: %1 Utilizator invitat: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Toate camerele @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Toate fișierele (*) - + Failed to upload media. Please try again. @@ -617,7 +628,7 @@ Exemplu: https://serverul.meu:8787 - + LOGIN CONECTARE @@ -767,7 +778,7 @@ Exemplu: https://serverul.meu:8787 - + Emoji @@ -874,7 +885,7 @@ Exemplu: https://serverul.meu:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -977,7 +988,7 @@ Exemplu: https://serverul.meu:8787 RoomInfo - + no version stored nicio versiune stocată @@ -1019,7 +1030,7 @@ Exemplu: https://serverul.meu:8787 - + New tag... Add a new tag to the room @@ -1119,7 +1130,7 @@ Exemplu: https://serverul.meu:8787 TimelineModel - + Message redaction failed: %1 Redactare mesaj eșuată: %1 @@ -1130,7 +1141,7 @@ Exemplu: https://serverul.meu:8787 - + Save image Salvați imaginea @@ -1150,7 +1161,7 @@ Exemplu: https://serverul.meu:8787 Salvați fișier - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1270,12 +1281,12 @@ Exemplu: https://serverul.meu:8787 %1 și-a redactat ciocănitul. - + You joined this room. Te-ai alăturat camerei. - + Rejected the knock from %1. Ciocănit refuzat de la %1. @@ -1356,6 +1367,11 @@ Exemplu: https://serverul.meu:8787 Save as Salvare ca + + + Open in external program + + No room open @@ -1468,7 +1484,7 @@ Exemplu: https://serverul.meu:8787 UserProfile - + Verify @@ -1491,7 +1507,7 @@ Exemplu: https://serverul.meu:8787 UserSettingsPage - + Minimize to tray Minimizează în bara de notificări diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index 0e3b48f5..c3e18044 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Вы присоединились к этой комнате. @@ -126,7 +126,7 @@ - + Invited user: %1 Приглашенный пользователь: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Все комнаты @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Зашифрованное событие (Нет найдено ключей для дешифрования) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Все файлы (*) - + Failed to upload media. Please try again. Не удалось загрузить медиа. Пожалуйста попробуйте ещё раз @@ -617,7 +628,7 @@ Example: https://server.my:8787 - + LOGIN ВОЙТИ @@ -767,7 +778,7 @@ Example: https://server.my:8787 Написать сообщение… - + Emoji Эмоджи @@ -874,7 +885,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Создать уникальный профиль, который позволяет вести несколько аккаунтов и запускать множество сущностей nheko. @@ -977,7 +988,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored нет сохраненной версии @@ -1019,7 +1030,7 @@ Example: https://server.my:8787 Добавить или удалить выбранные тэг. - + New tag... Add a new tag to the room Добавить новый тег для комнаты @@ -1119,7 +1130,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 Ошибка редактирования сообщения: %1 @@ -1130,7 +1141,7 @@ Example: https://server.my:8787 Не удалось зашифровать сообщение, отправка отменена! - + Save image Сохранить изображение @@ -1150,7 +1161,7 @@ Example: https://server.my:8787 Сохранить файл - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1270,12 +1281,12 @@ Example: https://server.my:8787 %1 отредактировал его "стук". - + You joined this room. Вы присоединились к этой комнате. - + Rejected the knock from %1. Отверг "стук" от %1 @@ -1356,6 +1367,11 @@ Example: https://server.my:8787 Save as Сохранить как + + + Open in external program + + No room open @@ -1468,7 +1484,7 @@ Example: https://server.my:8787 UserProfile - + Verify Верифицировать @@ -1491,7 +1507,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray Сворачивать в системную панель diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts index a6e10ad5..6c9cc39e 100644 --- a/resources/langs/nheko_si.ts +++ b/resources/langs/nheko_si.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. @@ -126,7 +126,7 @@ - + Invited user: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN @@ -763,7 +774,7 @@ Example: https://server.my:8787 - + Emoji @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1265,12 +1276,12 @@ Example: https://server.my:8787 - + You joined this room. - + Rejected the knock from %1. @@ -1351,6 +1362,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1463,7 +1479,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1486,7 +1502,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts index 70941b51..4fcfd38d 100644 --- a/resources/langs/nheko_sv.ts +++ b/resources/langs/nheko_sv.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. Du gick med i detta rum. @@ -126,7 +126,7 @@ - + Invited user: %1 Bjöd in användare: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms Alla rum @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. -- Krypterat Event (Inga nycklar kunde hittas för dekryptering) -- + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ Alla Filer (*) - + Failed to upload media. Please try again. Kunde inte ladda upp media. Vänligen försök igen. @@ -617,7 +628,7 @@ Exempel: https://server.my:8787 - + LOGIN INLOGGNING @@ -767,7 +778,7 @@ Exempel: https://server.my:8787 Skriv ett meddelande… - + Emoji Emoji @@ -874,7 +885,7 @@ Exempel: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. Skapa en unik profil, vilket tillåter dig att logga in på flera konton samtidigt och starta flera instanser av Nheko. @@ -977,7 +988,7 @@ Exempel: https://server.my:8787 RoomInfo - + no version stored ingen version lagrad @@ -1019,7 +1030,7 @@ Exempel: https://server.my:8787 Lägger till eller tar bort den angivna taggen. - + New tag... Add a new tag to the room Ny tagg… @@ -1119,7 +1130,7 @@ Exempel: https://server.my:8787 TimelineModel - + Message redaction failed: %1 Kunde inte maskera meddelande: %1 @@ -1130,7 +1141,7 @@ Exempel: https://server.my:8787 Kunde inte kryptera event, sändning avbruten! - + Save image Spara bild @@ -1150,7 +1161,7 @@ Exempel: https://server.my:8787 Spara fil - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1269,12 +1280,12 @@ Exempel: https://server.my:8787 %1 maskerade sin knackning. - + You joined this room. Du gick med i detta rum. - + Rejected the knock from %1. Avvisade knackningen från %1. @@ -1355,6 +1366,11 @@ Exempel: https://server.my:8787 Save as Spara som + + + Open in external program + + No room open @@ -1467,7 +1483,7 @@ Exempel: https://server.my:8787 UserProfile - + Verify Bekräfta @@ -1490,7 +1506,7 @@ Exempel: https://server.my:8787 UserSettingsPage - + Minimize to tray Minimera till systemtråg diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index 2e8b7255..a7f0cc4d 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -51,7 +51,7 @@ Cache - + You joined this room. 您已加入此房间 @@ -126,7 +126,7 @@ - + Invited user: %1 邀请已发送: %1 @@ -280,7 +280,12 @@ CommunitiesListItem - + + Hide rooms with this tag or from this community + + + + All rooms @@ -474,11 +479,17 @@ EventStore - + -- Encrypted Event (No keys found for decryption) -- Placeholder, when the message was not decrypted yet or can't be decrypted. + + + -- Encrypted Event (Key not valid for this index) -- + Placeholder, when the message can't be decrypted with this key since it is not valid for this index + + @@ -557,7 +568,7 @@ 所有文件(*) - + Failed to upload media. Please try again. @@ -613,7 +624,7 @@ Example: https://server.my:8787 - + LOGIN 登录 @@ -763,7 +774,7 @@ Example: https://server.my:8787 写一条消息… - + Emoji @@ -870,7 +881,7 @@ Example: https://server.my:8787 QCoreApplication - + Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko. @@ -973,7 +984,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -1015,7 +1026,7 @@ Example: https://server.my:8787 - + New tag... Add a new tag to the room @@ -1115,7 +1126,7 @@ Example: https://server.my:8787 TimelineModel - + Message redaction failed: %1 删除消息失败:%1 @@ -1126,7 +1137,7 @@ Example: https://server.my:8787 - + Save image 保存图像 @@ -1146,7 +1157,7 @@ Example: https://server.my:8787 - + %1 and %2 are typing. Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.) @@ -1264,12 +1275,12 @@ Example: https://server.my:8787 - + You joined this room. 您已加入此房间 - + Rejected the knock from %1. @@ -1350,6 +1361,11 @@ Example: https://server.my:8787 Save as + + + Open in external program + + No room open @@ -1462,7 +1478,7 @@ Example: https://server.my:8787 UserProfile - + Verify @@ -1485,7 +1501,7 @@ Example: https://server.my:8787 UserSettingsPage - + Minimize to tray 最小化至托盘 From 498bfb89b3a84dc1f4c12c725c3f17e474ea3fcf Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 17:20:22 +0100 Subject: [PATCH 07/37] Translate some of the new messages --- resources/langs/nheko_de.ts | 8 ++++---- resources/langs/nheko_en.ts | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 498e38e9..d1a83aec 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -274,7 +274,7 @@ Failed to kick %1 from %2: %3 - + Kontte %1 nicht aus %2 entfernen: %3 @@ -282,7 +282,7 @@ Hide rooms with this tag or from this community - + Verstecke Räume mit diesem Tag oder aus dieser Community @@ -488,7 +488,7 @@ -- Encrypted Event (Key not valid for this index) -- Placeholder, when the message can't be decrypted with this key since it is not valid for this index - + -- Verschlüsseltes Event (Schlüssel passt nicht für diesen Nachrichtenindex) -- @@ -1369,7 +1369,7 @@ Beispiel: https://mein.server:8787 Open in external program - + Öffne in externen Programm diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index 21e9783b..5b5d544c 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -274,7 +274,7 @@ Failed to kick %1 from %2: %3 - + Failed to kick %1 from %2: %3 @@ -282,7 +282,7 @@ Hide rooms with this tag or from this community - + Hide rooms with this tag or from this community @@ -488,7 +488,7 @@ -- Encrypted Event (Key not valid for this index) -- Placeholder, when the message can't be decrypted with this key since it is not valid for this index - + -- Encrypted Event (Key not valid for this index) -- @@ -1369,7 +1369,7 @@ Example: https://server.my:8787 Open in external program - + Open in external program From d1280af2e4c704147a36da510faa0a994d3159c7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 19:19:21 +0100 Subject: [PATCH 08/37] Autoclose completer when space is pressed and no suggestion available --- resources/qml/Completer.qml | 1 + resources/qml/MessageInput.qml | 3 +++ resources/qml/TimelineView.qml | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index 7b71bd7f..750a0fdd 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -11,6 +11,7 @@ Popup { property string completerName property var completer property bool bottomToTop: true + property alias count: listView.count signal completionClicked(string completion) diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 12362f57..138a9ab6 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -162,6 +162,9 @@ Rectangle { if (event.matches(StandardKey.Paste)) { TimelineManager.timeline.input.paste(false); event.accepted = true; + } else if (event.key == Qt.Key_Space) { + if (popup.opened && popup.count <= 0) + popup.close() } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_U) { messageInput.clear(); } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_P) { diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 2eb0a7c5..a2b56b9a 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -35,7 +35,7 @@ Page { colors: palette model: EmojiProxyModel { - category: EmojiCategory.People + category: Emoji.Category.People sourceModel: EmojiModel { } From 9e486590169c117fec2ab83faac638ad3175e03d Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 19:24:06 +0100 Subject: [PATCH 09/37] Add a few missing strings on the login page to translations --- resources/langs/nheko_cs.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_de.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_el.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_en.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_eo.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_et.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_fi.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_fr.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_hu.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_it.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_ja.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_ml.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_nl.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_pl.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_pt_PT.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_ro.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_ru.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_si.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_sv.ts | 31 +++++++++++++++++++++++++++---- resources/langs/nheko_zh_CN.ts | 31 +++++++++++++++++++++++++++---- src/LoginPage.cpp | 14 +++++++------- 21 files changed, 547 insertions(+), 87 deletions(-) diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts index 54c956aa..22bbd88b 100644 --- a/resources/langs/nheko_cs.ts +++ b/resources/langs/nheko_cs.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Your password. + + + + Device name @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -774,7 +797,7 @@ Example: https://server.my:8787 - + Emoji diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index d1a83aec..6f0e6836 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -610,7 +610,12 @@ Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem Passwort - + + Your password. + + + + Device name Gerätename @@ -620,7 +625,17 @@ Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem Ein Name für dieses Gerät. Dieser wird der anderen Seite gezeigt, wenn das Gerät verifiziert wird. Wenn nichts angeben wird, wird einer generiert. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 Die Adresse unter der dein Heimserver erreichbar ist. @@ -633,7 +648,15 @@ Beispiel: https://mein.server:8787 ANMELDEN - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Automatische Erkennung fehlgeschlagen. Antwort war fehlerhaft. @@ -778,7 +801,7 @@ Beispiel: https://mein.server:8787 Schreibe eine Nachricht… - + Emoji Emoji diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index 0d0070a0..e24539ce 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Κωδικός - + + Your password. + + + + Device name @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 ΕΙΣΟΔΟΣ - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -774,7 +797,7 @@ Example: https://server.my:8787 Γράψε ένα μήνυμα... - + Emoji diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index 5b5d544c..9c1239ee 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -610,7 +610,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Password - + + Your password. + + + + Device name Device name @@ -620,7 +625,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 The address that can be used to contact you homeservers client API. @@ -633,7 +648,15 @@ Example: https://server.my:8787 LOGIN - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Autodiscovery failed. Received malformed response. @@ -778,7 +801,7 @@ Example: https://server.my:8787 Write a message… - + Emoji Emoji diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts index 3a58a4b5..b09d8240 100644 --- a/resources/langs/nheko_eo.ts +++ b/resources/langs/nheko_eo.ts @@ -608,7 +608,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Pasvorto - + + Your password. + + + + Device name Aparata nomo @@ -619,7 +624,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Nomo por ĉi tiu aparato, montrot al aliaj, kiam kontrolant viajn aparatojn. Se neniom provizitis, defaŭlto uzit. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 API should be valid for the EO translation of application programming interface. @@ -634,7 +649,15 @@ Ekzemplo: https://servisto.mia:8787 ENSALUTU - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -779,7 +802,7 @@ Ekzemplo: https://servisto.mia:8787 Skribu mesaĝon... - + Emoji diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index f446c903..133497ea 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -610,7 +610,12 @@ Kui Nheko ei suuda tuvastada sinu koduserverit, siis ta kuvab sulle andmevälja Salasõna - + + Your password. + + + + Device name Seadme nimi @@ -620,7 +625,17 @@ Kui Nheko ei suuda tuvastada sinu koduserverit, siis ta kuvab sulle andmevälja Selle seadme nimi, mida näidetakse verifitseerimise ajal teisele kasutajatele. Kui sa ise nime ei pane, siis kasutame automaatselt pandud nime. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 Aadress, mida sinu koduserveri kliendipoole API kasutab. @@ -633,7 +648,15 @@ Näiteks: https://server.minu:8787 LOGI SISSE - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Koduserveri automaatne tuvastamine ei õnnestunud: päringuvastus oli vigane. @@ -778,7 +801,7 @@ Näiteks: https://server.minu:8787 Kirjuta sõnum… - + Emoji Emoji diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index 5be454a7..f4a518e5 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Salasana - + + Your password. + + + + Device name Laitteen nimi @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 KIRJAUDU - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Palvelimen tietojen hakeminen epäonnistui: virheellinen vastaus. @@ -774,7 +797,7 @@ Example: https://server.my:8787 Kirjoita viesti… - + Emoji Emoji diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index e87fcfda..130bc004 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -610,7 +610,12 @@ Si Nheko n'arrive pas à trouver votre serveur, il vous proposera de l&apos Mot de passe - + + Your password. + + + + Device name Nom de l'appareil @@ -620,7 +625,17 @@ Si Nheko n'arrive pas à trouver votre serveur, il vous proposera de l&apos Un nom pour cet appareil, qui sera montré aux autres utilisateurs lorsque ceux-ci le vérifieront. Si aucun n'est fourni, un nom par défaut est utilisé. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 L'adresse qui peut être utilisée pour joindre l'API client de votre serveur. @@ -633,7 +648,15 @@ Exemple : https ://monserveur.example.com :8787 CONNEXION - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Échec de la découverte automatique. Réponse mal formatée reçue. @@ -778,7 +801,7 @@ Exemple : https ://monserveur.example.com :8787 Écrivez un message… - + Emoji Émoji diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index cb911fdd..f05b5aee 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -610,7 +610,12 @@ Ha a Nheko nem tud rátalálni a homeszerveredre, meg fog jelenni egy mező, aho Jelszó - + + Your password. + + + + Device name Eszköznév @@ -620,7 +625,17 @@ Ha a Nheko nem tud rátalálni a homeszerveredre, meg fog jelenni egy mező, aho Egy név ennek az eszköznek, amely meg fog jelenni mások számára, amikor hitelesíted az eszközeidet. Ha nincs megadva semmi, egy alapértelmezett név lesz használva. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 A cím, melyen keresztül el lehet érni a homeszervered kliens API-jét. @@ -633,7 +648,15 @@ Példa: https://szerver.em:8787 BEJELENTKEZÉS - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Az automatikus felderítés nem sikerült. Helytelen válasz érkezett. @@ -778,7 +801,7 @@ Példa: https://szerver.em:8787 Írj egy üzenetet… - + Emoji Hangulatjelek diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts index ade3292d..e05cea70 100644 --- a/resources/langs/nheko_it.ts +++ b/resources/langs/nheko_it.ts @@ -610,7 +610,12 @@ Se Nheko non conclude la ricerca del tuo homeserver, ti mostrerà un campo in cu Password - + + Your password. + + + + Device name Nome del dispositivo @@ -620,7 +625,17 @@ Se Nheko non conclude la ricerca del tuo homeserver, ti mostrerà un campo in cu - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 L'indirizzo che può essere usato per contattare le API client del tuo homeserver. @@ -633,7 +648,15 @@ Esempio: https://server.mio:8787 ACCEDI - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Ricerca automatica fallita. Ricevuta risposta malformata. @@ -778,7 +801,7 @@ Esempio: https://server.mio:8787 Scrivi un messaggio… - + Emoji Emoji diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index 5b8689cb..47cb27b8 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th パスワード - + + Your password. + + + + Device name デバイス名 @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 ログイン - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. 自動検出できませんでした。不正な形式の応答を受信しました。 @@ -774,7 +797,7 @@ Example: https://server.my:8787 メッセージを書く... - + Emoji 絵文字 diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts index 68094c03..fcceacab 100644 --- a/resources/langs/nheko_ml.ts +++ b/resources/langs/nheko_ml.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th പാസ്‍വേഡ് - + + Your password. + + + + Device name ഉപകരണത്തിന്റെ പേര് @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -774,7 +797,7 @@ Example: https://server.my:8787 ഒരു സന്ദേശം എഴുതുക…. - + Emoji ഇമോജി diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index 44991967..d4f6e5f0 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Wachtwoord - + + Your password. + + + + Device name @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 INLOGGEN - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -774,7 +797,7 @@ Example: https://server.my:8787 Typ een bericht... - + Emoji diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 9e4624c0..b0f83014 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -609,7 +609,12 @@ Jeżeli Nheko nie odnajdzie Twojego serwera domowego, wyświetli formularz umoż Hasło - + + Your password. + + + + Device name Nazwa urządzenia @@ -619,7 +624,17 @@ Jeżeli Nheko nie odnajdzie Twojego serwera domowego, wyświetli formularz umoż Nazwa dla tego urządzenia, będzie ona widoczna dla innych użytkowników, kiedy będą weryfikować Twoje urządzenia. Jeżeli żadna nie jest podana, używana jest domyślna. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -631,7 +646,15 @@ Example: https://server.my:8787 ZALOGUJ - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Automatyczne odkrywanie zakończone niepowodzeniem. Otrzymano nieprawidłową odpowiedź. @@ -776,7 +799,7 @@ Example: https://server.my:8787 Napisz wiadomość… - + Emoji Emoji diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts index 19520429..31be9ea9 100644 --- a/resources/langs/nheko_pt_PT.ts +++ b/resources/langs/nheko_pt_PT.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Your password. + + + + Device name @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -774,7 +797,7 @@ Example: https://server.my:8787 - + Emoji diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts index 66106fb2..7b36ea59 100644 --- a/resources/langs/nheko_ro.ts +++ b/resources/langs/nheko_ro.ts @@ -610,7 +610,12 @@ Dacă Nheko nu vă poate găsi homeserverul, vă va arăta un câmp pentru intro Parolă - + + Your password. + + + + Device name Nume dispozitiv @@ -620,7 +625,17 @@ Dacă Nheko nu vă poate găsi homeserverul, vă va arăta un câmp pentru intro - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 Adresa la care se poate contacta APIul homeserverului dumneavoastră. @@ -633,7 +648,15 @@ Exemplu: https://serverul.meu:8787 CONECTARE - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Autodescoperirea a eșuat. Răspunsul primit este defectuos. @@ -778,7 +801,7 @@ Exemplu: https://serverul.meu:8787 - + Emoji diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index c3e18044..716c1657 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -610,7 +610,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Пароль - + + Your password. + + + + Device name Имя устройства @@ -620,7 +625,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Имя устройства, которое будет отображаться для других, когда верифицируют ваше устройство. Если не предоставить имя устройста,то будет использоваться имя по умолчанию. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 Адрес который будет использоваться для связи клиентского API вашего домашнего сервера. @@ -633,7 +648,15 @@ Example: https://server.my:8787 ВОЙТИ - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Автообноружение не удалось. Получен поврежденный ответ. @@ -778,7 +801,7 @@ Example: https://server.my:8787 Написать сообщение… - + Emoji Эмоджи diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts index 6c9cc39e..6366b35a 100644 --- a/resources/langs/nheko_si.ts +++ b/resources/langs/nheko_si.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Your password. + + + + Device name @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -774,7 +797,7 @@ Example: https://server.my:8787 - + Emoji diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts index 4fcfd38d..18266ad4 100644 --- a/resources/langs/nheko_sv.ts +++ b/resources/langs/nheko_sv.ts @@ -610,7 +610,12 @@ Om Nheko inte kan hitta din hemserver automatiskt kommer ett fält dyka upp där Lösenord - + + Your password. + + + + Device name Enhetsnamn @@ -620,7 +625,17 @@ Om Nheko inte kan hitta din hemserver automatiskt kommer ett fält dyka upp där Ett namn för denna enhet. Namnet kommer synas för andra när du verifierar dina enheter. Om du inte förser ett namn kommer ett standardnamn användas. - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 Addressen som kan användas för att kontakta din hemservers klient-API. @@ -633,7 +648,15 @@ Exempel: https://server.my:8787 INLOGGNING - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. Autouppslag misslyckades. Mottog felkonstruerat svar. @@ -778,7 +801,7 @@ Exempel: https://server.my:8787 Skriv ett meddelande… - + Emoji Emoji diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index a7f0cc4d..ce25bcbe 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -607,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th 密码 - + + Your password. + + + + Device name 设备名 @@ -617,7 +622,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th - + + Homeserver address + + + + + server.my:8787 + + + + The address that can be used to contact you homeservers client API. Example: https://server.my:8787 @@ -629,7 +644,15 @@ Example: https://server.my:8787 登录 - + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + Autodiscovery failed. Received malformed response. @@ -774,7 +797,7 @@ Example: https://server.my:8787 写一条消息… - + Emoji diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index ec9b856f..15aeb12a 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -120,7 +120,7 @@ LoginPage::LoginPage(QWidget *parent) password_input_ = new TextField(this); password_input_->setLabel(tr("Password")); password_input_->setEchoMode(QLineEdit::Password); - password_input_->setToolTip("Your password."); + password_input_->setToolTip(tr("Your password.")); deviceName_ = new TextField(this); deviceName_->setLabel(tr("Device name")); @@ -129,8 +129,8 @@ LoginPage::LoginPage(QWidget *parent) "If none is provided a default is used.")); serverInput_ = new TextField(this); - serverInput_->setLabel("Homeserver address"); - serverInput_->setPlaceholderText("matrix.org"); + serverInput_->setLabel(tr("Homeserver address")); + serverInput_->setPlaceholderText(tr("server.my:8787")); serverInput_->setToolTip(tr("The address that can be used to contact you homeservers " "client API.\nExample: https://server.my:8787")); serverInput_->hide(); @@ -217,7 +217,7 @@ LoginPage::onMatrixIdEntered() if (!matrixid_input_->isValid()) { error_matrixid_label_->show(); showError(error_matrixid_label_, - "You have entered an invalid Matrix ID e.g @joe:matrix.org"); + tr("You have entered an invalid Matrix ID e.g @joe:matrix.org")); return; } else { error_matrixid_label_->setText(""); @@ -228,7 +228,7 @@ LoginPage::onMatrixIdEntered() user = parse(matrixid_input_->text().toStdString()); } catch (const std::exception &) { showError(error_matrixid_label_, - "You have entered an invalid Matrix ID e.g @joe:matrix.org"); + tr("You have entered an invalid Matrix ID e.g @joe:matrix.org")); return; } @@ -385,7 +385,7 @@ LoginPage::onLoginButtonClicked() if (!matrixid_input_->isValid()) { error_matrixid_label_->show(); showError(error_matrixid_label_, - "You have entered an invalid Matrix ID e.g @joe:matrix.org"); + tr("You have entered an invalid Matrix ID e.g @joe:matrix.org")); return; } else { error_matrixid_label_->setText(""); @@ -396,7 +396,7 @@ LoginPage::onLoginButtonClicked() user = parse(matrixid_input_->text().toStdString()); } catch (const std::exception &) { showError(error_matrixid_label_, - "You have entered an invalid Matrix ID e.g @joe:matrix.org"); + tr("You have entered an invalid Matrix ID e.g @joe:matrix.org")); return; } From 54cc77de0ebdebe58b28f6fad713fbcc53d6d7a8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 19:36:53 +0100 Subject: [PATCH 10/37] Only select elements in completer when mouse is moved --- resources/qml/Completer.qml | 2 +- resources/qml/MessageInput.qml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index 750a0fdd..27322172 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -85,7 +85,7 @@ Popup { anchors.fill: parent hoverEnabled: true - onEntered: popup.currentIndex = model.index + onPositionChanged: popup.currentIndex = model.index onClicked: popup.completionClicked(completer.completionAt(model.index)) Ripple { diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 138a9ab6..35ebe488 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -164,7 +164,8 @@ Rectangle { event.accepted = true; } else if (event.key == Qt.Key_Space) { if (popup.opened && popup.count <= 0) - popup.close() + popup.close(); + } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_U) { messageInput.clear(); } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_P) { @@ -258,7 +259,7 @@ Rectangle { Connections { ignoreUnknownSignals: true - onReplyChanged: messageInput.forceActiveFocus(); + onReplyChanged: messageInput.forceActiveFocus() target: TimelineManager.timeline } From 982784883c32f4c03be56ad338f36724511c71b0 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 27 Jan 2021 13:37:43 -0500 Subject: [PATCH 11/37] Translated using Weblate (Estonian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (438 of 438 strings) Co-authored-by: Priit Jõerüüt Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/et/ Translation: Nheko/nheko --- resources/langs/nheko_et.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 133497ea..8ee9bf5b 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -274,7 +274,7 @@ Failed to kick %1 from %2: %3 - + Kasutaja %1 väljamüksamine %2 jututoast ei õnnestunud: %3 @@ -282,7 +282,7 @@ Hide rooms with this tag or from this community - + Peida sellest kogukonnast antud sildiga jututoad @@ -488,7 +488,7 @@ -- Encrypted Event (Key not valid for this index) -- Placeholder, when the message can't be decrypted with this key since it is not valid for this index - + -- Krüptitud sündmus (võti pole selle indeksi jaoks sobilik) -- @@ -1392,7 +1392,7 @@ Näiteks: https://server.minu:8787 Open in external program - + Ava välise rakendusega From 6c370b1f0e6d8c8ba6d6e45ff47e5b27c37bd9e2 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 19:49:06 +0100 Subject: [PATCH 12/37] Update new translations --- resources/langs/nheko_de.ts | 8 ++++---- resources/langs/nheko_en.ts | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 6f0e6836..9b827a91 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -612,7 +612,7 @@ Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem Your password. - + Dein Passwort. @@ -627,12 +627,12 @@ Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem Homeserver address - + Heimserveradresse server.my:8787 - + dein.server:8787 @@ -653,7 +653,7 @@ Beispiel: https://mein.server:8787 You have entered an invalid Matrix ID e.g @joe:matrix.org - + Du hast eine invalide Matrix ID eingegeben. Normalerwise sehen die so aus: @joe:matrix.org diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index 9c1239ee..9919e89e 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -612,7 +612,7 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Your password. - + Your password. @@ -627,12 +627,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th Homeserver address - + Homeserver address server.my:8787 - + server.my:8787 @@ -653,7 +653,7 @@ Example: https://server.my:8787 You have entered an invalid Matrix ID e.g @joe:matrix.org - + You have entered an invalid Matrix ID e.g @joe:matrix.org From 73244afdb8581f61967fab6663564d3b68ee9b99 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 20:26:54 +0100 Subject: [PATCH 13/37] Fix username completion deleting characters before it fixes #421 --- resources/qml/MessageInput.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 35ebe488..cb7d383f 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -206,9 +206,12 @@ Rectangle { while (pos > -1) { var t = messageInput.getText(pos, pos + 1); console.log('"' + t + '"'); - if (t == '@' || t == ' ' || t == '\t') { + if (t == '@') { messageInput.openCompleter(pos, "user"); return ; + } else if (t == ' ' || t == '\t') { + messageInput.openCompleter(pos + 1, "user"); + return ; } else if (t == ':') { messageInput.openCompleter(pos, "emoji"); return ; From 5fbf17f6ec6a0a31fbb6ee874c56db507b02ffe9 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 20:29:06 +0100 Subject: [PATCH 14/37] Fix request key loops --- src/timeline/EventStore.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index b16bf1d2..4748f9c0 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -242,7 +242,9 @@ EventStore::receivedSessionKey(const std::string &session_id) return; auto request = pending_key_requests.at(session_id); - pending_key_requests.erase(session_id); + + // Don't request keys again until Nheko is restarted (for now) + pending_key_requests[session_id].events.clear(); olm::send_key_request_for(request.events.front(), request.request_id, true); @@ -778,7 +780,8 @@ EventStore::fetchMore() if (cache::client()->previousBatchToken(room_id_) != opts.from) { nhlog::net()->warn("Cache cleared while fetching more messages, dropping " "/messages response"); - emit fetchedMore(); + if (!opts.to.empty()) + emit fetchedMore(); return; } if (err) { From 50564985ccfd686dde6f74050c1c3890246bd141 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 21:30:06 +0100 Subject: [PATCH 15/37] Fix crash, when keys for no events were requested --- src/timeline/EventStore.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index 4748f9c0..be4bc09e 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -246,7 +246,8 @@ EventStore::receivedSessionKey(const std::string &session_id) // Don't request keys again until Nheko is restarted (for now) pending_key_requests[session_id].events.clear(); - olm::send_key_request_for(request.events.front(), request.request_id, true); + if (!request.events.empty()) + olm::send_key_request_for(request.events.front(), request.request_id, true); for (const auto &e : request.events) { auto idx = idToIndex(e.event_id); From 105e097e02b36be6ea07e4cd97908ea5a40aadbf Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 21:50:02 +0100 Subject: [PATCH 16/37] Update changelog --- CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f84fece..027f1f08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,43 @@ # Changelog +## [0.8.1] -- 2021-01-27 + +### Features + +- `/plain` and `/md` commands to override the current markdown setting. (contributed by lorendb) +- Allow persistent hiding of rooms with a specific tag (or from a community) via a context menu. +- Allow open media messages in an external program immediately. (contributed by rnhmjoj) + +### Improvements + +- Use async dbus connection for notifications. (contributed by lorendb) +- Update Hungarian translations. (contributed by maxigaz) +- Update Finnish translations. (contributed by Priit) +- Update Malayalam translations. (contributed by vachan-maker) +- Update Dutch translations. (contributed by Glael) +- Store splitter size across restarts. +- Add a border around the completer. (contributed by lorendb) +- Request keys for messages with unknown message indices (once per restart, when they are shown). +- Move the database location to XDG_DATA_DIR. (contributed by rnhmjoj) +- Reload the timeline after key backup import. +- Autoclose completer on `space`, when there are no matches. +- Make completer only react, when the mouse cursor is moved. + +### Bugfixes + +- Fix unhandled exception, when a device has no keys. +- Fix some cmake warnings regarding GNUInstallDirs. +- Fix tags being broken. If you have no tags showing up, you may want to logout and login again. +- Fix versionOk being called on the wrong thread. (contributed by Jedi18) +- Fix font tags showing up in media message filenames. +- Fix user profile in dark themes showing the wrong colors. (contributed by lorendb) +- Fix emoji category switching on old Qt versions. (contributed by lorendb) +- Fix old messages being replayed after a limited timeline. +- Fix empty secrets being returned from the wallet breaking verification. +- Make matrix link chat invites create a direct chat. +- Fix focus handling on room change or reply button clicks. +- Fix username completion deleting the character before it. + ## [0.8.0] -- 2021-01-21 ### Highlights From 1a2517e8292bbfc1302e8a0e99bb9d1294a468d1 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 22:13:06 +0100 Subject: [PATCH 17/37] Bump version to 0.8.1 --- CMakeLists.txt | 6 +++--- README.md | 2 +- appveyor.yml | 10 +++++----- io.github.NhekoReborn.Nheko.json | 3 ++- resources/nheko.appdata.xml | 1 + 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d93fb184..c9e29998 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,7 +81,7 @@ include(GNUInstallDirs) set(CPACK_PACKAGE_VERSION_MAJOR "0") set(CPACK_PACKAGE_VERSION_MINOR "8") -set(CPACK_PACKAGE_VERSION_PATCH "0") +set(CPACK_PACKAGE_VERSION_PATCH "1") set(PROJECT_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}) set(PROJECT_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR}) set(PROJECT_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH}) @@ -355,13 +355,13 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 1e97d3195d366a15a086ca451d082d59972105ba + GIT_TAG v0.4.1 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") FetchContent_MakeAvailable(MatrixClient) else() - find_package(MatrixClient 0.4.0 REQUIRED) + find_package(MatrixClient 0.4.1 REQUIRED) endif() if(USE_BUNDLED_OLM) include(FetchContent) diff --git a/README.md b/README.md index a1936ed4..a5982154 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ nheko ---- [![Build Status](https://nheko.im/nheko-reborn/nheko/badges/master/pipeline.svg)](https://nheko.im/nheko-reborn/nheko/-/pipelines/latest) [![Build status](https://ci.appveyor.com/api/projects/status/07qrqbfylsg4hw2h/branch/master?svg=true)](https://ci.appveyor.com/project/redsky17/nheko/branch/master) -[![Stable Version](https://img.shields.io/badge/download-stable-green.svg)](https://github.com/Nheko-Reborn/nheko/releases/v0.8.0) +[![Stable Version](https://img.shields.io/badge/download-stable-green.svg)](https://github.com/Nheko-Reborn/nheko/releases/v0.8.1) [![Nightly](https://img.shields.io/badge/download-nightly-green.svg)](https://matrix-static.neko.dev/room/!TshDrgpBNBDmfDeEGN:neko.dev/) [![#nheko-reborn:matrix.org](https://img.shields.io/matrix/nheko-reborn:matrix.org.svg?label=%23nheko-reborn:matrix.org)](https://matrix.to/#/#nheko-reborn:matrix.org) [![AUR: nheko](https://img.shields.io/badge/AUR-nheko-blue.svg)](https://aur.archlinux.org/packages/nheko) diff --git a/appveyor.yml b/appveyor.yml index 87d80d2a..8d1e71a5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -30,8 +30,8 @@ build_script: # VERSION format: branch-master/branch-1.2 # INSTVERSION format: x.y.z # WINVERSION format: 9999.0.0.123/1.2.0.234 - - if "%APPVEYOR_REPO_TAG%"=="false" set INSTVERSION=0.8.0 - - if "%APPVEYOR_REPO_TAG%"=="false" set VERSION=0.8.0 + - if "%APPVEYOR_REPO_TAG%"=="false" set INSTVERSION=0.8.1 + - if "%APPVEYOR_REPO_TAG%"=="false" set VERSION=0.8.1 - if "%APPVEYOR_REPO_TAG%"=="false" if "%APPVEYOR_REPO_BRANCH%"=="master" set INSTVERSION=9999.0 - if "%APPVEYOR_REPO_TAG%"=="false" set WINVERSION=%INSTVERSION%.0.%APPVEYOR_BUILD_NUMBER% # VERSION format: v1.2.3/v1.3.4 @@ -90,9 +90,9 @@ after_build: - copy %BUILD%\deploy\installer\cleanup\package.xml installer\packages\io.github.nhekoreborn.nheko.cleanup\meta - copy %BUILD%\deploy\installer\cleanup\installscript.qs installer\packages\io.github.nhekoreborn.nheko.cleanup\meta # Amend version and date - - sed -i "s/__VERSION__/0.8.0/" installer\config\config.xml - - sed -i "s/__VERSION__/0.8.0/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml - - sed -i "s/__VERSION__/0.8.0/" installer\packages\io.github.nhekoreborn.nheko.cleanup\meta\package.xml + - sed -i "s/__VERSION__/0.8.1/" installer\config\config.xml + - sed -i "s/__VERSION__/0.8.1/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml + - sed -i "s/__VERSION__/0.8.1/" installer\packages\io.github.nhekoreborn.nheko.cleanup\meta\package.xml - sed -i "s/__DATE__/%DATE%/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml - sed -i "s/__DATE__/%DATE%/" installer\packages\io.github.nhekoreborn.nheko.cleanup\meta\package.xml # Copy nheko data diff --git a/io.github.NhekoReborn.Nheko.json b/io.github.NhekoReborn.Nheko.json index fb921f65..e6eeb123 100644 --- a/io.github.NhekoReborn.Nheko.json +++ b/io.github.NhekoReborn.Nheko.json @@ -220,7 +220,8 @@ "name": "mtxclient", "sources": [ { - "commit": "1e97d3195d366a15a086ca451d082d59972105ba", + "commit": "4951190c938740defa0988d98d5e861038622936", + "tag": "v0.4.1", "type": "git", "url": "https://github.com/Nheko-Reborn/mtxclient.git" } diff --git a/resources/nheko.appdata.xml b/resources/nheko.appdata.xml index 1352bb76..5e51abd4 100644 --- a/resources/nheko.appdata.xml +++ b/resources/nheko.appdata.xml @@ -43,6 +43,7 @@ https://github.com/Nheko-Reborn/nheko https://github.com/Nheko-Reborn + From 12bc7d41319550133eea0763045b7b82e3144069 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 27 Jan 2021 22:30:04 -0500 Subject: [PATCH 18/37] Translated using Weblate (Estonian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (442 of 442 strings) Co-authored-by: Priit Jõerüüt Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/et/ Translation: Nheko/nheko --- resources/langs/nheko_et.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 8ee9bf5b..e3b46f95 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -612,7 +612,7 @@ Kui Nheko ei suuda tuvastada sinu koduserverit, siis ta kuvab sulle andmevälja Your password. - + Sinu salasõna. @@ -627,12 +627,12 @@ Kui Nheko ei suuda tuvastada sinu koduserverit, siis ta kuvab sulle andmevälja Homeserver address - + Koduserveri aadress server.my:8787 - + server.minu:8787 @@ -653,7 +653,7 @@ Näiteks: https://server.minu:8787 You have entered an invalid Matrix ID e.g @joe:matrix.org - + Sisestatud Matrix'i kasutajatunnus on vigane - peaks olema @kasutaja:server.tld From cd998d1c35d9d65aa04ca64f0f94f34a57db8335 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Sat, 16 Jan 2021 15:33:33 -0500 Subject: [PATCH 19/37] Center user info dialog on the screen --- resources/qml/UserProfile.qml | 2 ++ src/MainWindow.h | 7 ++++++- src/timeline/TimelineViewManager.cpp | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml index 8328f4a5..fce6e6ff 100644 --- a/resources/qml/UserProfile.qml +++ b/resources/qml/UserProfile.qml @@ -10,6 +10,8 @@ ApplicationWindow { property var profile + x: MainWindow.x + (MainWindow.width / 2) - (width / 2) + y: MainWindow.y + (MainWindow.height / 2) - (height / 2) height: 650 width: 420 minimumHeight: 420 diff --git a/src/MainWindow.h b/src/MainWindow.h index 0915a849..707118ed 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -61,10 +61,15 @@ class MainWindow : public QMainWindow { Q_OBJECT + Q_PROPERTY(int x READ x) + Q_PROPERTY(int y READ y) + Q_PROPERTY(int width READ width) + Q_PROPERTY(int height READ height) + public: explicit MainWindow(QWidget *parent = nullptr); - static MainWindow *instance() { return instance_; }; + static MainWindow *instance() { return instance_; } void saveCurrentWindowSize(); void openLeaveRoomDialog(const QString &room_id); diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 97af0065..1317dc2a 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -128,6 +128,10 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par "UserProfile needs to be instantiated on the C++ side"); static auto self = this; + qmlRegisterSingletonType( + "im.nheko", 1, 0, "MainWindow", [](QQmlEngine *, QJSEngine *) -> QObject * { + return MainWindow::instance(); + }); qmlRegisterSingletonType( "im.nheko", 1, 0, "TimelineManager", [](QQmlEngine *, QJSEngine *) -> QObject * { return self; From d8ebc0b3dcdc988cb8c5ee495072272a1bdb28ca Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Fri, 29 Jan 2021 17:34:56 -0500 Subject: [PATCH 20/37] Fix warning about non-NOTIFYable property --- src/MainWindow.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/MainWindow.h b/src/MainWindow.h index 707118ed..4c365dca 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -61,10 +61,10 @@ class MainWindow : public QMainWindow { Q_OBJECT - Q_PROPERTY(int x READ x) - Q_PROPERTY(int y READ y) - Q_PROPERTY(int width READ width) - Q_PROPERTY(int height READ height) + Q_PROPERTY(int x READ x CONSTANT) + Q_PROPERTY(int y READ y CONSTANT) + Q_PROPERTY(int width READ width CONSTANT) + Q_PROPERTY(int height READ height CONSTANT) public: explicit MainWindow(QWidget *parent = nullptr); From c3fa59201892aab9b109e051d12b809a8e6f291a Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Fri, 29 Jan 2021 18:17:44 -0500 Subject: [PATCH 21/37] make lint --- src/timeline/TimelineViewManager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 1317dc2a..93451976 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -129,9 +129,9 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par static auto self = this; qmlRegisterSingletonType( - "im.nheko", 1, 0, "MainWindow", [](QQmlEngine *, QJSEngine *) -> QObject * { - return MainWindow::instance(); - }); + "im.nheko", 1, 0, "MainWindow", [](QQmlEngine *, QJSEngine *) -> QObject * { + return MainWindow::instance(); + }); qmlRegisterSingletonType( "im.nheko", 1, 0, "TimelineManager", [](QQmlEngine *, QJSEngine *) -> QObject * { return self; From 58dc79074c3fc8f94857af128c1021486deb22e2 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Fri, 29 Jan 2021 18:18:39 -0500 Subject: [PATCH 22/37] Close user profile dialog on Esc --- resources/qml/UserProfile.qml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml index fce6e6ff..a1fbfa41 100644 --- a/resources/qml/UserProfile.qml +++ b/resources/qml/UserProfile.qml @@ -18,6 +18,11 @@ ApplicationWindow { palette: colors color: colors.window + Shortcut { + sequence: StandardKey.Cancel + onActivated: userProfileDialog.close() + } + ColumnLayout { id: contentL From 9709d6af165c31ed0fd4fff2be00708fd7b3205c Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 29 Jan 2021 20:21:16 -0500 Subject: [PATCH 23/37] Translated using Weblate (Hungarian) Currently translated at 71.7% (317 of 442 strings) Co-authored-by: maxigaz Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/hu/ Translation: Nheko/nheko --- resources/langs/nheko_hu.ts | 98 ++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index f05b5aee..55f1d556 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -274,7 +274,7 @@ Failed to kick %1 from %2: %3 - + Nem sikerült kirúgni %1 felhasználót %2 szobából: %3 @@ -282,7 +282,7 @@ Hide rooms with this tag or from this community - + Az ilyen címkével ellátott vagy közösséghez tartozó szobák elrejtése @@ -488,7 +488,7 @@ -- Encrypted Event (Key not valid for this index) -- Placeholder, when the message can't be decrypted with this key since it is not valid for this index - + -- Titkosított esemény (a kulcs nem érvényes ehhez az indexhez) -- @@ -612,7 +612,7 @@ Ha a Nheko nem tud rátalálni a homeszerveredre, meg fog jelenni egy mező, aho Your password. - + A jelszavad. @@ -627,12 +627,12 @@ Ha a Nheko nem tud rátalálni a homeszerveredre, meg fog jelenni egy mező, aho Homeserver address - + Homeszerver címe server.my:8787 - + szerver.em:8787 @@ -653,7 +653,7 @@ Példa: https://szerver.em:8787 You have entered an invalid Matrix ID e.g @joe:matrix.org - + Érvénytelen Matrixazonosítót adtál meg. Példa: @janos:matrix.org @@ -1391,7 +1391,7 @@ Példa: https://szerver.em:8787 Open in external program - + Megnyitás külső programban @@ -1517,12 +1517,12 @@ Példa: https://szerver.em:8787 Start a private chat - + Privát csevegés indítása Kick the user - + A felhasználó kirúgása @@ -1530,185 +1530,193 @@ Példa: https://szerver.em:8787 Minimize to tray - + Kicsinyítés a tálcára Start in tray - + Indítás a tálcán Group's sidebar - + Csoport oldalsávja Circular Avatars - + Kerekített profilképek profile: %1 - + profil: %1 CALLS - + HÍVÁSOK Cross Signing Keys - + Keresztaláírási kulcsok REQUEST - + LEKÉRÉS DOWNLOAD - + LETÖLTÉS Keep the application running in the background after closing the client window. - + Az alkalmazás azután is a háttérben fut, miután be lett zárva a főablak. Start the application in the background without showing the client window. - + Induljon az alkalmazás a háttérben, a főablak mutatása nélkül. Change the appearance of user avatars in chats. OFF - square, ON - Circle. - + A profilképek megjelenése a csevegésekben. +KI - szögletes, BE - kerek. Show a column containing groups and tags next to the room list. - + Csoportok és címkék megjelenítése a szobák listája mellett egy oszlopban. Decrypt messages in sidebar - + Titkosított üzenetek mutatása az oldalsávban Decrypt the messages shown in the sidebar. Only affects messages in encrypted chats. - + Legyenek feloldva az oldalsávban megjelenő üzenetek. +Csak a titkosított csevegések üzeneteire vonatkozik. Show buttons in timeline - + Gombok mutatása az idővonalban Show buttons to quickly reply, react or access additional options next to each message. - + Gombok mutatása minden egyes üzenet mellett a gyors válaszhoz, reakcióhoz és egyéb műveletek eléréséhez. Limit width of timeline - + Az idővonal szélességének korlátozása Set the max width of messages in the timeline (in pixels). This can help readability on wide screen, when Nheko is maximised - + Az idővonalon megjelenő üzenetek maximális szélességének megadása (pixelben). Ez javíthatja az olvashatóságot, amikor a Nheko teljes méretben van széles képernyőkön. Typing notifications - + Gépelési értesítések Show who is typing in a room. This will also enable or disable sending typing notifications to others. - + Legyen mutatva, hogy éppen ki gépel egy szobában. +Ez be vagy ki is kapcsolja a gépelési értesítések küldését másoknak. Sort rooms by unreads - + Szobák sorrendje olvasatlan üzenetek alapján Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms, that you have muted, will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms. - + Az új üzeneteket tartalmazó szobák jelenjenek meg elöl. +Ha ki van kapcsolva, a szobák sorrendje csak a bennük lévő utolsó üzenet dátuma alapján történik. +Ha be van kapcsolva, azok a szobák kerülnek felülre, amelyekhez aktív értesítés tartozik (amelyet a számot tartalmazó kis kör jelez). A némított szobák továbbra is dátum alapján lesznek rendezve, mivel nem valószínű, hogy ezeket annyira fontosnak tartod, mint a többi szobát. Read receipts - Olvasási jegyek + Olvasási jegyek Show if your message was read. Status is displayed next to timestamps. - + Legyen mutatva, ha az üzenetedet elolvasták. +Ez az állapot az üzenetek ideje mellett jelenik meg. Send messages as Markdown - + Üzenetek küldése Markdownként Allow using markdown in messages. When disabled, all messages are sent as a plain text. - + A Markdown használatának engedélyezése az üzenetekben. +Ha ki van kapcsolva, az összes üzenet sima szövegként lesz elküldve. Desktop notifications - + Asztali értesítések Notify about received message when the client is not currently focused. - + Értesítések az érkezett üzenetekről, amikor a főablak éppen nincs fókuszban. Alert on notification - + Riasztás értesítéskor Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Riasztás megjelenítése, ha üzenet érkezett. +Ettől általában animálttá válik az alkalmazásablakok listáján szereplő ikon. Highlight message on hover - + Üzenetek kiemelése, ha az egérmutató rajtuk van Change the background color of messages when you hover over them. - + Az üzenetek háttérszínének megváltoztatása, ha az egérmutatót föléjük viszed. Large Emoji in timeline - + Hatalmas hangulatjelek az idővonalon Make font size larger if messages with only a few emojis are displayed. - + A betűméret megnövelése, ha az üzenetek csak néhány hangulatjelet tartalmaznak. From f5693b56f02715f1b9306ec842ac9d57513cf19a Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 29 Jan 2021 20:21:16 -0500 Subject: [PATCH 24/37] Translated using Weblate (Russian) Currently translated at 84.6% (374 of 442 strings) Translated using Weblate (Russian) Currently translated at 84.6% (374 of 442 strings) Co-authored-by: Alexey Murz Korepov Co-authored-by: Artem Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/ru/ Translation: Nheko/nheko --- resources/langs/nheko_ru.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index 716c1657..21b31b33 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -6,18 +6,18 @@ Calling... - + Вызов... Connecting... - + Соединение... Toggle camera view - + Сменить вид камеры @@ -61,17 +61,17 @@ Video Call - Видео Звонок + Видео Звонок Voice Call - Голосовой Звонок + Голосовой Звонок No microphone found. - Микрофон не найден. + Микрофон не найден. From 50e2b5617fc38381505e68e178e6784ca309d629 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 31 Jan 2021 20:21:11 -0500 Subject: [PATCH 25/37] Translated using Weblate (Hungarian) Currently translated at 81.2% (359 of 442 strings) Co-authored-by: maxigaz Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/hu/ Translation: Nheko/nheko --- resources/langs/nheko_hu.ts | 84 ++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index 55f1d556..acf5865f 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -1721,162 +1721,162 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő Share keys with verified users and devices - + Kulcsok megosztása hitelesített felhasználókkal és eszközökkel CACHED - + GYORSÍTÓTÁRAZVA NOT CACHED - + NINCS GYORSÍTÓTÁRAZVA Scale factor - + Nagyítási tényező Change the scale factor of the whole user interface. - + Az egész felhasználói felület méretének szorzótényezője. Font size - + Betűméret Font Family - + Betűtípus Theme - + Téma Ringtone - + Csengőhang Set the notification sound to play when a call invite arrives - + Az értesítőhang megadása, amely akkor szól, ha hívás érkezik Microphone - + Mikrofon Camera - + Kamera Camera resolution - + Kamerafelbontás Camera frame rate - + Kamera képkockasebessége Allow fallback call assist server - + Tartalék hívássegéd szerver engedélyezése Will use turn.matrix.org as assist when your home server does not offer one. - + A turn.matrix.org lesz használva segédnek, ha a homeszerverednek nincs ilyenje. Device ID - + Eszközazonosító Device Fingerprint - + Eszközujjlenyomat Session Keys - + Munkamenetkulcsok IMPORT - + IMPORTÁLÁS EXPORT - + EXPORTÁLÁS ENCRYPTION - + TITKOSÍTÁS GENERAL - + ÁLTALÁNOS INTERFACE - + FELÜLET Touchscreen mode - + Érintő képernyős mód Will prevent text selection in the timeline to make touch scrolling easier. - + Letiltja a szövegkiemelést az idővonalban, hogy könyebb legyen érintéssel görgetni. Emoji Font Family - + Hangulatjelek betűtípusa Automatically replies to key requests from other users, if they are verified. - + Automatikus válasz a más felhasználóktól érkező kulcskérelmekre, ha ők hitelesítve vannak. Master signing key - + Mester-aláírókulcs Your most important key. You don't need to have it cached, since not caching it makes it less likely it can be stolen and it is only needed to rotate your other signing keys. - + A legfontosabb kulcsod. Nem kell gyorsítótáraznod, mivel így kisebb az esélye, hogy ellopják, és csak arra van használva, hogy a többi aláíró kulcsaid váltakozva legyenek. User signing key - + Felhasználói aláírókulcs The key to verify other users. If it is cached, verifying a user will verify all their devices. - + A mások hitelesítésére használt kulcs. Ha gyorsítótárazva van, egy felhasználó hitelesítésekor hitelesítve lesz az összes eszköze. @@ -1901,12 +1901,12 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő Select a file - Fájl kiválasztása + Fájl kiválasztása All Files (*) - Minden fájl (*) + Minden fájl (*) @@ -1994,12 +1994,12 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő REGISTER - REGISZTRÁCIÓ + REGISZTRÁCIÓ LOGIN - BEJELENTKEZÉS + BEJELENTKEZÉS @@ -2025,12 +2025,12 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő Name - Név + Név Topic - Téma + Téma @@ -2176,12 +2176,12 @@ Media size: %2 Read receipts - Olvasási jegyek + Olvasási jegyek Close - Bezárás + Bezárás @@ -2202,7 +2202,7 @@ Media size: %2 Settings - Beállítások + Beállítások @@ -2306,7 +2306,7 @@ Media size: %2 All Files (*) - Minden fájl (*) + Minden fájl (*) From 48740065016b7312b7bb1b8e6d944046d47329ad Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 1 Feb 2021 21:53:04 +0100 Subject: [PATCH 26/37] Fix emojis with fe0f in the middle --- src/Utils.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Utils.cpp b/src/Utils.cpp index 3bb090df..5af5748e 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -55,8 +55,7 @@ utils::codepointIsEmoji(uint code) { // TODO: Be more precise here. return (code >= 0x2600 && code <= 0x27bf) || (code >= 0x2b00 && code <= 0x2bff) || - (code >= 0x1f300 && code <= 0x1f3ff) || (code >= 0x1f000 && code <= 0x1faff) || - code == 0x200d; + (code >= 0x1f000 && code <= 0x1faff) || code == 0x200d || code == 0xfe0f; } QString From d59910a8f298b13cc90e436a6f6efa325d863180 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Mon, 1 Feb 2021 18:42:18 -0500 Subject: [PATCH 27/37] Remove redundant import and fix visible warning --- resources/qml/PrivacyScreen.qml | 10 ++++++---- resources/qml/TimelineView.qml | 1 - 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index 45ae5cb5..14a175f9 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -29,10 +29,12 @@ Item { interval: screenTimeout * 1000 running: true onTriggered: { - timelineRoot.grabToImage(function(result) { - screenSaver.state = "Visible"; - imageSource = result.url; - }, Qt.size(width, height)); + if (MainWindow.visible) { + timelineRoot.grabToImage(function(result) { + screenSaver.state = "Visible"; + imageSource = result.url; + }, Qt.size(width, height)); + } } } diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 35d09d5a..379b19fb 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -1,4 +1,3 @@ -import "." import "./delegates" import "./device-verification" import "./emoji" From 1127aa7c91718ceec82ac0a775935b62b5220724 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Mon, 1 Feb 2021 18:57:59 -0500 Subject: [PATCH 28/37] Small UX fixes --- resources/qml/PrivacyScreen.qml | 4 +++- src/MainWindow.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index 14a175f9..f3e388ce 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -18,7 +18,9 @@ Item { screenSaverTimer.stop(); screenSaver.state = "Invisible"; } else { - screenSaverTimer.start(); + if (timelineRoot.visible) { + screenSaverTimer.start(); + } } } } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 8fd5c7e2..ab3c2cf2 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -59,6 +59,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , userSettings_{UserSettings::instance()} { + instance_ = this; + setWindowTitle(0); setObjectName("MainWindow"); @@ -312,8 +314,6 @@ MainWindow::showChatPage() &Cache::secretChanged, userSettingsPage_, &UserSettingsPage::updateSecretStatus); - - instance_ = this; } void From 00885e41f87e954a8f0a1e4172821cf5e6ed9625 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Mon, 1 Feb 2021 19:07:04 -0500 Subject: [PATCH 29/37] Update wording on settings page for privacy timer --- src/UserSettingsPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 61b04074..96c07d7c 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -849,7 +849,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge privacyScreen_, tr("When the window loses focus, the timeline will\nbe blurred.")); boxWrap( - tr("Privacy screen timeout"), + tr("Privacy screen timeout (in seconds [0 - 3600])"), privacyScreenTimeout_, tr("Set timeout (in seconds) for how long after window loses\nfocus before the screen" " will be blurred.\nSet to 0 to blur immediately after focus loss. Max value of 1 " From 1c3e113d4e9988243a810262ceeef2ad3a3e0fd3 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Mon, 1 Feb 2021 19:38:52 -0500 Subject: [PATCH 30/37] Allow drag/drop of files on whole timeline --- resources/qml/MessageInput.qml | 6 ------ resources/qml/TimelineView.qml | 5 ++++- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index cb7d383f..4c73f28b 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -273,12 +273,6 @@ Rectangle { cursorShape: Qt.IBeamCursor onClicked: TimelineManager.timeline.input.paste(true) } - - NhekoDropArea { - anchors.fill: parent - roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : "" - } - } ScrollBar.vertical: ScrollBar { diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index a2b56b9a..2c8fb4fa 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -276,8 +276,11 @@ Page { MessageInput { } + NhekoDropArea { + anchors.fill: parent + roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : "" + } } - } systemInactive: SystemPalette { From 08dbdac3b747bd71f1c38c5f5d68cd443ae1f1b2 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Mon, 1 Feb 2021 21:02:27 -0500 Subject: [PATCH 31/37] Change bash variable check --- .ci/format.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/format.sh b/.ci/format.sh index 4df4282a..f2d01cec 100755 --- a/.ci/format.sh +++ b/.ci/format.sh @@ -15,7 +15,7 @@ do done; QMLFORMAT_PATH=$(which qmlformat) -if [ ! -z "$QMLFORMAT_PATH" ]; then +if [ -n "$QMLFORMAT_PATH" ]; then QML_FILES=$(find resources -type f -iname "*.qml") for f in $QML_FILES From 2bfd44755ea9c18ee9fc48e775b97f0363c9acd4 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Tue, 2 Feb 2021 11:37:10 -0500 Subject: [PATCH 32/37] Try to fix format script and fix linting --- .ci/format.sh | 4 ++-- resources/qml/PrivacyScreen.qml | 8 ++++---- resources/qml/UserProfile.qml | 17 ++++++++--------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.ci/format.sh b/.ci/format.sh index f2d01cec..31eba878 100755 --- a/.ci/format.sh +++ b/.ci/format.sh @@ -14,13 +14,13 @@ do clang-format -i "$f" done; -QMLFORMAT_PATH=$(which qmlformat) +QMLFORMAT_PATH=$(command -v qmlformat) if [ -n "$QMLFORMAT_PATH" ]; then QML_FILES=$(find resources -type f -iname "*.qml") for f in $QML_FILES do - qmlformat -i "$f" + $QMLFORMAT_PATH -i "$f" done; else echo "qmlformat not found; skipping qml formatting" diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index f3e388ce..98c802a0 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -18,9 +18,9 @@ Item { screenSaverTimer.stop(); screenSaver.state = "Invisible"; } else { - if (timelineRoot.visible) { + if (timelineRoot.visible) screenSaverTimer.start(); - } + } } } @@ -31,12 +31,12 @@ Item { interval: screenTimeout * 1000 running: true onTriggered: { - if (MainWindow.visible) { + if (MainWindow.visible) timelineRoot.grabToImage(function(result) { screenSaver.state = "Visible"; imageSource = result.url; }, Qt.size(width, height)); - } + } } diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml index 4cb9eb10..4a402b69 100644 --- a/resources/qml/UserProfile.qml +++ b/resources/qml/UserProfile.qml @@ -53,10 +53,9 @@ ApplicationWindow { font.bold: true Layout.alignment: Qt.AlignHCenter selectByMouse: true - onAccepted: { - profile.changeUsername(displayUsername.text) - displayUsername.isUsernameEditingAllowed = false + profile.changeUsername(displayUsername.text); + displayUsername.isUsernameEditingAllowed = false; } ImageButton { @@ -65,18 +64,18 @@ ApplicationWindow { anchors.left: displayUsername.right anchors.verticalCenter: displayUsername.verticalCenter image: displayUsername.isUsernameEditingAllowed ? ":/icons/icons/ui/checkmark.png" : ":/icons/icons/ui/edit.png" - onClicked: { if (displayUsername.isUsernameEditingAllowed) { - profile.changeUsername(displayUsername.text) - displayUsername.isUsernameEditingAllowed = false + profile.changeUsername(displayUsername.text); + displayUsername.isUsernameEditingAllowed = false; } else { - displayUsername.isUsernameEditingAllowed = true - displayUsername.focus = true - displayUsername.selectAll() + displayUsername.isUsernameEditingAllowed = true; + displayUsername.focus = true; + displayUsername.selectAll(); } } } + } MatrixText { From 2a858d84e22c3813a380d4ff3e838cd0093955a0 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Tue, 2 Feb 2021 11:50:57 -0500 Subject: [PATCH 33/37] Update format script again --- .ci/format.sh | 3 ++- resources/qml/PrivacyScreen.qml | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.ci/format.sh b/.ci/format.sh index 31eba878..cdbc0464 100755 --- a/.ci/format.sh +++ b/.ci/format.sh @@ -14,7 +14,8 @@ do clang-format -i "$f" done; -QMLFORMAT_PATH=$(command -v qmlformat) +QMLFORMAT_PATH=$(command -v qmlformat || true) + if [ -n "$QMLFORMAT_PATH" ]; then QML_FILES=$(find resources -type f -iname "*.qml") diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index 98c802a0..2cfae471 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -33,9 +33,9 @@ Item { onTriggered: { if (MainWindow.visible) timelineRoot.grabToImage(function(result) { - screenSaver.state = "Visible"; - imageSource = result.url; - }, Qt.size(width, height)); + screenSaver.state = "Visible"; + imageSource = result.url; + }, Qt.size(width, height)); } } From 935abee62e7165debd05e521244934a648e0d7c9 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 2 Feb 2021 12:57:21 -0500 Subject: [PATCH 34/37] Fix unused capture warning --- src/ui/UserProfile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp index 3872294a..de02bf5e 100644 --- a/src/ui/UserProfile.cpp +++ b/src/ui/UserProfile.cpp @@ -244,7 +244,7 @@ UserProfile::changeUsername(QString username) if (isGlobalUserProfile()) { // change global http::client()->set_displayname( - username.toStdString(), [this](mtx::http::RequestErr err) { + username.toStdString(), [](mtx::http::RequestErr err) { if (err) { nhlog::net()->warn("could not change username"); return; @@ -293,4 +293,4 @@ UserProfile::setGlobalUsername(const QString &globalUser) { globalUsername = globalUser; emit displayNameChanged(); -} \ No newline at end of file +} From e466cd10ff84abac72346b5d41f5bf568012bad8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 2 Feb 2021 00:30:37 +0100 Subject: [PATCH 35/37] Change matrix to guru overlay fixes #410 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5982154..be7d076f 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ sudo dnf install nheko #### Gentoo Linux ```bash -sudo eselect repository enable matrix +sudo eselect repository enable guru sudo emerge -a nheko ``` From 5109dc5e0f27d7b93c8242d464035fbc044ca445 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Tue, 2 Feb 2021 19:30:03 -0500 Subject: [PATCH 36/37] Fix QML layout warnings --- resources/qml/TimelineView.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 527e6cb1..9fa2139e 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -277,11 +277,11 @@ Page { MessageInput { } + } - NhekoDropArea { - anchors.fill: parent - roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : "" - } + NhekoDropArea { + anchors.fill: timelineLayout + roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : "" } PrivacyScreen { From 3433cc3be7d0e9038017f3d1e2ecd53e830b6073 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 3 Feb 2021 03:12:08 +0100 Subject: [PATCH 37/37] Cleanup privacy screen, no more grabImage --- resources/qml/MessageInput.qml | 1 + resources/qml/PrivacyScreen.qml | 33 ++++----------------------------- resources/qml/TimelineView.qml | 14 ++++++++------ 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 4c73f28b..5d335872 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -273,6 +273,7 @@ Rectangle { cursorShape: Qt.IBeamCursor onClicked: TimelineManager.timeline.input.paste(true) } + } ScrollBar.vertical: ScrollBar { diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index 2cfae471..76520706 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -6,11 +6,8 @@ Item { id: privacyScreen property var timelineRoot - property var imageSource: "" property int screenTimeout - anchors.fill: parent - Connections { target: TimelineManager onFocusChanged: { @@ -31,22 +28,16 @@ Item { interval: screenTimeout * 1000 running: true onTriggered: { - if (MainWindow.visible) - timelineRoot.grabToImage(function(result) { - screenSaver.state = "Visible"; - imageSource = result.url; - }, Qt.size(width, height)); - + screenSaver.state = "Visible"; } } - Rectangle { + Item { id: screenSaver state: "Invisible" anchors.fill: parent visible: false - color: "transparent" states: [ State { name: "Visible" @@ -122,27 +113,11 @@ Item { } ] - Image { - id: image - - cache: false - anchors.fill: parent - source: imageSource - } - - ShaderEffectSource { - id: effectSource - - sourceItem: image - anchors.fill: image - sourceRect: Qt.rect(0, 0, width, height) - } - FastBlur { id: blur - anchors.fill: effectSource - source: effectSource + anchors.fill: parent + source: timelineRoot radius: 50 } diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 9fa2139e..c03e8d31 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -277,19 +277,21 @@ Page { MessageInput { } + } NhekoDropArea { - anchors.fill: timelineLayout + anchors.fill: parent roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : "" } - PrivacyScreen { - visible: Settings.privacyScreen - screenTimeout: Settings.privacyScreenTimeout - timelineRoot: timelineRoot - } + } + PrivacyScreen { + anchors.fill: parent + visible: Settings.privacyScreen + screenTimeout: Settings.privacyScreenTimeout + timelineRoot: timelineLayout } systemInactive: SystemPalette {