From e9a0f0a89e87b8cb01f1fdfc0990c4ad23660cbe Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 22 Oct 2022 21:39:29 +0200 Subject: [PATCH 01/84] Fix previews getting sorted above normal rooms --- src/timeline/RoomlistModel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index 181c2136..82b3fc3d 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -796,9 +796,9 @@ RoomlistModel::setCurrentRoom(const QString &roomid) namespace { enum NotificationImportance : short { - ImportanceDisabled = -3, - NoPreview = -2, - Preview = -1, + NoPreview = -3, + Preview = -2, + ImportanceDisabled = -1, AllEventsRead = 0, NewMessage = 1, NewMentions = 2, From ccd2465066a3e7ff386d7740c42a5c0f6f72ef6a Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 24 Oct 2022 01:13:51 +0200 Subject: [PATCH 02/84] Fix windows build... --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a11a187..2b456b1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -593,7 +593,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG e139f8b98fb2cfb0d89b44b63af86d037c2f2c55 + GIT_TAG b19b81ce6a1cc792908ad900f23c80c6505ca357 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index c2c8e5fa..60ad7b1f 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: e139f8b98fb2cfb0d89b44b63af86d037c2f2c55 + - commit: b19b81ce6a1cc792908ad900f23c80c6505ca357 #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git From f3ecef5cd78d630d3e4c82ffa7cd23c86fa6138a Mon Sep 17 00:00:00 2001 From: foxb612 Date: Mon, 24 Oct 2022 23:31:15 +0800 Subject: [PATCH 03/84] Fix UploadBox thumbnail size --- resources/qml/UploadBox.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/qml/UploadBox.qml b/resources/qml/UploadBox.qml index ba00f205..ccd59f45 100644 --- a/resources/qml/UploadBox.qml +++ b/resources/qml/UploadBox.qml @@ -48,8 +48,8 @@ Page { Layout.fillHeight: true Layout.fillWidth: true - sourceSize.height: height - sourceSize.width: width + sourceSize.height: parent.availableHeight - namefield.height + sourceSize.width: parent.availableWidth fillMode: Image.PreserveAspectFit smooth: true mipmap: true @@ -63,6 +63,7 @@ Page { source: (modelData.thumbnail != "") ? modelData.thumbnail : ("image://colorimage/:/icons/icons/ui/"+typeStr+".svg?" + Nheko.colors.buttonText) } MatrixTextField { + id: namefield Layout.fillWidth: true text: modelData.filename onTextEdited: modelData.filename = text From 3109508e85666eb1932d6b82f858ea5b5f5d60e3 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 24 Oct 2022 23:22:12 -0400 Subject: [PATCH 04/84] Translated using Weblate (Estonian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 92.0% (787 of 855 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 6a007c36..26c1263a 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -1896,7 +1896,7 @@ Example: https://server.my:8787 Failed to update powerlevel: %1 - Õiguste muutmine ei õnnestunud: %1 + Õiguste muutmine ei õnnestunud: %1 From b28fa86e6ab633b2d3d9bfdb4642c661ff8c45fc Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 26 Oct 2022 01:10:35 +0200 Subject: [PATCH 05/84] Enable -Wconversion --- CMakeLists.txt | 1 + src/AliasEditModel.cpp | 6 +-- src/Cache.cpp | 6 +-- src/CacheCryptoStructs.h | 4 +- src/CacheStructs.h | 4 +- src/ChatPage.cpp | 10 +++-- src/JdenticonProvider.cpp | 3 +- src/MxcImageProvider.cpp | 5 ++- src/ReadReceiptsModel.cpp | 5 ++- src/Utils.cpp | 62 ++++++++++++++++++------------- src/dbus/NhekoDBusApi.cpp | 2 +- src/encryption/Olm.cpp | 2 +- src/main.cpp | 2 +- src/timeline/CommunitiesModel.cpp | 3 +- src/timeline/Permissions.cpp | 12 +++--- src/timeline/TimelineModel.cpp | 6 +-- src/timeline/TimelineModel.h | 2 +- src/ui/MxcAnimatedImage.cpp | 2 +- src/ui/MxcMediaProxy.cpp | 2 +- src/ui/RoomSettings.cpp | 5 ++- src/voip/CallManager.cpp | 10 +++-- src/voip/WebRTCSession.cpp | 12 ++++-- third_party/blurhash/blurhash.cpp | 14 +++---- 23 files changed, 102 insertions(+), 78 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b456b1a..ef8d52bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -275,6 +275,7 @@ if(NOT MSVC) "${CMAKE_CXX_FLAGS} \ -Wall \ -Wextra \ + -Wconversion \ -pedantic \ -fsized-deallocation \ -fdiagnostics-color=always \ diff --git a/src/AliasEditModel.cpp b/src/AliasEditModel.cpp index aee42dd1..3f24a7c5 100644 --- a/src/AliasEditModel.cpp +++ b/src/AliasEditModel.cpp @@ -191,7 +191,7 @@ AliasEditingModel::makeCanonical(int row) auto moveAlias = aliases.at(row).alias; if (!aliasEvent.alias.empty()) { - for (qsizetype i = 0; i < aliases.size(); i++) { + for (int i = 0; i < aliases.size(); i++) { if (moveAlias == aliases[i].alias) { if (aliases[i].canonical) { aliases[i].canonical = false; @@ -286,7 +286,7 @@ AliasEditingModel::toggleAdvertize(int row) void AliasEditingModel::updateAlias(std::string alias, std::string target) { - for (qsizetype i = 0; i < aliases.size(); i++) { + for (int i = 0; i < aliases.size(); i++) { auto &e = aliases[i]; if (e.alias == alias) { e.published = (target == room_id); @@ -300,7 +300,7 @@ AliasEditingModel::updatePublishedAliases(std::vector advAliases) { for (const auto &advAlias : advAliases) { bool found = false; - for (qsizetype i = 0; i < aliases.size(); i++) { + for (int i = 0; i < aliases.size(); i++) { auto &alias = aliases[i]; if (alias.alias == advAlias) { alias.published = true; diff --git a/src/Cache.cpp b/src/Cache.cpp index a83b73f7..4f1fed1c 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -3777,9 +3777,9 @@ Cache::spaces() std::string_view room_data; if (roomsDb_.get(txn, space_id, room_data)) { RoomInfo tmp = nlohmann::json::parse(std::move(room_data)).get(); - ret.insert(QString::fromUtf8(space_id.data(), (qsizetype)space_id.size()), tmp); + ret.insert(QString::fromUtf8(space_id.data(), (int)space_id.size()), tmp); } else { - ret.insert(QString::fromUtf8(space_id.data(), (qsizetype)space_id.size()), + ret.insert(QString::fromUtf8(space_id.data(), (int)space_id.size()), std::nullopt); } } @@ -4938,7 +4938,7 @@ to_json(nlohmann::json &obj, const GroupSessionData &msg) void from_json(const nlohmann::json &obj, GroupSessionData &msg) { - msg.message_index = obj.at("message_index").get(); + msg.message_index = obj.at("message_index").get(); msg.timestamp = obj.value("ts", 0ULL); msg.trusted = obj.value("trust", true); diff --git a/src/CacheCryptoStructs.h b/src/CacheCryptoStructs.h index 04e852b4..99e563bd 100644 --- a/src/CacheCryptoStructs.h +++ b/src/CacheCryptoStructs.h @@ -33,7 +33,7 @@ struct DeviceKeysToMsgIndex // map from device key to message_index // Using the device id is safe because we check for reuse on device list updates // Using the device id makes our logic much easier to read. - std::map deviceids; + std::map deviceids; }; struct SharedWithUsers @@ -45,8 +45,8 @@ struct SharedWithUsers // Extra information associated with an outbound megolm session. struct GroupSessionData { - uint64_t message_index = 0; uint64_t timestamp = 0; + uint32_t message_index = 0; // If we got the session via key sharing or forwarding, we can usually trust it. // If it came from asymmetric key backup, it is not trusted. diff --git a/src/CacheStructs.h b/src/CacheStructs.h index 459ced5a..1f035fee 100644 --- a/src/CacheStructs.h +++ b/src/CacheStructs.h @@ -93,8 +93,8 @@ struct RoomInfo //! Use the TimelineModel::lastMessage for an accurate timestamp. uint64_t approximate_last_modification_ts = 0; - uint16_t highlight_count = 0; - uint16_t notification_count = 0; + uint64_t highlight_count = 0; + uint64_t notification_count = 0; }; void diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 756ef425..2ea987c2 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -179,7 +179,8 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) static unsigned int prevNotificationCount = 0; unsigned int notificationCount = 0; for (const auto &room : sync.rooms.join) { - notificationCount += room.second.unread_notifications.notification_count; + notificationCount += + static_cast(room.second.unread_notifications.notification_count); } // HACK: If we had less notifications last time we checked, send an alert if the @@ -1064,12 +1065,15 @@ ChatPage::verifyOneTimeKeyCountAfterStartup() } std::map key_counts; - auto count = 0; + std::uint64_t count = 0; if (auto c = res.one_time_key_counts.find(mtx::crypto::SIGNED_CURVE25519); c == res.one_time_key_counts.end()) { key_counts[mtx::crypto::SIGNED_CURVE25519] = 0; } else { - key_counts[mtx::crypto::SIGNED_CURVE25519] = c->second; + key_counts[mtx::crypto::SIGNED_CURVE25519] = + c->second > std::numeric_limits::max() + ? std::numeric_limits::max() + : static_cast(c->second); count = c->second; } diff --git a/src/JdenticonProvider.cpp b/src/JdenticonProvider.cpp index 22d2b887..e9a7c883 100644 --- a/src/JdenticonProvider.cpp +++ b/src/JdenticonProvider.cpp @@ -104,7 +104,8 @@ JdenticonRunnable::run() painter.setRenderHint(QPainter::SmoothPixmapTransform, true); try { - QSvgRenderer renderer{jdenticon->generate(m_key, m_requestedSize.width()).toUtf8()}; + QSvgRenderer renderer{ + jdenticon->generate(m_key, static_cast(m_requestedSize.width())).toUtf8()}; renderer.render(&painter); } catch (std::exception &e) { nhlog::ui()->error( diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index 3022ca3d..26ffb934 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -169,8 +169,9 @@ MxcImageProvider::download(const QString &id, mtx::http::ThumbOpts opts; opts.mxc_url = "mxc://" + id.toStdString(); - opts.width = requestedSize.width() > 0 ? requestedSize.width() : -1; - opts.height = requestedSize.height() > 0 ? requestedSize.height() : -1; + opts.width = static_cast(requestedSize.width() > 0 ? requestedSize.width() : -1); + opts.height = + static_cast(requestedSize.height() > 0 ? requestedSize.height() : -1); opts.method = crop ? "crop" : "scale"; http::client()->get_thumbnail( opts, diff --git a/src/ReadReceiptsModel.cpp b/src/ReadReceiptsModel.cpp index 2b1cdc74..f9de970b 100644 --- a/src/ReadReceiptsModel.cpp +++ b/src/ReadReceiptsModel.cpp @@ -85,8 +85,9 @@ ReadReceiptsModel::addUsers( auto newReceipts = users.size() - readReceipts_.size(); if (newReceipts > 0) { - beginInsertRows( - QModelIndex{}, readReceipts_.size(), readReceipts_.size() + newReceipts - 1); + beginInsertRows(QModelIndex{}, + static_cast(readReceipts_.size()), + static_cast(readReceipts_.size() + newReceipts - 1)); for (const auto &user : users) { QPair item = {QString::fromStdString(user.second), diff --git a/src/Utils.cpp b/src/Utils.cpp index b92c6cce..c782fa48 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -354,8 +354,8 @@ utils::scaleImageToPixmap(const QImage &img, int size) // Deprecated in 5.13: const double sz = // std::ceil(QApplication::desktop()->screen()->devicePixelRatioF() * (double)size); - const double sz = - std::ceil(QGuiApplication::primaryScreen()->devicePixelRatio() * (double)size); + const int sz = static_cast( + std::ceil(QGuiApplication::primaryScreen()->devicePixelRatio() * (double)size)); return QPixmap::fromImage(img.scaled(sz, sz, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } @@ -376,8 +376,8 @@ utils::scaleDown(uint64_t maxWidth, uint64_t maxHeight, const QPixmap &source) w = source.width(); h = source.height(); } else { - w = source.width() * minAspectRatio; - h = source.height() * minAspectRatio; + w = static_cast(static_cast(source.width()) * minAspectRatio); + h = static_cast(static_cast(source.height()) * minAspectRatio); } return source.scaled(w, h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); @@ -452,7 +452,7 @@ utils::escapeBlacklistedHtml(const QString &rawStr) const auto end = data.cend(); for (auto pos = data.cbegin(); pos < end;) { auto tagStart = std::find(pos, end, '<'); - buffer.append(pos, tagStart - pos); + buffer.append(pos, static_cast(tagStart - pos)); if (tagStart == end) break; @@ -460,14 +460,15 @@ utils::escapeBlacklistedHtml(const QString &rawStr) const auto tagNameEnd = std::find_first_of(tagNameStart, end, tagNameEnds.begin(), tagNameEnds.end()); - if (allowedTags.find(QByteArray(tagNameStart, tagNameEnd - tagNameStart).toLower()) == + if (allowedTags.find( + QByteArray(tagNameStart, static_cast(tagNameEnd - tagNameStart)).toLower()) == allowedTags.end()) { // not allowed -> escape buffer.append("<"); pos = tagNameStart; continue; } else { - buffer.append(tagStart, tagNameEnd - tagStart); + buffer.append(tagStart, static_cast(tagNameEnd - tagStart)); pos = tagNameEnd; @@ -492,7 +493,8 @@ utils::escapeBlacklistedHtml(const QString &rawStr) auto attrEnd = std::find_first_of( attrStart, attrsEnd, attrNameEnds.begin(), attrNameEnds.end()); - auto attrName = QByteArray(attrStart, attrEnd - attrStart).toLower(); + auto attrName = + QByteArray(attrStart, static_cast(attrEnd - attrStart)).toLower(); auto sanitizeValue = [&attrName](QByteArray val) { if (attrName == QByteArrayLiteral("src") && !val.startsWith("mxc://")) @@ -520,8 +522,8 @@ utils::escapeBlacklistedHtml(const QString &rawStr) if (valueEnd == attrsEnd) break; - auto val = - sanitizeValue(QByteArray(attrStart, valueEnd - attrStart)); + auto val = sanitizeValue(QByteArray( + attrStart, static_cast(valueEnd - attrStart))); attrStart = consumeSpaces(valueEnd + 1); if (!val.isEmpty()) { buffer.append(' '); @@ -537,8 +539,8 @@ utils::escapeBlacklistedHtml(const QString &rawStr) if (valueEnd == attrsEnd) break; - auto val = - sanitizeValue(QByteArray(attrStart, valueEnd - attrStart)); + auto val = sanitizeValue(QByteArray( + attrStart, static_cast(valueEnd - attrStart))); attrStart = consumeSpaces(valueEnd + 1); if (!val.isEmpty()) { buffer.append(' '); @@ -553,8 +555,8 @@ utils::escapeBlacklistedHtml(const QString &rawStr) attrsEnd, attrValueEnds.begin(), attrValueEnds.end()); - auto val = - sanitizeValue(QByteArray(attrStart, valueEnd - attrStart)); + auto val = sanitizeValue(QByteArray( + attrStart, static_cast(valueEnd - attrStart))); attrStart = consumeSpaces(valueEnd); if (val.contains('"')) @@ -772,15 +774,15 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun auto hash = hashQString(input); // create a hue value based on the hash of the input. // Adapted to make Nico blue - auto userHue = - static_cast(static_cast(hash - static_cast(0x60'00'00'00)) / - std::numeric_limits::max() * 360.); + auto userHue = static_cast(hash - static_cast(0x60'00'00'00)) / + std::numeric_limits::max() * 360.; // start with moderate saturation and lightness values. - auto sat = 230; - auto lightness = 125; + auto sat = 230.; + auto lightness = 125.; // converting to a QColor makes the luminance calc easier. - QColor inputColor = QColor::fromHsl(userHue, sat, lightness); + QColor inputColor = QColor::fromHsl( + static_cast(userHue), static_cast(sat), static_cast(lightness)); // calculate the initial luminance and contrast of the // generated color. It's possible that no additional @@ -798,7 +800,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun if (lightness >= 242 || lightness <= 13) { qreal newSat = qBound(26.0, sat * 1.25, 242.0); - inputColor.setHsl(userHue, qFloor(newSat), lightness); + inputColor.setHsl(static_cast(userHue), + static_cast(qFloor(newSat)), + static_cast(lightness)); auto tmpLum = luminance(inputColor); auto higherContrast = computeContrast(tmpLum, backgroundLum); if (higherContrast > contrast) { @@ -806,7 +810,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun sat = newSat; } else { newSat = qBound(26.0, sat / 1.25, 242.0); - inputColor.setHsl(userHue, qFloor(newSat), lightness); + inputColor.setHsl(static_cast(userHue), + static_cast(qFloor(newSat)), + static_cast(lightness)); tmpLum = luminance(inputColor); auto lowerContrast = computeContrast(tmpLum, backgroundLum); if (lowerContrast > contrast) { @@ -817,7 +823,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun } else { qreal newLightness = qBound(13.0, lightness * 1.25, 242.0); - inputColor.setHsl(userHue, sat, qFloor(newLightness)); + inputColor.setHsl(static_cast(userHue), + static_cast(sat), + static_cast(qFloor(newLightness))); auto tmpLum = luminance(inputColor); auto higherContrast = computeContrast(tmpLum, backgroundLum); @@ -829,7 +837,9 @@ utils::generateContrastingHexColor(const QString &input, const QColor &backgroun // otherwise, try going the other way instead. } else { newLightness = qBound(13.0, lightness / 1.25, 242.0); - inputColor.setHsl(userHue, sat, qFloor(newLightness)); + inputColor.setHsl(static_cast(userHue), + static_cast(sat), + static_cast(qFloor(newLightness))); tmpLum = luminance(inputColor); auto lowerContrast = computeContrast(tmpLum, backgroundLum); if (lowerContrast > contrast) { @@ -888,8 +898,8 @@ utils::centerWidget(QWidget *widget, QWindow *parent) } auto findCenter = [childRect = widget->rect()](QRect hostRect) -> QPoint { - return QPoint(hostRect.center().x() - (childRect.width() * 0.5), - hostRect.center().y() - (childRect.height() * 0.5)); + return QPoint(static_cast(hostRect.center().x() - (childRect.width() * 0.5)), + static_cast(hostRect.center().y() - (childRect.height() * 0.5))); }; widget->move(findCenter(QGuiApplication::primaryScreen()->geometry())); } diff --git a/src/dbus/NhekoDBusApi.cpp b/src/dbus/NhekoDBusApi.cpp index 47fdca69..2367c27b 100644 --- a/src/dbus/NhekoDBusApi.cpp +++ b/src/dbus/NhekoDBusApi.cpp @@ -186,7 +186,7 @@ operator<<(QDBusArgument &arg, const QImage &image) int channels = i.hasAlphaChannel() ? 4 : 3; arg << i.depth() / channels; arg << channels; - arg << QByteArray(reinterpret_cast(i.bits()), i.sizeInBytes()); + arg << QByteArray(reinterpret_cast(i.bits()), static_cast(i.sizeInBytes())); arg.endStructure(); return arg; diff --git a/src/encryption/Olm.cpp b/src/encryption/Olm.cpp index 03d0e983..7ada2f92 100644 --- a/src/encryption/Olm.cpp +++ b/src/encryption/Olm.cpp @@ -1144,7 +1144,7 @@ handle_key_request_message(const mtx::events::DeviceEventcurrently.keys.count(req.sender)) { if (sessionData->currently.keys.at(req.sender) .deviceids.count(req.content.requesting_device_id)) { diff --git a/src/main.cpp b/src/main.cpp index 83b4657a..3937c6b7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -61,7 +61,7 @@ stacktraceHandler(int signum) // see // https://stackoverflow.com/questions/77005/how-to-automatically-generate-a-stacktrace-when-my-program-crashes/77336#77336 void *array[50]; - size_t size; + int size; // get void*'s for all entries on the stack size = backtrace(array, 50); diff --git a/src/timeline/CommunitiesModel.cpp b/src/timeline/CommunitiesModel.cpp index ef023cee..96d090f7 100644 --- a/src/timeline/CommunitiesModel.cpp +++ b/src/timeline/CommunitiesModel.cpp @@ -153,7 +153,8 @@ CommunitiesModel::data(const QModelIndex &index, int role) const int count = 0; auto end = spaceOrder_.lastChild(index.row() - 2); for (int i = index.row() - 2; i <= end; i++) - count += spaceOrder_.tree[i].notificationCounts.notification_count; + count += + static_cast(spaceOrder_.tree[i].notificationCounts.notification_count); return count; } case CommunitiesModel::Roles::HasLoudNotification: { diff --git a/src/timeline/Permissions.cpp b/src/timeline/Permissions.cpp index 9fa833b7..78bb3cf6 100644 --- a/src/timeline/Permissions.cpp +++ b/src/timeline/Permissions.cpp @@ -66,24 +66,24 @@ Permissions::canSend(int eventType) int Permissions::defaultLevel() { - return pl.users_default; + return static_cast(pl.users_default); } int Permissions::redactLevel() { - return pl.redact; + return static_cast(pl.redact); } int Permissions::changeLevel(int eventType) { - return pl.state_level(to_string( - qml_mtx_events::fromRoomEventType(static_cast(eventType)))); + return static_cast(pl.state_level(to_string( + qml_mtx_events::fromRoomEventType(static_cast(eventType))))); } int Permissions::sendLevel(int eventType) { - return pl.event_level(to_string( - qml_mtx_events::fromRoomEventType(static_cast(eventType)))); + return static_cast(pl.event_level(to_string( + qml_mtx_events::fromRoomEventType(static_cast(eventType))))); } bool diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 5ffd7415..6cf361aa 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -679,7 +679,7 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r if (w == 0) w = 1; - double prop = media_height(event) / (double)w; + double prop = (double)media_height(event) / (double)w; return {prop > 0 ? prop : 1.}; } @@ -2881,7 +2881,7 @@ TimelineModel::pinnedMessages() const return {}; QStringList list; - list.reserve((qsizetype)pinned->content.pinned.size()); + list.reserve((int)pinned->content.pinned.size()); for (const auto &p : pinned->content.pinned) list.push_back(QString::fromStdString(p)); @@ -2912,7 +2912,7 @@ TimelineModel::widgetLinks() const theme.clear(); user = QUrl::toPercentEncoding(user); - list.reserve((qsizetype)evs.size()); + list.reserve((int)evs.size()); for (const auto &p : evs) { auto url = QString::fromStdString(p.content.url); diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 2a04c9c9..8bf18f19 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -406,7 +406,7 @@ public slots: RoomSummary *parentSpace(); bool hasMentions() const { return highlight_count > 0; } - int notificationCount() const { return notification_count; } + int notificationCount() const { return static_cast(notification_count); } QString scrollTarget() const; diff --git a/src/ui/MxcAnimatedImage.cpp b/src/ui/MxcAnimatedImage.cpp index 8ecea7d9..7f7210e3 100644 --- a/src/ui/MxcAnimatedImage.cpp +++ b/src/ui/MxcAnimatedImage.cpp @@ -82,7 +82,7 @@ MxcAnimatedImage::startDownload() std::string temp(ba.constData(), ba.size()); temp = mtx::crypto::to_string(mtx::crypto::decrypt_file(temp, encryptionInfo.value())); - buffer.setData(temp.data(), temp.size()); + buffer.setData(temp.data(), static_cast(temp.size())); } else { buffer.setData(device.readAll()); } diff --git a/src/ui/MxcMediaProxy.cpp b/src/ui/MxcMediaProxy.cpp index 3676a74e..dadd4478 100644 --- a/src/ui/MxcMediaProxy.cpp +++ b/src/ui/MxcMediaProxy.cpp @@ -122,7 +122,7 @@ MxcMediaProxy::startDownload() QByteArray ba = device.readAll(); std::string temp(ba.constData(), ba.size()); temp = mtx::crypto::to_string(mtx::crypto::decrypt_file(temp, encryptionInfo.value())); - buffer.setData(temp.data(), temp.size()); + buffer.setData(temp.data(), static_cast(temp.size())); } else { buffer.setData(device.readAll()); } diff --git a/src/ui/RoomSettings.cpp b/src/ui/RoomSettings.cpp index 546cda29..67be0bbb 100644 --- a/src/ui/RoomSettings.cpp +++ b/src/ui/RoomSettings.cpp @@ -132,7 +132,7 @@ RoomSettings::roomAvatarUrl() int RoomSettings::memberCount() const { - return info_.member_count; + return static_cast(info_.member_count); } void @@ -180,7 +180,8 @@ QStringList RoomSettings::allowedRooms() const { QStringList rooms; - rooms.reserve(accessRules_.allow.size()); + assert(accessRules_.allow.size() < std::numeric_limits::max()); + rooms.reserve(static_cast(accessRules_.allow.size())); for (const auto &e : accessRules_.allow) { if (e.type == mtx::events::state::JoinAllowanceType::RoomMembership) rooms.push_back(QString::fromStdString(e.room_id)); diff --git a/src/voip/CallManager.cpp b/src/voip/CallManager.cpp index 5e711499..1bb1700f 100644 --- a/src/voip/CallManager.cpp +++ b/src/voip/CallManager.cpp @@ -124,10 +124,10 @@ CallManager::CallManager(QObject *parent) // Request new credentials close to expiry // See https://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 turnURIs_ = getTurnURIs(res); - uint32_t ttl = std::max(res.ttl, UINT32_C(3600)); + uint32_t ttl = std::max(res.ttl, std::uint32_t{3600}); if (res.ttl < 3600) nhlog::net()->warn("Setting ttl to 1 hour"); - turnServerTimer_.setInterval(ttl * 1000 * 0.9); + turnServerTimer_.setInterval(std::chrono::seconds(ttl) * 10 / 9); }); connect(&session_, &WebRTCSession::stateChanged, this, [this](webrtc::State state) { @@ -728,7 +728,8 @@ CallManager::devices(bool isVideo) const isVideo ? UserSettings::instance()->camera() : UserSettings::instance()->microphone(); std::vector devices = CallDevices::instance().names(isVideo, defaultDevice.toStdString()); - ret.reserve(devices.size()); + assert(devices.size() < std::numeric_limits::max()); + ret.reserve(static_cast(devices.size())); std::transform(devices.cbegin(), devices.cend(), std::back_inserter(ret), [](const auto &d) { return QString::fromStdString(d); }); @@ -867,7 +868,8 @@ CallManager::windowList() } #endif QStringList ret; - ret.reserve(windows_.size()); + assert(windows_.size() < std::numeric_limits::max()); + ret.reserve(static_cast(windows_.size())); for (const auto &w : windows_) ret.append(w.first); diff --git a/src/voip/WebRTCSession.cpp b/src/voip/WebRTCSession.cpp index b3e6bf26..706a69d9 100644 --- a/src/voip/WebRTCSession.cpp +++ b/src/voip/WebRTCSession.cpp @@ -141,7 +141,8 @@ parseSDP(const std::string &sdp, GstWebRTCSDPType type) { GstSDPMessage *msg; gst_sdp_message_new(&msg); - if (gst_sdp_message_parse_buffer((guint8 *)sdp.c_str(), sdp.size(), msg) == GST_SDP_OK) { + if (gst_sdp_message_parse_buffer((guint8 *)sdp.c_str(), static_cast(sdp.size()), msg) == + GST_SDP_OK) { return gst_webrtc_session_description_new(type, msg); } else { nhlog::ui()->error("WebRTC: failed to parse remote session description"); @@ -371,9 +372,12 @@ getResolution(GstElement *pipe, const gchar *elementName, const gchar *padName) std::pair getPiPDimensions(const std::pair &resolution, int fullWidth, double scaleFactor) { - int pipWidth = fullWidth * scaleFactor; - int pipHeight = static_cast(resolution.second) / resolution.first * pipWidth; - return {pipWidth, pipHeight}; + double pipWidth = fullWidth * scaleFactor; + double pipHeight = static_cast(resolution.second) / resolution.first * pipWidth; + return { + static_cast(std::ceil(pipWidth)), + static_cast(std::ceil(pipHeight)), + }; } void diff --git a/third_party/blurhash/blurhash.cpp b/third_party/blurhash/blurhash.cpp index 78f72f9b..7eb9c827 100644 --- a/third_party/blurhash/blurhash.cpp +++ b/third_party/blurhash/blurhash.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #ifdef DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN @@ -17,9 +18,6 @@ using namespace std::literals; namespace { -template -T pi = 3.14159265358979323846; - constexpr std::array int_to_b83{ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~"}; @@ -93,7 +91,7 @@ decode83(std::string_view value) float decodeMaxAC(int quantizedMaxAC) noexcept { - return (quantizedMaxAC + 1) / 166.; + return static_cast(quantizedMaxAC + 1) / 166.f; } float @@ -123,7 +121,7 @@ srgbToLinear(int value) noexcept return std::pow((x + 0.055f) / 1.055f, 2.4f); }; - return srgbToLinearF(value / 255.f); + return srgbToLinearF(static_cast(value) / 255.f); } int @@ -234,7 +232,7 @@ std::vector bases_for(size_t dimension, size_t components) { std::vector bases(dimension * components, 0.f); - auto scale = pi / float(dimension); + auto scale = std::numbers::pi_v / float(dimension); for (size_t x = 0; x < dimension; x++) { for (size_t nx = 0; nx < size_t(components); nx++) { bases[x * components + nx] = std::cos(scale * float(nx * x)); @@ -323,7 +321,7 @@ encode(unsigned char *image, size_t width, size_t height, int components_x, int srgbToLinear(image[3 * x + 2 + y * width * 3])}; // other half of normalization. - linear *= 1.f / width; + linear *= 1.f / static_cast(width); for (size_t ny = 0; ny < size_t(components_y); ny++) { for (size_t nx = 0; nx < size_t(components_x); nx++) { @@ -339,7 +337,7 @@ encode(unsigned char *image, size_t width, size_t height, int components_x, int // too far outside the float range. for (size_t i = 0; i < factors.size(); i++) { float normalisation = (i == 0) ? 1 : 2; - float scale = normalisation / (height); + float scale = normalisation / static_cast(height); factors[i] *= scale; } From 9a90f8868fb0413b54a8caee6d1c4ba01eaeaa2a Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 26 Oct 2022 01:14:46 +0200 Subject: [PATCH 06/84] lint --- src/ChatPage.cpp | 2 +- src/MxcImageProvider.cpp | 2 +- src/Utils.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 2ea987c2..e40274cb 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -1074,7 +1074,7 @@ ChatPage::verifyOneTimeKeyCountAfterStartup() c->second > std::numeric_limits::max() ? std::numeric_limits::max() : static_cast(c->second); - count = c->second; + count = c->second; } nhlog::crypto()->info( diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index 26ffb934..0dc96e5a 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -172,7 +172,7 @@ MxcImageProvider::download(const QString &id, opts.width = static_cast(requestedSize.width() > 0 ? requestedSize.width() : -1); opts.height = static_cast(requestedSize.height() > 0 ? requestedSize.height() : -1); - opts.method = crop ? "crop" : "scale"; + opts.method = crop ? "crop" : "scale"; http::client()->get_thumbnail( opts, [fileInfo, requestedSize, radius, then, id, crop, cropLocally]( diff --git a/src/Utils.cpp b/src/Utils.cpp index c782fa48..c19871bc 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -557,7 +557,7 @@ utils::escapeBlacklistedHtml(const QString &rawStr) attrValueEnds.end()); auto val = sanitizeValue(QByteArray( attrStart, static_cast(valueEnd - attrStart))); - attrStart = consumeSpaces(valueEnd); + attrStart = consumeSpaces(valueEnd); if (val.contains('"')) continue; From ac0f01122144687356e628ec7e14cdbbb09be567 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 26 Oct 2022 01:21:52 +0200 Subject: [PATCH 07/84] Disable Wconversion again --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ef8d52bf..2b456b1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -275,7 +275,6 @@ if(NOT MSVC) "${CMAKE_CXX_FLAGS} \ -Wall \ -Wextra \ - -Wconversion \ -pedantic \ -fsized-deallocation \ -fdiagnostics-color=always \ From 48ecc2b45a7b5de876162526ff2b583c2e70efd7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 27 Oct 2022 22:53:21 +0200 Subject: [PATCH 08/84] fix blurry thumbnails --- src/MxcImageProvider.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index 0dc96e5a..cd7e3946 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -169,9 +169,9 @@ MxcImageProvider::download(const QString &id, mtx::http::ThumbOpts opts; opts.mxc_url = "mxc://" + id.toStdString(); - opts.width = static_cast(requestedSize.width() > 0 ? requestedSize.width() : -1); + opts.width = static_cast(requestedSize.width() > 0 ? requestedSize.width() : -1); opts.height = - static_cast(requestedSize.height() > 0 ? requestedSize.height() : -1); + static_cast(requestedSize.height() > 0 ? requestedSize.height() : -1); opts.method = crop ? "crop" : "scale"; http::client()->get_thumbnail( opts, From 35b18700ac1db0c9f5ad74721e85af909b27083e Mon Sep 17 00:00:00 2001 From: Joe Donofry Date: Thu, 27 Oct 2022 22:21:58 +0000 Subject: [PATCH 09/84] Add support for Apple Silicon builds via Cirrus CI --- .ci/macos/build.sh | 32 +++++++++++++++++++ .ci/macos/deploy.sh | 34 -------------------- .ci/macos/notarize.sh | 40 ++++++++++++++---------- .cirrus.yml | 24 +++++++++++++++ .gitlab-ci.yml | 72 +++++++++++++++++++++++-------------------- toolchain.cmake | 1 + 6 files changed, 119 insertions(+), 84 deletions(-) create mode 100755 .ci/macos/build.sh delete mode 100755 .ci/macos/deploy.sh create mode 100644 .cirrus.yml diff --git a/.ci/macos/build.sh b/.ci/macos/build.sh new file mode 100755 index 00000000..ef95181c --- /dev/null +++ b/.ci/macos/build.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env sh + +set -u + +# unused +#TAG=$(git tag -l --points-at HEAD) + +# Add Qt binaries to path +PATH="$(brew --prefix qt5):${PATH}" +export PATH + +CMAKE_PREFIX_PATH="$(brew --prefix qt5)" +export CMAKE_PREFIX_PATH + +cmake -GNinja -S. -Bbuild \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=.deps/usr \ + -DHUNTER_ROOT="../.hunter" \ + -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHUNTER_CONFIGURATION_TYPES=RelWithDebInfo \ + -DUSE_BUNDLED_OPENSSL=ON \ + -DCI_BUILD=ON +cmake --build build +( cd build || exit + git clone https://github.com/Nheko-Reborn/qt-jdenticon.git + ( cd qt-jdenticon || exit + qmake + make -j 4 + cp libqtjdenticon.dylib ../nheko.app/Contents/MacOS + ) + macdeployqt nheko.app -always-overwrite -qmldir=../resources/qml/ +) diff --git a/.ci/macos/deploy.sh b/.ci/macos/deploy.sh deleted file mode 100755 index 56a1f23a..00000000 --- a/.ci/macos/deploy.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env sh - -set -eux - -# unused -#TAG=$(git tag -l --points-at HEAD) - -# Add Qt binaries to path -PATH=/usr/local/opt/qt@5/bin/:${PATH} - -( cd build - # macdeployqt does not copy symlinks over. - # this specifically addresses icu4c issues but nothing else. - ICU_LIB="$(brew --prefix icu4c)/lib" - export ICU_LIB - mkdir -p nheko.app/Contents/Frameworks - find "${ICU_LIB}" -type l -name "*.dylib" -exec cp -a -n {} nheko.app/Contents/Frameworks/ \; || true - - macdeployqt nheko.app -dmg -always-overwrite -qmldir=../resources/qml/ - - user=$(id -nu) - chown "${user}" nheko.dmg - mv nheko.dmg .. -) - -dmgbuild -s ./.ci/macos/settings.json "Nheko" nheko.dmg - -VERSION=${CI_COMMIT_SHORT_SHA} - -if [ -n "$VERSION" ]; then - mv nheko.dmg "nheko-${VERSION}.dmg" - mkdir artifacts - cp "nheko-${VERSION}.dmg" artifacts/ -fi diff --git a/.ci/macos/notarize.sh b/.ci/macos/notarize.sh index af62a6d2..7a67306d 100755 --- a/.ci/macos/notarize.sh +++ b/.ci/macos/notarize.sh @@ -7,24 +7,28 @@ set -u # Add Qt binaries to path PATH="/usr/local/opt/qt@5/bin/:${PATH}" +export PATH security unlock-keychain -p "${RUNNER_USER_PW}" login.keychain -( cd build || exit - # macdeployqt does not copy symlinks over. - # this specifically addresses icu4c issues but nothing else. - # We might not even need this any longer... - # ICU_LIB="$(brew --prefix icu4c)/lib" - # export ICU_LIB - # mkdir -p nheko.app/Contents/Frameworks - # find "${ICU_LIB}" -type l -name "*.dylib" -exec cp -a -n {} nheko.app/Contents/Frameworks/ \; || true +if [ "${CI_PIPELINE_TRIGGERED}" ] && [ "${TRIGGERED_BY}" = "cirrus" ]; then + echo "cirrus build id: ${TRIGGER_BUILD_ID}" + cat "${TRIGGER_PAYLOAD}" + # download the build artifacts from cirrus api + curl "https://api.cirrus-ci.com/v1/artifact/build/${TRIGGER_BUILD_ID}/binaries.zip" -o binaries.zip + # cirrus ci artifacts task name is 'binaries' so that's the zip name. + unzip binaries.zip + # we zip 'build/nheko.app' in cirrus ci, cirrus itself puts it in a 'build' directory + # so move it to the right place for the rest of the process. + ( cd build || exit + unzip nheko.zip + ) +fi - #macdeployqt nheko.app -dmg -always-overwrite -qmldir=../resources/qml/ -sign-for-notarization="${APPLE_DEV_IDENTITY}" - macdeployqt nheko.app -always-overwrite -qmldir=../resources/qml/ - - # user=$(id -nu) - # chown "${user}" nheko.dmg -) +if [ ! -d "build/nheko.app" ]; then + echo "nheko.app is missing, you did something wrong!" + exit 1 +fi echo "[INFO] Signing app contents" find "build/nheko.app/Contents"|while read -r fname; do @@ -46,6 +50,7 @@ trap finish EXIT dmgbuild -s .ci/macos/settings.json "Nheko" nheko.dmg codesign -s "${APPLE_DEV_IDENTITY}" nheko.dmg + user=$(id -nu) chown "${user}" nheko.dmg @@ -72,7 +77,7 @@ while sleep 60 && date; do #isSuccess=$(grep "success" "$NOTARIZE_STATUS_LOG") #isFailure=$(grep "invalid" "$NOTARIZE_STATUS_LOG") - echo "Status for submission \"${requestUUID}\": \"${sub_status}\"" + echo "Status for submission \"${requestUUID}\": \"${sub_status}\"" if [ "${sub_status}" = "Accepted" ]; then echo "Notarization done!" @@ -82,6 +87,7 @@ while sleep 60 && date; do fi if [ "${sub_status}" = "Invalid" ] || [ "${sub_status}" = "Rejected" ]; then echo "Notarization failed" + xcrun notarytool log "${requestUUID}" --apple-id "${APPLE_DEV_USER}" --password "${APPLE_DEV_PASS}" --team-id "${APPLE_TEAM_ID}" > "$NOTARIZE_STATUS_LOG" 2>&1 cat "$NOTARIZE_STATUS_LOG" 1>&2 exit 1 fi @@ -91,7 +97,7 @@ done VERSION=${CI_COMMIT_SHORT_SHA} if [ -n "$VERSION" ]; then - mv nheko.dmg "nheko-${VERSION}.dmg" + mv nheko.dmg "nheko-${VERSION}_${PLAT}.dmg" mkdir artifacts - cp "nheko-${VERSION}.dmg" artifacts/ + cp "nheko-${VERSION}_${PLAT}.dmg" artifacts/ fi \ No newline at end of file diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 00000000..2658b4b3 --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,24 @@ +task: + macos_instance: + image: ghcr.io/cirruslabs/macos-monterey-xcode:13 + name: Build - macOS Apple Silicon + only_if: $CIRRUS_REPO_OWNER == 'Nheko-Reborn' + environment: + GITLAB_TRIGGER_TOKEN: ENCRYPTED[!5fb4bbdecbde3b2c766ac7383dca573cd5ec8b815c5ac9bede0cadfe9ad70ecd3e64b1728f7840da087099f3fc1fd4f7!] + homebrew_script: + - brew bundle --file .ci/macos/Brewfile + build_script: + - export PATH="$(brew --prefix qt5)/bin/:${PATH}" + - ./.ci/macos/build.sh + zip_script: + - ditto -c -k --sequesterRsrc --keepParent build/nheko.app build/nheko.zip + gitlab_script: + - curl -X POST + --fail + -F token="${GITLAB_TRIGGER_TOKEN}" + -F ref="${CIRRUS_BRANCH}" + -F "variables[TRIGGER_BUILD_ID]=${CIRRUS_BUILD_ID}" + -F "variables[TRIGGERED_BY]=cirrus" + "https://nheko.im/api/v4/projects/2/trigger/pipeline" + binaries_artifacts: + path: build/nheko.zip \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 197cc7ac..0e172d5c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,10 +14,10 @@ build-clazy: before_script: - apt-get update - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake liblmdb-dev libre2-dev - libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev - qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev - qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform - qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev + libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev + qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev + qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform + qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev script: - export PATH="/usr/local/bin/:/usr/lib/ccache:${PATH}" - export CMAKE_BUILD_PARALLEL_LEVEL=$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l) @@ -28,6 +28,8 @@ build-clazy: -DCMAKE_BUILD_TYPE=Release -DCI_BUILD=ON -DFETCHCONTENT_QUIET=OFF -DCMAKE_CXX_COMPILER=clazy - cmake --build build + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -41,11 +43,11 @@ build-gcc11: TRAVIS_OS_NAME: linux before_script: - apt-get update - - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev - libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev - qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev - qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform - qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev + - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev + libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev + qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev + qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform + qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev # need recommended deps for wget - apt-get -y install wget - /usr/sbin/update-ccache-symlinks @@ -63,6 +65,8 @@ build-gcc11: - cmake --build build after_script: - mv ../.hunter .hunter + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -77,11 +81,11 @@ build-gcc10: TRAVIS_OS_NAME: linux before_script: - apt-get update - - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev - libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev - qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev - qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform - qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev + - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev + libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev + qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev + qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform + qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev # need recommended deps for wget - apt-get -y install wget - /usr/sbin/update-ccache-symlinks @@ -100,6 +104,8 @@ build-gcc10: - cmake --build build after_script: - mv ../.hunter .hunter + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -112,22 +118,11 @@ build-macos: before_script: - rm -rf ../.hunter && mv .hunter ../.hunter || true script: - - export PATH=/usr/local/opt/qt@5/bin/:${PATH} - - export CMAKE_PREFIX_PATH=/usr/local/opt/qt@5 - - cmake -GNinja -H. -Bbuild - -DCMAKE_BUILD_TYPE=RelWithDebInfo - -DCMAKE_INSTALL_PREFIX=.deps/usr - -DHUNTER_ROOT="../.hunter" - -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF - -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHUNTER_CONFIGURATION_TYPES=RelWithDebInfo - -DUSE_BUNDLED_OPENSSL=ON - -DUSE_BUNDLED_BOOST=ON - -DCI_BUILD=ON - -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 - - cmake --build build - - (cd build && git clone https://github.com/Nheko-Reborn/qt-jdenticon.git && cd qt-jdenticon && qmake && make -j 4 && cp libqtjdenticon.dylib ../nheko.app/Contents/MacOS) + - ./.ci/macos/build.sh after_script: - mv ../.hunter .hunter + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' artifacts: paths: - build/nheko.app @@ -143,22 +138,27 @@ build-macos: codesign-macos: stage: deploy tags: [macos] + variables: + PLAT: "intel" before_script: - - 'brew upgrade qt@5' - pip3 install dmgbuild script: - export PATH=/usr/local/opt/qt@5/bin/:${PATH} - ./.ci/macos/notarize.sh after_script: - - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}.dmg + - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}_${PLAT}.dmg needs: - - build-macos + - job: build-macos + optional: true # optional since we want to be able to also trigger this job from cirrus ci for apple silicon builds. rules: - - if: '$CI_COMMIT_BRANCH == "master"' + - if : '$CI_COMMIT_BRANCH == "master"' - if : $CI_COMMIT_TAG + - if : '$CI_PIPELINE_TRIGGERED && $CI_COMMIT_REF_PROTECTED' + variables: + PLAT: "m1" artifacts: paths: - - artifacts/nheko-${CI_COMMIT_SHORT_SHA}.dmg + - artifacts/nheko-${CI_COMMIT_SHORT_SHA}_${PLAT}.dmg - /tmp/notarize* name: nheko-${CI_COMMIT_SHORT_SHA}-macos @@ -181,6 +181,8 @@ build-flatpak-amd64: after_script: - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-amd64.flatpak + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -209,6 +211,8 @@ build-flatpak-arm64: after_script: - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-arm64.flatpak + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' cache: key: "$CI_JOB_NAME" paths: @@ -230,4 +234,6 @@ linting: script: - make lint - make license + rules: + - if : '$CI_PIPELINE_TRIGGERED == null' diff --git a/toolchain.cmake b/toolchain.cmake index 90f05868..3e80767f 100644 --- a/toolchain.cmake +++ b/toolchain.cmake @@ -1,3 +1,4 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15) \ No newline at end of file From c6c8ac092bf972d6f61bfb5a2e79b6b3273c6444 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Thu, 27 Oct 2022 18:55:52 -0400 Subject: [PATCH 10/84] Fix conditional checks --- .ci/macos/notarize.sh | 2 +- .gitlab-ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci/macos/notarize.sh b/.ci/macos/notarize.sh index 7a67306d..2757d44c 100755 --- a/.ci/macos/notarize.sh +++ b/.ci/macos/notarize.sh @@ -11,7 +11,7 @@ export PATH security unlock-keychain -p "${RUNNER_USER_PW}" login.keychain -if [ "${CI_PIPELINE_TRIGGERED}" ] && [ "${TRIGGERED_BY}" = "cirrus" ]; then +if [ -n "${CI_PIPELINE_TRIGGERED:-}" ] && [ "${TRIGGERED_BY:-}" = "cirrus" ]; then echo "cirrus build id: ${TRIGGER_BUILD_ID}" cat "${TRIGGER_PAYLOAD}" # download the build artifacts from cirrus api diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0e172d5c..8d6fc82b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -153,7 +153,7 @@ codesign-macos: rules: - if : '$CI_COMMIT_BRANCH == "master"' - if : $CI_COMMIT_TAG - - if : '$CI_PIPELINE_TRIGGERED && $CI_COMMIT_REF_PROTECTED' + - if : '$CI_PIPELINE_TRIGGERED && $CI_COMMIT_REF_PROTECTED == "true"' variables: PLAT: "m1" artifacts: From 7f825e3ee8b41c42c6f25c8bb637d5de99303d45 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Thu, 27 Oct 2022 19:08:27 -0400 Subject: [PATCH 11/84] Fix PLAT being wrong for m1 builds --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8d6fc82b..623a7be5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -151,11 +151,11 @@ codesign-macos: - job: build-macos optional: true # optional since we want to be able to also trigger this job from cirrus ci for apple silicon builds. rules: - - if : '$CI_COMMIT_BRANCH == "master"' - - if : $CI_COMMIT_TAG - if : '$CI_PIPELINE_TRIGGERED && $CI_COMMIT_REF_PROTECTED == "true"' variables: PLAT: "m1" + - if : '$CI_COMMIT_BRANCH == "master"' + - if : $CI_COMMIT_TAG artifacts: paths: - artifacts/nheko-${CI_COMMIT_SHORT_SHA}_${PLAT}.dmg From d8669ccf3d4429e44caa87e2592b3bc3afa4e41c Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 28 Oct 2022 01:42:24 +0200 Subject: [PATCH 12/84] Turn metasync and sync back on for the database to account for bad filesystems --- src/Cache.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index 4f1fed1c..e090e40d 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -293,7 +293,10 @@ Cache::setup() // NOTE(Nico): We may want to use (MDB_MAPASYNC | MDB_WRITEMAP) in the future, but // it can really mess up our database, so we shouldn't. For now, hopefully // NOMETASYNC is fast enough. - env_.open(cacheDirectory_.toStdString().c_str(), MDB_NOMETASYNC | MDB_NOSYNC); + // + // 2022-10-28: Disable the nosync flags again in the hope to crack down on some database + // corruption. + env_.open(cacheDirectory_.toStdString().c_str()); //, MDB_NOMETASYNC | MDB_NOSYNC); } catch (const lmdb::error &e) { if (e.code() != MDB_VERSION_MISMATCH && e.code() != MDB_INVALID) { throw std::runtime_error("LMDB initialization failed" + std::string(e.what())); From b92a3b8df5f7f2c4b87d3150902bd81303ecafc3 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Fri, 28 Oct 2022 10:13:41 -0400 Subject: [PATCH 13/84] Make sure we use qt5 macdeployqt --- .ci/macos/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/macos/build.sh b/.ci/macos/build.sh index ef95181c..5724b438 100755 --- a/.ci/macos/build.sh +++ b/.ci/macos/build.sh @@ -28,5 +28,5 @@ cmake --build build make -j 4 cp libqtjdenticon.dylib ../nheko.app/Contents/MacOS ) - macdeployqt nheko.app -always-overwrite -qmldir=../resources/qml/ + "$(brew --prefix qt5)/bin/macdeployqt" nheko.app -always-overwrite -qmldir=../resources/qml/ ) From 9138119dc42f914950e09ee4136d1cef62077e7c Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 28 Oct 2022 19:34:55 +0200 Subject: [PATCH 14/84] Fix reactions matching displayname condition by accident --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b456b1a..153f8cb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -593,7 +593,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG b19b81ce6a1cc792908ad900f23c80c6505ca357 + GIT_TAG 23dc88d8c3fb3bd20fd161f5b5fe6b4fe812d983 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 60ad7b1f..45113176 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: b19b81ce6a1cc792908ad900f23c80c6505ca357 + - commit: 23dc88d8c3fb3bd20fd161f5b5fe6b4fe812d983 #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git From 53bbfefbab60667f97642cb9ddb94ad352b02466 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 29 Oct 2022 18:59:23 -0400 Subject: [PATCH 15/84] Translated using Weblate (Russian) Currently translated at 33.0% (283 of 855 strings) Translated using Weblate (Russian) Currently translated at 33.0% (283 of 855 strings) Translated using Weblate (Russian) Currently translated at 33.0% (283 of 855 strings) Co-authored-by: Carmina16 Co-authored-by: Evgeny Co-authored-by: SOT-TECH Co-authored-by: Weblate Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/ru/ Translation: Nheko/nheko --- resources/langs/nheko_ru.ts | 51 +++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index e069a2b3..2db11a39 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -61,12 +61,12 @@ List of aliases to this room. Usually you can only add aliases on your server. You can have one canonical alias and many alternate aliases. - + Список псевдонимов (альтернативных имён) данной комнаты. Обычно, Вы можете задать псевдонимы лишь на своём домашнем сервере. Комнаты могут иметь лишь одно каноническое имя и множество псевдонимов. Primary alias - + Основное имя @@ -76,17 +76,17 @@ Advertise as an alias in this room - + Представиться в данной комнате под псевдонимом Publish in room directory - + Опубликовать в списке комнат Remove this alias - + Удалить псевдоним @@ -96,7 +96,7 @@ Add - + Добавить @@ -240,22 +240,22 @@ Knock on room - + Попросить приглашение Do you really want to knock on %1? You may optionally provide a reason for others to accept your knock: - + Вы действительно хотите попросить приглашение войти? Вы можете добавить причину Вашего визита (необязательно): Failed to knock room: %1 - + Не удалось попросить приглашение в комнату: %1 Room creation failed: Bad Alias - + Не удалось создать комнату: недопустимый псевдоним @@ -385,7 +385,7 @@ You may optionally provide a reason for others to accept your knock: Reason for the kick - + Причина исключения @@ -400,7 +400,7 @@ You may optionally provide a reason for others to accept your knock: Reason for the ban - + Причина блокировки @@ -410,7 +410,7 @@ You may optionally provide a reason for others to accept your knock: No network connection - + Отсутствует подключение к сети @@ -428,12 +428,12 @@ You may optionally provide a reason for others to accept your knock: Expand - + Развернуть Collapse - + Свернуть @@ -451,12 +451,12 @@ You may optionally provide a reason for others to accept your knock: Direct Chats - + Личные чаты Show direct chats. - + Показать личные чаты. @@ -466,7 +466,7 @@ You may optionally provide a reason for others to accept your knock: Rooms you have favourited. - + Комнаты, которые Вы отметили как «Избранные». @@ -486,7 +486,7 @@ You may optionally provide a reason for others to accept your knock: Messages from your server or administrator. - + Сообщения от вашего сервера или администратора. @@ -524,10 +524,10 @@ You may optionally provide a reason for others to accept your knock: %n member(s) - - - - + + %n участник + %n участника + %n участников @@ -4286,7 +4286,8 @@ Note that when this option is ON, opened files are left unencrypted on disk and Decrypt the messages shown in the sidebar. Only affects messages in encrypted chats. - Дешифровывать сообщение отображающиеся в сайдбаре. Действует только на шифрованные чаты. + Отображать расшифрованные сообщения в боковой панели (списке комнат). +Актуально только для комнат, в которых включено шифрование. @@ -4473,7 +4474,7 @@ This setting will take effect upon restart. Welcome to nheko! The desktop client for the Matrix protocol. - Добро пожаловать в Nheko, клиент для протокола Matrix! + Добро пожаловать в Nheko, клиент для протокола Matrix. From ee1a219661476721749f1ad534f82124da2fdea2 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 1 Nov 2022 14:56:23 +0100 Subject: [PATCH 16/84] Fix search rooms button --- resources/qml/RoomList.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index cfc0e215..b64df669 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -775,9 +775,9 @@ Page { ToolTip.text: qsTr("Search rooms (Ctrl+K)") Layout.margins: Nheko.paddingMedium onClicked: { - var quickSwitch = quickSwitcherComponent.createObject(timelineRoot); + var quickSwitch = Qt.createComponent("qrc:/qml/QuickSwitcher.qml").createObject(timelineRoot); quickSwitch.open(); - timelineRoot.destroyOnClose(quickSwitch); + destroyOnClosed(quickSwitch); } } From 676a6506cbf92c9a31fa4f382861630ede64187e Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 1 Nov 2022 20:58:01 +0100 Subject: [PATCH 17/84] Speedup sending encrypted messages after metasync was reenabled Calling fsync everytime we save to the db is slow, which is actually fairly noticeable in some larger E2EE rooms. Speed that up slightly by batching the olm session persisting. --- src/Cache.cpp | 23 ++++++ src/Cache_p.h | 2 + src/encryption/Olm.cpp | 157 ++++++++++++++++++++++------------------- 3 files changed, 109 insertions(+), 73 deletions(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index e090e40d..2784cf50 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -912,6 +912,29 @@ Cache::getMegolmSessionData(const MegolmSessionIndex &index) // OLM sessions. // +void +Cache::saveOlmSessions(std::vector> sessions, + uint64_t timestamp) +{ + using namespace mtx::crypto; + + auto txn = lmdb::txn::begin(env_); + for (const auto &[curve25519, session] : sessions) { + auto db = getOlmSessionsDb(txn, curve25519); + + const auto pickled = pickle(session.get(), pickle_secret_); + const auto session_id = mtx::crypto::session_id(session.get()); + + StoredOlmSession stored_session; + stored_session.pickled_session = pickled; + stored_session.last_message_ts = timestamp; + + db.put(txn, session_id, nlohmann::json(stored_session).dump()); + } + + txn.commit(); +} + void Cache::saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session, diff --git a/src/Cache_p.h b/src/Cache_p.h index 1694adb7..742e4aab 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -277,6 +277,8 @@ public: void saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session, uint64_t timestamp); + void saveOlmSessions(std::vector> sessions, + uint64_t timestamp); std::vector getOlmSessions(const std::string &curve25519); std::optional getOlmSession(const std::string &curve25519, const std::string &session_id); diff --git a/src/encryption/Olm.cpp b/src/encryption/Olm.cpp index 7ada2f92..a9d5b1c2 100644 --- a/src/encryption/Olm.cpp +++ b/src/encryption/Olm.cpp @@ -1299,78 +1299,83 @@ send_encrypted_to_device_messages(const std::mapidentity_keys().curve25519; - for (const auto &[user, devices] : targets) { - auto deviceKeys = cache::client()->userKeys(user); + { + auto currentTime = QDateTime::currentSecsSinceEpoch(); + std::vector> sessionsToPersist; - // no keys for user, query them - if (!deviceKeys) { - keysToQuery[user] = devices; - continue; - } + for (const auto &[user, devices] : targets) { + auto deviceKeys = cache::client()->userKeys(user); - auto deviceTargets = devices; - if (devices.empty()) { - deviceTargets.clear(); - deviceTargets.reserve(deviceKeys->device_keys.size()); - for (const auto &[device, keys] : deviceKeys->device_keys) { - (void)keys; - deviceTargets.push_back(device); - } - } - - for (const auto &device : deviceTargets) { - if (!deviceKeys->device_keys.count(device)) { - keysToQuery[user] = {}; - break; - } - - auto d = deviceKeys->device_keys.at(device); - - if (!d.keys.count("curve25519:" + device) || !d.keys.count("ed25519:" + device)) { - nhlog::crypto()->warn("Skipping device {} since it has no keys!", device); + // no keys for user, query them + if (!deviceKeys) { + keysToQuery[user] = devices; continue; } - auto device_curve = d.keys.at("curve25519:" + device); - if (device_curve == our_curve) { - nhlog::crypto()->warn("Skipping our own device, since sending " - "ourselves olm messages makes no sense."); - continue; - } - - auto session = cache::getLatestOlmSession(device_curve); - if (!session || force_new_session) { - auto currentTime = QDateTime::currentSecsSinceEpoch(); - if (rateLimit.value(QPair(user, device)) + 60 * 60 * 10 < currentTime) { - claims.one_time_keys[user][device] = mtx::crypto::SIGNED_CURVE25519; - pks[user][device].ed25519 = d.keys.at("ed25519:" + device); - pks[user][device].curve25519 = d.keys.at("curve25519:" + device); - - rateLimit.insert(QPair(user, device), currentTime); - } else { - nhlog::crypto()->warn("Not creating new session with {}:{} " - "because of rate limit", - user, - device); + auto deviceTargets = devices; + if (devices.empty()) { + deviceTargets.clear(); + deviceTargets.reserve(deviceKeys->device_keys.size()); + for (const auto &[device, keys] : deviceKeys->device_keys) { + (void)keys; + deviceTargets.push_back(device); } - continue; } - messages[mtx::identifiers::parse(user)][device] = - olm::client() - ->create_olm_encrypted_content(session->get(), - ev_json, - UserId(user), - d.keys.at("ed25519:" + device), - device_curve) - .get(); + for (const auto &device : deviceTargets) { + if (!deviceKeys->device_keys.count(device)) { + keysToQuery[user] = {}; + break; + } + const auto &d = deviceKeys->device_keys.at(device); + + if (!d.keys.count("curve25519:" + device) || !d.keys.count("ed25519:" + device)) { + nhlog::crypto()->warn("Skipping device {} since it has no keys!", device); + continue; + } + + auto device_curve = d.keys.at("curve25519:" + device); + if (device_curve == our_curve) { + nhlog::crypto()->warn("Skipping our own device, since sending " + "ourselves olm messages makes no sense."); + continue; + } + + auto session = cache::getLatestOlmSession(device_curve); + if (!session || force_new_session) { + if (rateLimit.value(QPair(user, device)) + 60 * 60 * 10 < currentTime) { + claims.one_time_keys[user][device] = mtx::crypto::SIGNED_CURVE25519; + pks[user][device].ed25519 = d.keys.at("ed25519:" + device); + pks[user][device].curve25519 = d.keys.at("curve25519:" + device); + + rateLimit.insert(QPair(user, device), currentTime); + } else { + nhlog::crypto()->warn("Not creating new session with {}:{} " + "because of rate limit", + user, + device); + } + continue; + } + + messages[mtx::identifiers::parse(user)][device] = + olm::client() + ->create_olm_encrypted_content(session->get(), + ev_json, + UserId(user), + d.keys.at("ed25519:" + device), + device_curve) + .get(); + sessionsToPersist.emplace_back(d.keys.at("curve25519:" + device), + std::move(*session)); + } + } + + if (!sessionsToPersist.empty()) { try { - nhlog::crypto()->debug("Updated olm session: {}", - mtx::crypto::session_id(session->get())); - cache::saveOlmSession(d.keys.at("curve25519:" + device), - std::move(*session), - QDateTime::currentMSecsSinceEpoch()); + nhlog::crypto()->debug("Updated olm sessions: {}", sessionsToPersist.size()); + cache::client()->saveOlmSessions(std::move(sessionsToPersist), currentTime); } catch (const lmdb::error &e) { nhlog::db()->critical("failed to save outbound olm session: {}", e.what()); } catch (const mtx::crypto::olm_exception &e) { @@ -1395,6 +1400,9 @@ send_encrypted_to_device_messages(const std::map> messages; + auto currentTime = QDateTime::currentSecsSinceEpoch(); + std::vector> sessionsToPersist; + for (const auto &[user_id, retrieved_devices] : res.one_time_keys) { nhlog::net()->debug("claimed keys for {}", user_id); if (retrieved_devices.size() == 0) { @@ -1440,21 +1448,24 @@ send_encrypted_to_device_messages(const std::map(); - try { - nhlog::crypto()->debug("Updated olm session: {}", - mtx::crypto::session_id(session.get())); - cache::saveOlmSession( - id_key, std::move(session), QDateTime::currentMSecsSinceEpoch()); - } catch (const lmdb::error &e) { - nhlog::db()->critical("failed to save outbound olm session: {}", e.what()); - } catch (const mtx::crypto::olm_exception &e) { - nhlog::crypto()->critical("failed to pickle outbound olm session: {}", - e.what()); - } + sessionsToPersist.emplace_back(id_key, std::move(session)); } nhlog::net()->info("send_to_device: {}", user_id); } + if (!sessionsToPersist.empty()) { + try { + nhlog::crypto()->debug("Updated (new) olm sessions: {}", + sessionsToPersist.size()); + cache::client()->saveOlmSessions(std::move(sessionsToPersist), currentTime); + } catch (const lmdb::error &e) { + nhlog::db()->critical("failed to save outbound olm session: {}", e.what()); + } catch (const mtx::crypto::olm_exception &e) { + nhlog::crypto()->critical("failed to pickle outbound olm session: {}", + e.what()); + } + } + if (!messages.empty()) http::client()->send_to_device( http::client()->generate_txn_id(), messages, [](mtx::http::RequestErr err) { From 54931cb21b080d079a80978e88e8e79e6c43196f Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 1 Nov 2022 21:13:11 +0100 Subject: [PATCH 18/84] Optimize fetching olm session from the db --- src/Cache.cpp | 53 +++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index 2784cf50..cb4ee0b0 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -962,19 +962,20 @@ Cache::getOlmSession(const std::string &curve25519, const std::string &session_i { using namespace mtx::crypto; - auto txn = lmdb::txn::begin(env_); - auto db = getOlmSessionsDb(txn, curve25519); + try { + auto txn = ro_txn(env_); + auto db = getOlmSessionsDb(txn, curve25519); - std::string_view pickled; - bool found = db.get(txn, session_id, pickled); + std::string_view pickled; + bool found = db.get(txn, session_id, pickled); - txn.commit(); + if (found) { + auto data = nlohmann::json::parse(pickled).get(); + return unpickle(data.pickled_session, pickle_secret_); + } - if (found) { - auto data = nlohmann::json::parse(pickled).get(); - return unpickle(data.pickled_session, pickle_secret_); + } catch (...) { } - return std::nullopt; } @@ -983,26 +984,28 @@ Cache::getLatestOlmSession(const std::string &curve25519) { using namespace mtx::crypto; - auto txn = lmdb::txn::begin(env_); - auto db = getOlmSessionsDb(txn, curve25519); + try { + auto txn = ro_txn(env_); + auto db = getOlmSessionsDb(txn, curve25519); - std::string_view session_id, pickled_session; + std::string_view session_id, pickled_session; - std::optional currentNewest; + std::optional currentNewest; - auto cursor = lmdb::cursor::open(txn, db); - while (cursor.get(session_id, pickled_session, MDB_NEXT)) { - auto data = nlohmann::json::parse(pickled_session).get(); - if (!currentNewest || currentNewest->last_message_ts < data.last_message_ts) - currentNewest = data; + auto cursor = lmdb::cursor::open(txn, db); + while (cursor.get(session_id, pickled_session, MDB_NEXT)) { + auto data = nlohmann::json::parse(pickled_session).get(); + if (!currentNewest || currentNewest->last_message_ts < data.last_message_ts) + currentNewest = data; + } + cursor.close(); + + return currentNewest ? std::optional(unpickle(currentNewest->pickled_session, + pickle_secret_)) + : std::nullopt; + } catch (...) { + return std::nullopt; } - cursor.close(); - - txn.commit(); - - return currentNewest ? std::optional(unpickle(currentNewest->pickled_session, - pickle_secret_)) - : std::nullopt; } std::vector From 231bebba44d3c79834d2b31677a21d46b7ca7076 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 1 Nov 2022 21:26:31 +0100 Subject: [PATCH 19/84] The hybris of committing a line without linting --- src/Cache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index cb4ee0b0..3426ccfe 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -964,7 +964,7 @@ Cache::getOlmSession(const std::string &curve25519, const std::string &session_i try { auto txn = ro_txn(env_); - auto db = getOlmSessionsDb(txn, curve25519); + auto db = getOlmSessionsDb(txn, curve25519); std::string_view pickled; bool found = db.get(txn, session_id, pickled); @@ -986,7 +986,7 @@ Cache::getLatestOlmSession(const std::string &curve25519) try { auto txn = ro_txn(env_); - auto db = getOlmSessionsDb(txn, curve25519); + auto db = getOlmSessionsDb(txn, curve25519); std::string_view session_id, pickled_session; From 40ac55ddd9f1ba02e37f189ba7566d8d95699b4c Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 1 Nov 2022 23:26:21 +0100 Subject: [PATCH 20/84] Highlight higlight tweaks in the timeline fixes #400 fixes #1136 --- resources/qml/MessageView.qml | 2 ++ resources/qml/TimelineRow.qml | 3 +++ src/ChatPage.h | 5 +++++ src/timeline/TimelineModel.cpp | 21 +++++++++++++++++++++ src/timeline/TimelineModel.h | 9 +++++++++ 5 files changed, 40 insertions(+) diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml index f94fc4a9..8e6ad8d2 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml @@ -415,6 +415,7 @@ Item { required property string callType required property var reactions required property int trustlevel + required property int notificationlevel required property int encryptionError required property var timestamp required property int status @@ -482,6 +483,7 @@ Item { callType: wrapper.callType reactions: wrapper.reactions trustlevel: wrapper.trustlevel + notificationlevel: wrapper.notificationlevel encryptionError: wrapper.encryptionError timestamp: wrapper.timestamp status: wrapper.status diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index 181b64ff..01e58cdf 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -41,6 +41,7 @@ AbstractButton { required property string callType required property var reactions required property int trustlevel + required property int notificationlevel required property int encryptionError required property int duration required property var timestamp @@ -117,6 +118,8 @@ AbstractButton { property color bgColor: Nheko.colors.base color: (Settings.bubbles && !isStateEvent) ? Qt.tint(bgColor, Qt.hsla(userColor.hslHue, 0.5, userColor.hslLightness, 0.2)) : "#00000000" radius: 4 + border.width: r.notificationlevel == MtxEvent.Highlight ? 2 : 0 + border.color: Nheko.theme.red GridLayout { anchors { diff --git a/src/ChatPage.h b/src/ChatPage.h index 1bb25dc2..6e1095b9 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -78,6 +78,11 @@ public: //! Check if the given room is currently open. bool isRoomActive(const QString &room_id); + const std::unique_ptr &pushruleEvaluator() const + { + return pushrules; + } + public slots: bool handleMatrixUri(QString uri); bool handleMatrixUri(const QUrl &uri); diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 6cf361aa..b20e36bc 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -526,6 +526,7 @@ TimelineModel::roleNames() const {IsEncrypted, "isEncrypted"}, {IsStateEvent, "isStateEvent"}, {Trustlevel, "trustlevel"}, + {Notificationlevel, "notificationlevel"}, {EncryptionError, "encryptionError"}, {ReplyTo, "replyTo"}, {ThreadId, "threadId"}, @@ -737,6 +738,26 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r return crypto::Trust::Unverified; } + case Notificationlevel: { + const auto &push = ChatPage::instance()->pushruleEvaluator(); + if (push) { + auto actions = push->evaluate({event}, pushrulesRoomContext()); + if (std::find(actions.begin(), + actions.end(), + mtx::pushrules::actions::Action{ + mtx::pushrules::actions::set_tweak_highlight{}}) != actions.end()) { + return qml_mtx_events::NotificationLevel::Highlight; + } + if (std::find(actions.begin(), + actions.end(), + mtx::pushrules::actions::Action{mtx::pushrules::actions::notify{}}) != + actions.end()) { + return qml_mtx_events::NotificationLevel::Notify; + } + } + return qml_mtx_events::NotificationLevel::Nothing; + } + case EncryptionError: return events.decryptionError(event_id(event)); diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 8bf18f19..9cd60e5d 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -151,6 +151,14 @@ enum EventState Empty, }; Q_ENUM_NS(EventState) + +enum NotificationLevel +{ + Nothing, + Notify, + Highlight, +}; +Q_ENUM_NS(NotificationLevel) } class StateKeeper @@ -242,6 +250,7 @@ public: IsEncrypted, IsStateEvent, Trustlevel, + Notificationlevel, EncryptionError, ReplyTo, ThreadId, From 0ae29d8bfcd49a16fa6315bf95cd112f6a126974 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 2 Nov 2022 19:34:56 +0100 Subject: [PATCH 21/84] Fix content rules matching everything fixes #1218 --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 153f8cb9..fd942fe9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -593,7 +593,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 23dc88d8c3fb3bd20fd161f5b5fe6b4fe812d983 + GIT_TAG a1b7b81ce00ef5808eac0fdd895a95044e1b07ed ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 45113176..69be7301 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: 23dc88d8c3fb3bd20fd161f5b5fe6b4fe812d983 + - commit: a1b7b81ce00ef5808eac0fdd895a95044e1b07ed #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git From 56a4e972962fcba064c624ae7f7f47c95f0bec8b Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 3 Nov 2022 14:45:00 +0100 Subject: [PATCH 22/84] Make the higlight ring a bit less in your face --- resources/qml/TimelineRow.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index 01e58cdf..66128846 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -118,7 +118,7 @@ AbstractButton { property color bgColor: Nheko.colors.base color: (Settings.bubbles && !isStateEvent) ? Qt.tint(bgColor, Qt.hsla(userColor.hslHue, 0.5, userColor.hslLightness, 0.2)) : "#00000000" radius: 4 - border.width: r.notificationlevel == MtxEvent.Highlight ? 2 : 0 + border.width: r.notificationlevel == MtxEvent.Highlight ? 1 : 0 border.color: Nheko.theme.red GridLayout { From 76347f1c6f3aa41654fb989d1726d7ce4b56795e Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 3 Nov 2022 23:26:59 +0100 Subject: [PATCH 23/84] Continue fetching past messages when searching --- src/Cache.cpp | 98 +++++++++++++++++---------------- src/timeline/EventStore.cpp | 11 ++-- src/timeline/TimelineFilter.cpp | 32 ++++++++++- src/timeline/TimelineFilter.h | 4 ++ src/timeline/TimelineModel.cpp | 1 + src/timeline/TimelineModel.h | 2 + 6 files changed, 94 insertions(+), 54 deletions(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index 3426ccfe..b577f201 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -1013,20 +1013,22 @@ Cache::getOlmSessions(const std::string &curve25519) { using namespace mtx::crypto; - auto txn = lmdb::txn::begin(env_); - auto db = getOlmSessionsDb(txn, curve25519); + try { + auto txn = ro_txn(env_); + auto db = getOlmSessionsDb(txn, curve25519); - std::string_view session_id, unused; - std::vector res; + std::string_view session_id, unused; + std::vector res; - auto cursor = lmdb::cursor::open(txn, db); - while (cursor.get(session_id, unused, MDB_NEXT)) - res.emplace_back(session_id); - cursor.close(); + auto cursor = lmdb::cursor::open(txn, db); + while (cursor.get(session_id, unused, MDB_NEXT)) + res.emplace_back(session_id); + cursor.close(); - txn.commit(); - - return res; + return res; + } catch (...) { + return {}; + } } void @@ -2173,18 +2175,22 @@ Cache::roomIds() std::string Cache::previousBatchToken(const std::string &room_id) { - auto txn = lmdb::txn::begin(env_, nullptr); - auto orderDb = getEventOrderDb(txn, room_id); + auto txn = ro_txn(env_); + try { + auto orderDb = getEventOrderDb(txn, room_id); - auto cursor = lmdb::cursor::open(txn, orderDb); - std::string_view indexVal, val; - if (!cursor.get(indexVal, val, MDB_FIRST)) { + auto cursor = lmdb::cursor::open(txn, orderDb); + std::string_view indexVal, val; + if (!cursor.get(indexVal, val, MDB_FIRST)) { + return ""; + } + + auto j = nlohmann::json::parse(val); + + return j.value("prev_batch", ""); + } catch (...) { return ""; } - - auto j = nlohmann::json::parse(val); - - return j.value("prev_batch", ""); } Cache::Messages @@ -3206,10 +3212,10 @@ Cache::pendingEvents(const std::string &room_id) std::optional Cache::firstPendingMessage(const std::string &room_id) { - auto txn = lmdb::txn::begin(env_); + auto txn = ro_txn(env_); auto pending = getPendingMessagesDb(txn, room_id); - { + try { auto pendingCursor = lmdb::cursor::open(txn, pending); std::string_view tsIgnored, pendingTxn; while (pendingCursor.get(tsIgnored, pendingTxn, MDB_NEXT)) { @@ -3225,7 +3231,6 @@ Cache::firstPendingMessage(const std::string &room_id) from_json(nlohmann::json::parse(event), te); pendingCursor.close(); - txn.commit(); return te; } catch (std::exception &e) { nhlog::db()->error("Failed to parse message from cache {}", e.what()); @@ -3233,10 +3238,8 @@ Cache::firstPendingMessage(const std::string &room_id) continue; } } + } catch (const lmdb::error &e) { } - - txn.commit(); - return std::nullopt; } @@ -3998,33 +4001,36 @@ Cache::hasEnoughPowerLevel(const std::vector &eventTypes using namespace mtx::events; using namespace mtx::events::state; - auto txn = lmdb::txn::begin(env_); - auto db = getStatesDb(txn, room_id); + auto txn = ro_txn(env_); + try { + auto db = getStatesDb(txn, room_id); - int64_t min_event_level = std::numeric_limits::max(); - int64_t user_level = std::numeric_limits::min(); + int64_t min_event_level = std::numeric_limits::max(); + int64_t user_level = std::numeric_limits::min(); - std::string_view event; - bool res = db.get(txn, to_string(EventType::RoomPowerLevels), event); + std::string_view event; + bool res = db.get(txn, to_string(EventType::RoomPowerLevels), event); - if (res) { - try { - StateEvent msg = - nlohmann::json::parse(std::string_view(event.data(), event.size())) - .get>(); + if (res) { + try { + StateEvent msg = + nlohmann::json::parse(std::string_view(event.data(), event.size())) + .get>(); - user_level = msg.content.user_level(user_id); + user_level = msg.content.user_level(user_id); - for (const auto &ty : eventTypes) - min_event_level = std::min(min_event_level, msg.content.state_level(to_string(ty))); - } catch (const nlohmann::json::exception &e) { - nhlog::db()->warn("failed to parse m.room.power_levels event: {}", e.what()); + for (const auto &ty : eventTypes) + min_event_level = + std::min(min_event_level, msg.content.state_level(to_string(ty))); + } catch (const nlohmann::json::exception &e) { + nhlog::db()->warn("failed to parse m.room.power_levels event: {}", e.what()); + } } + + return user_level >= min_event_level; + } catch (...) { + return false; } - - txn.commit(); - - return user_level >= min_event_level; } std::vector diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index de813196..65efc0b4 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -80,8 +80,8 @@ EventStore::EventStore(std::string room_id, QObject *) emit beginInsertRows(toExternalIdx(newFirst), toExternalIdx(this->first - 1)); this->first = newFirst; emit endInsertRows(); - emit fetchedMore(); emit dataChanged(toExternalIdx(oldFirst), toExternalIdx(oldFirst)); + emit fetchedMore(); } else { auto range = cache::client()->getTimelineRange(room_id_); @@ -725,10 +725,11 @@ EventStore::decryptEvent(const IdIndex &idx, case olm::DecryptionErrorCode::ParsingFailed: break; case olm::DecryptionErrorCode::ReplayAttack: - nhlog::crypto()->critical("Reply attack while decryptiong event {} in room {} from {}!", - e.event_id, - room_id_, - e.sender); + nhlog::crypto()->critical( + "Replay attack while decryptiong event {} in room {} from {}!", + e.event_id, + room_id_, + e.sender); break; case olm::DecryptionErrorCode::NoError: // unreachable diff --git a/src/timeline/TimelineFilter.cpp b/src/timeline/TimelineFilter.cpp index 15d2590c..cd17a7f6 100644 --- a/src/timeline/TimelineFilter.cpp +++ b/src/timeline/TimelineFilter.cpp @@ -19,8 +19,10 @@ TimelineFilter::setThreadId(const QString &t) if (this->threadId != t) { this->threadId = t; invalidateFilter(); + + fetchMore({}); + emit threadIdChanged(); } - emit threadIdChanged(); } void @@ -30,21 +32,45 @@ TimelineFilter::setContentFilter(const QString &c) if (this->contentFilter != c) { this->contentFilter = c; invalidateFilter(); + + fetchMore({}); + emit contentFilterChanged(); + } +} + +void +TimelineFilter::fetchAgain() +{ + if (threadId.isEmpty() && contentFilter.isEmpty()) + return; + + if (auto s = source()) { + if (rowCount() == cachedCount && s->canFetchMore(QModelIndex())) + s->fetchMore(QModelIndex()); + else + cachedCount = rowCount(); } - emit contentFilterChanged(); } void TimelineFilter::setSource(TimelineModel *s) { if (auto orig = this->source(); orig != s) { - if (orig) + cachedCount = 0; + + if (orig) { disconnect(orig, &TimelineModel::currentIndexChanged, this, &TimelineFilter::currentIndexChanged); + disconnect(orig, &TimelineModel::fetchedMore, this, &TimelineFilter::fetchAgain); + } + this->setSourceModel(s); + connect(s, &TimelineModel::currentIndexChanged, this, &TimelineFilter::currentIndexChanged); + connect(s, &TimelineModel::fetchedMore, this, &TimelineFilter::fetchAgain); + emit sourceChanged(); invalidateFilter(); } diff --git a/src/timeline/TimelineFilter.h b/src/timeline/TimelineFilter.h index 3b04650e..a602f84f 100644 --- a/src/timeline/TimelineFilter.h +++ b/src/timeline/TimelineFilter.h @@ -45,9 +45,13 @@ signals: void sourceChanged(); void currentIndexChanged(); +private slots: + void fetchAgain(); + protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; private: QString threadId, contentFilter; + int cachedCount = 0; }; diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index b20e36bc..6b764081 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -449,6 +449,7 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj connect(&events, &EventStore::fetchedMore, this, [this]() { setPaginationInProgress(false); updateLastMessage(); + emit fetchedMore(); }); connect(&events, &EventStore::fetchedMore, this, &TimelineModel::checkAfterFetch); connect(&events, diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 9cd60e5d..9daeeb3a 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -465,6 +465,8 @@ signals: void scrollTargetChanged(); + void fetchedMore(); + private: template void sendEncryptedMessage(mtx::events::RoomEvent msg, mtx::events::EventType eventType); From 07e8f64903a6d4c496c7eb53f95325c92a427286 Mon Sep 17 00:00:00 2001 From: Joe Donofry Date: Fri, 4 Nov 2022 16:42:09 +0000 Subject: [PATCH 24/84] Add ability to respond to notifications on macOS --- .clang-format | 3 + CMakeLists.txt | 4 +- src/ChatPage.cpp | 24 +- src/ChatPage.h | 1 + src/main.cpp | 5 + src/notifications/MacNotificationDelegate.h | 20 ++ src/notifications/MacNotificationDelegate.mm | 47 ++++ src/notifications/Manager.h | 8 +- src/notifications/ManagerMac.cpp | 37 ++- src/notifications/ManagerMac.mm | 235 ++++++++++++------- src/notifications/NotificationManagerProxy.h | 22 ++ 11 files changed, 307 insertions(+), 99 deletions(-) create mode 100644 src/notifications/MacNotificationDelegate.h create mode 100644 src/notifications/MacNotificationDelegate.mm create mode 100644 src/notifications/NotificationManagerProxy.h diff --git a/.clang-format b/.clang-format index e9ebcb6d..adb43177 100644 --- a/.clang-format +++ b/.clang-format @@ -13,3 +13,6 @@ KeepEmptyLinesAtTheStartOfBlocks: false PointerAlignment: Right Cpp11BracedListStyle: true PenaltyReturnTypeOnItsOwnLine: 0 +--- +BasedOnStyle: WebKit +Language: ObjC \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 153f8cb9..37ee6feb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -629,9 +629,9 @@ set(TRANSLATION_DEPS ${LANG_QRC} ${QRC} ${QM_SRC}) if (APPLE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Foundation -framework Cocoa -framework UserNotifications") - set(SRC_FILES ${SRC_FILES} src/notifications/ManagerMac.mm src/notifications/ManagerMac.cpp src/emoji/MacHelper.mm src/emoji/MacHelper.h) + set(SRC_FILES ${SRC_FILES} src/notifications/NotificationManagerProxy.h src/notifications/MacNotificationDelegate.h src/notifications/MacNotificationDelegate.mm src/notifications/ManagerMac.mm src/notifications/ManagerMac.cpp src/emoji/MacHelper.mm src/emoji/MacHelper.h) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0") - set_source_files_properties( src/notifications/ManagerMac.mm src/emoji/MacHelper.mm src/emoji/MacHelper.h PROPERTIES SKIP_PRECOMPILE_HEADERS ON) + set_source_files_properties( src/notifications/NotificationManagerProxy.h src/notifications/MacNotificationDelegate.h src/notifications/MacNotificationDelegate.mm src/notifications/ManagerMac.mm src/emoji/MacHelper.mm src/emoji/MacHelper.h PROPERTIES SKIP_PRECOMPILE_HEADERS ON) endif() elseif (WIN32) file(DOWNLOAD diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index e40274cb..f87c2738 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -152,16 +152,7 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) connect(notificationsManager, &NotificationsManager::sendNotificationReply, this, - [this](const QString &roomid, const QString &eventid, const QString &body) { - view_manager_->queueReply(roomid, eventid, body); - auto exWin = MainWindow::instance()->windowForRoom(roomid); - if (exWin) { - exWin->requestActivate(); - } else { - view_manager_->rooms()->setCurrentRoom(roomid); - MainWindow::instance()->requestActivate(); - } - }); + &ChatPage::sendNotificationReply); connect( this, @@ -1583,6 +1574,19 @@ ChatPage::handleMatrixUri(QString uri) return false; } +void +ChatPage::sendNotificationReply(const QString &roomid, const QString &eventid, const QString &body) +{ + view_manager_->queueReply(roomid, eventid, body); + auto exWin = MainWindow::instance()->windowForRoom(roomid); + if (exWin) { + exWin->requestActivate(); + } else { + view_manager_->rooms()->setCurrentRoom(roomid); + MainWindow::instance()->requestActivate(); + } +} + bool ChatPage::handleMatrixUri(const QUrl &uri) { diff --git a/src/ChatPage.h b/src/ChatPage.h index 1bb25dc2..bae4401f 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -105,6 +105,7 @@ public slots: void receivedSessionKey(const std::string &room_id, const std::string &session_id); void decryptDownloadedSecrets(mtx::secret_storage::AesHmacSha2KeyDescription keyDesc, const SecretsToDecrypt &secrets); + void sendNotificationReply(const QString &roomid, const QString &eventid, const QString &body); signals: void connectionLost(); void connectionRestored(); diff --git a/src/main.cpp b/src/main.cpp index 3937c6b7..d1b4b769 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -33,6 +33,7 @@ #if defined(Q_OS_MAC) #include "emoji/MacHelper.h" +#include "notifications/Manager.h" #endif #if defined(GSTREAMER_AVAILABLE) && (defined(Q_OS_MAC) || defined(Q_OS_WINDOWS)) @@ -389,6 +390,10 @@ main(int argc, char *argv[]) // Temporary solution for the emoji picker until // nheko has a proper menu bar with more functionality. MacHelper::initializeMenus(); + + // Need to set up notification delegate so users can respond to messages from within the + // notification itself. + NotificationsManager::attachToMacNotifCenter(); #endif nhlog::ui()->info("starting nheko {}", nheko::version); diff --git a/src/notifications/MacNotificationDelegate.h b/src/notifications/MacNotificationDelegate.h new file mode 100644 index 00000000..e5bbe23b --- /dev/null +++ b/src/notifications/MacNotificationDelegate.h @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include "notifications/Manager.h" +#include "notifications/NotificationManagerProxy.h" +#include + +#import +#import + +@interface MacNotificationDelegate : NSObject { + std::unique_ptr mProxy; +} + +- (id)initWithProxy:(std::unique_ptr&&)proxy; +@end diff --git a/src/notifications/MacNotificationDelegate.mm b/src/notifications/MacNotificationDelegate.mm new file mode 100644 index 00000000..9047efe3 --- /dev/null +++ b/src/notifications/MacNotificationDelegate.mm @@ -0,0 +1,47 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#import "notifications/MacNotificationDelegate.h" + +#include + +#include "ChatPage.h" + +@implementation MacNotificationDelegate + +- (id)initWithProxy: (std::unique_ptr&&)proxy +{ + if(self = [super init]) { + mProxy = std::move(proxy); + } + + return self; +} + +- (void)userNotificationCenter:(UNUserNotificationCenter*)center + didReceiveNotificationResponse:(UNNotificationResponse*)response + withCompletionHandler:(void (^)())completionHandler +{ + if ([response.actionIdentifier isEqualToString:@"ReplyAction"]) { + if ([response respondsToSelector:@selector(userText)]) { + UNTextInputNotificationResponse* textResponse = (UNTextInputNotificationResponse*)response; + NSString* textValue = [textResponse userText]; + NSString* eventId = [[[textResponse notification] request] identifier]; + NSString* roomId = [[[[textResponse notification] request] content] threadIdentifier]; + mProxy->notificationReplied(QString::fromNSString(roomId), QString::fromNSString(eventId), QString::fromNSString(textValue)); + } + } + completionHandler(); +} + +- (void)userNotificationCenter:(UNUserNotificationCenter*)center + willPresentNotification:(UNNotification*)notification + withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler +{ + + completionHandler(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound); +} + +@end \ No newline at end of file diff --git a/src/notifications/Manager.h b/src/notifications/Manager.h index 8a5f1725..de678738 100644 --- a/src/notifications/Manager.h +++ b/src/notifications/Manager.h @@ -78,7 +78,13 @@ private: const QString &event_id, const QString &subtitle, const QString &informativeText, - const QString &bodyImagePath); + const QString &bodyImagePath, + const QString &respondStr, + const QString &sendStr, + const QString &placeholder); + +public: + static void attachToMacNotifCenter(); #endif #if defined(Q_OS_WINDOWS) diff --git a/src/notifications/ManagerMac.cpp b/src/notifications/ManagerMac.cpp index d5faaf59..75ea838c 100644 --- a/src/notifications/ManagerMac.cpp +++ b/src/notifications/ManagerMac.cpp @@ -40,12 +40,20 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if const auto isEncrypted = std::get_if>( ¬ification.event) != nullptr; const auto isReply = utils::isReply(notification.event); + + // Putting these here to pass along since I'm not sure how + // our translate step interacts with .mm files + const auto respondStr = QObject::tr("Respond"); + const auto sendStr = QObject::tr("Send"); + const auto placeholder = QObject::tr("Write a message..."); + if (isEncrypted) { // TODO: decrypt this message if the decryption setting is on in the UserSettings const QString messageInfo = (isReply ? tr("%1 replied with an encrypted message") : tr("%1 sent an encrypted message")) .arg(sender); - objCxxPostNotification(room_name, room_id, event_id, messageInfo, "", ""); + objCxxPostNotification( + room_name, room_id, event_id, messageInfo, "", "", respondStr, sendStr, placeholder); } else { const QString messageInfo = (isReply ? tr("%1 replied to a message") : tr("%1 sent a message")).arg(sender); @@ -53,17 +61,34 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if MxcImageProvider::download( QString::fromStdString(mtx::accessors::url(notification.event)).remove("mxc://"), QSize(200, 80), - [this, notification, room_name, room_id, event_id, messageInfo]( - QString, QSize, QImage, QString imgPath) { + [this, + notification, + room_name, + room_id, + event_id, + messageInfo, + respondStr, + sendStr, + placeholder](QString, QSize, QImage, QString imgPath) { objCxxPostNotification(room_name, room_id, event_id, messageInfo, formatNotification(notification), - imgPath); + imgPath, + respondStr, + sendStr, + placeholder); }); else - objCxxPostNotification( - room_name, room_id, event_id, messageInfo, formatNotification(notification), ""); + objCxxPostNotification(room_name, + room_id, + event_id, + messageInfo, + formatNotification(notification), + "", + respondStr, + sendStr, + placeholder); } } diff --git a/src/notifications/ManagerMac.mm b/src/notifications/ManagerMac.mm index d5d900a7..4865e30d 100644 --- a/src/notifications/ManagerMac.mm +++ b/src/notifications/ManagerMac.mm @@ -1,112 +1,187 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "notifications/NotificationManagerProxy.h" +#include "notifications/MacNotificationDelegate.h" #include "notifications/Manager.h" -#import +#include "ChatPage.h" + #import +#import #import -#include #include +#include @interface UNNotificationAttachment (UNNotificationAttachmentAdditions) - + (UNNotificationAttachment *) createFromImageData:(NSData*)imgData identifier:(NSString *)imageFileIdentifier options:(NSDictionary*)attachmentOptions; ++ (UNNotificationAttachment*)createFromImageData:(NSData*)imgData + identifier:(NSString*)imageFileIdentifier + options: + (NSDictionary*)attachmentOptions; @end @implementation UNNotificationAttachment (UNNotificationAttachmentAdditions) - + (UNNotificationAttachment *) createFromImageData:(NSData*)imgData identifier:(NSString *)imageFileIdentifier options:(NSDictionary*)attachmentOptions { - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSString *tmpSubFolderName = [[NSProcessInfo processInfo] globallyUniqueString]; - NSURL *tmpSubFolderURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:tmpSubFolderName] isDirectory:true]; - NSError *error = nil; - [fileManager createDirectoryAtURL:tmpSubFolderURL withIntermediateDirectories:true attributes:nil error:&error]; - if(error) { - NSLog(@"%@",[error localizedDescription]); - return nil; - } - NSURL *fileURL = [tmpSubFolderURL URLByAppendingPathComponent:imageFileIdentifier]; - [imgData writeToURL:fileURL atomically:true]; - UNNotificationAttachment *imageAttachment = [UNNotificationAttachment attachmentWithIdentifier:@"" URL:fileURL options:attachmentOptions error:&error]; - if(error) { - NSLog(@"%@",[error localizedDescription]); - return nil; - } - return imageAttachment; - ++ (UNNotificationAttachment*)createFromImageData:(NSData*)imgData + identifier:(NSString*)imageFileIdentifier + options: + (NSDictionary*)attachmentOptions +{ + NSFileManager* fileManager = [NSFileManager defaultManager]; + NSString* tmpSubFolderName = + [[NSProcessInfo processInfo] globallyUniqueString]; + NSURL* tmpSubFolderURL = [NSURL + fileURLWithPath:[NSTemporaryDirectory() + stringByAppendingPathComponent:tmpSubFolderName] + isDirectory:true]; + NSError* error = nil; + [fileManager createDirectoryAtURL:tmpSubFolderURL + withIntermediateDirectories:true + attributes:nil + error:&error]; + if (error) { + NSLog(@"%@", [error localizedDescription]); + return nil; } + NSURL* fileURL = + [tmpSubFolderURL URLByAppendingPathComponent:imageFileIdentifier]; + [imgData writeToURL:fileURL atomically:true]; + UNNotificationAttachment* imageAttachment = + [UNNotificationAttachment attachmentWithIdentifier:@"" + URL:fileURL + options:attachmentOptions + error:&error]; + if (error) { + NSLog(@"%@", [error localizedDescription]); + return nil; + } + return imageAttachment; +} @end -NotificationsManager::NotificationsManager(QObject *parent): QObject(parent) +NotificationsManager::NotificationsManager(QObject* parent) + : QObject(parent) { - } -void -NotificationsManager::objCxxPostNotification(const QString &room_name, - const QString &room_id, - const QString &event_id, - const QString &subtitle, - const QString &informativeText, - const QString &bodyImagePath) +void NotificationsManager::objCxxPostNotification( + const QString& room_name, + const QString& room_id, + const QString& event_id, + const QString& subtitle, + const QString& informativeText, + const QString& bodyImagePath, + const QString& respondStr, + const QString& sendStr, + const QString& placeholder) { + // Request permissions for alerts (the generic type of notification), sound playback, + // and badges (which allows the Nheko app icon to show the little red bubble with unread count). + // NOTE: Possible macOS bug... the 'Play sound for notification checkbox' doesn't appear in + // the Notifications and Focus settings unless UNAuthorizationOptionBadges is also + // specified UNAuthorizationOptions options = UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionBadge; - UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + UNUserNotificationCenter* center = + [UNUserNotificationCenter currentNotificationCenter]; + // TODO: Move this somewhere that isn't dependent on receiving a notification + // to actually request notification access. [center requestAuthorizationWithOptions:options - completionHandler:^(BOOL granted, NSError * _Nullable error) { - if (!granted) { - NSLog(@"No notification access"); - if (error) { - NSLog(@"%@",[error localizedDescription]); + completionHandler:^(BOOL granted, + NSError* _Nullable error) { + if (!granted) { + NSLog(@"No notification access"); + if (error) { + NSLog(@"%@", [error localizedDescription]); + } + } + }]; + + UNTextInputNotificationAction* replyAction = [UNTextInputNotificationAction actionWithIdentifier:@"ReplyAction" + title:respondStr.toNSString() + options:UNNotificationActionOptionNone + textInputButtonTitle:sendStr.toNSString() + textInputPlaceholder:placeholder.toNSString()]; + + UNNotificationCategory* category = [UNNotificationCategory categoryWithIdentifier:@"ReplyCategory" + actions:@[ replyAction ] + intentIdentifiers:@[] + options:UNNotificationCategoryOptionNone]; + + NSString* title = room_name.toNSString(); + NSString* sub = subtitle.toNSString(); + NSString* body = informativeText.toNSString(); + NSString* threadIdentifier = room_id.toNSString(); + NSString* identifier = event_id.toNSString(); + NSString* imgUrl = bodyImagePath.toNSString(); + + NSSet* categories = [NSSet setWithObject:category]; + [center setNotificationCategories:categories]; + [center getNotificationSettingsWithCompletionHandler:^( + UNNotificationSettings* _Nonnull settings) { + if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) { + UNMutableNotificationContent* content = + [[UNMutableNotificationContent alloc] init]; + + content.title = title; + content.subtitle = sub; + content.body = body; + content.sound = [UNNotificationSound defaultSound]; + content.threadIdentifier = threadIdentifier; + content.categoryIdentifier = @"ReplyCategory"; + + if ([imgUrl length] != 0) { + NSURL* imageURL = [NSURL fileURLWithPath:imgUrl]; + NSData* img = [NSData dataWithContentsOfURL:imageURL]; + NSArray* attachments = [NSMutableArray array]; + UNNotificationAttachment* attachment = [UNNotificationAttachment + createFromImageData:img + identifier:@"attachment_image.jpeg" + options:nil]; + if (attachment) { + attachments = [NSMutableArray arrayWithObjects:attachment, nil]; + content.attachments = attachments; + } } + + UNNotificationRequest* notificationRequest = + [UNNotificationRequest requestWithIdentifier:identifier + content:content + trigger:nil]; + + [center addNotificationRequest:notificationRequest + withCompletionHandler:^(NSError* _Nullable error) { + if (error != nil) { + NSLog(@"Unable to Add Notification Request: %@", [error localizedDescription]); + } + }]; + + [content autorelease]; } }]; - - UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init]; - - content.title = room_name.toNSString(); - content.subtitle = subtitle.toNSString(); - content.body = informativeText.toNSString(); - content.sound = [UNNotificationSound defaultSound]; - content.threadIdentifier = room_id.toNSString(); - - if (!bodyImagePath.isEmpty()) { - NSURL *imageURL = [NSURL fileURLWithPath:bodyImagePath.toNSString()]; - NSData *img = [NSData dataWithContentsOfURL:imageURL]; - NSArray *attachments = [NSMutableArray array]; - UNNotificationAttachment *attachment = [UNNotificationAttachment createFromImageData:img identifier:@"attachment_image.jpeg" options:nil]; - if (attachment) { - attachments = [NSMutableArray arrayWithObjects: attachment, nil]; - content.attachments = attachments; - } - } - - UNNotificationRequest *notificationRequest = [UNNotificationRequest requestWithIdentifier:event_id.toNSString() content:content trigger:nil]; - - [center addNotificationRequest:notificationRequest withCompletionHandler:^(NSError * _Nullable error) { - if (error != nil) { - NSLog(@"Unable to Add Notification Request"); - } - }]; - - [content autorelease]; } -//unused -void -NotificationsManager::actionInvoked(uint, QString) +void NotificationsManager::attachToMacNotifCenter() { + UNUserNotificationCenter* center = + [UNUserNotificationCenter currentNotificationCenter]; + + std::unique_ptr proxy = std::make_unique(); + + connect(proxy.get(), &NotificationManagerProxy::notificationReplied, ChatPage::instance(), &ChatPage::sendNotificationReply); + + MacNotificationDelegate* notifDelegate = [[MacNotificationDelegate alloc] initWithProxy:std::move(proxy)]; + + center.delegate = notifDelegate; } -void -NotificationsManager::notificationReplied(uint, QString) -{ -} +// unused +void NotificationsManager::actionInvoked(uint, QString) { } -void -NotificationsManager::notificationClosed(uint, uint) -{ -} +void NotificationsManager::notificationReplied(uint, QString) { } -void -NotificationsManager::removeNotification(const QString &, const QString &) -{} +void NotificationsManager::notificationClosed(uint, uint) { } +void NotificationsManager::removeNotification(const QString&, const QString&) { } diff --git a/src/notifications/NotificationManagerProxy.h b/src/notifications/NotificationManagerProxy.h new file mode 100644 index 00000000..c7a2e234 --- /dev/null +++ b/src/notifications/NotificationManagerProxy.h @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include +#include + +class NotificationManagerProxy final : public QObject +{ + Q_OBJECT +public: + NotificationManagerProxy(QObject *parent = nullptr) + : QObject(parent) + { + } + +signals: + void notificationReplied(const QString &room, const QString &event, const QString &reply); +}; \ No newline at end of file From 80270e1f01874fea778afe5f3409de86e987a131 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Fri, 4 Nov 2022 23:42:35 +0100 Subject: [PATCH 25/84] Add invert enter key setting --- resources/qml/MessageInput.qml | 7 +++++- src/UserSettingsPage.cpp | 40 ++++++++++++++++++++++++++++++---- src/UserSettingsPage.h | 7 ++++++ 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 37d9614a..0800260f 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -216,6 +216,11 @@ Rectangle { popup.close(); } else if (event.matches(StandardKey.InsertLineSeparator)) { if (popup.opened) popup.close(); + + if (Settings.invertEnterKey && !Qt.inputMethod.visible || Qt.platform.os === "windows") { + room.input.send(); + event.accepted = true; + } } else if (event.matches(StandardKey.InsertParagraphSeparator)) { if (popup.opened) { var currentCompletion = completer.currentCompletion(); @@ -227,7 +232,7 @@ Rectangle { return; } } - if (!Qt.inputMethod.visible || Qt.platform.os === "windows") { + if (!Settings.invertEnterKey && !Qt.inputMethod.visible || Qt.platform.os === "windows") { room.input.send(); event.accepted = true; } diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index b91b5a29..5ffdfaa9 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -70,9 +70,10 @@ UserSettings::load(std::optional profile) settings.value(QStringLiteral("user/timeline/message_hover_highlight"), false).toBool(); enlargeEmojiOnlyMessages_ = settings.value(QStringLiteral("user/timeline/enlarge_emoji_only_msg"), false).toBool(); - markdown_ = settings.value(QStringLiteral("user/markdown_enabled"), true).toBool(); - bubbles_ = settings.value(QStringLiteral("user/bubbles_enabled"), false).toBool(); - smallAvatars_ = settings.value(QStringLiteral("user/small_avatars_enabled"), false).toBool(); + markdown_ = settings.value(QStringLiteral("user/markdown_enabled"), true).toBool(); + bubbles_ = settings.value(QStringLiteral("user/bubbles_enabled"), false).toBool(); + smallAvatars_ = settings.value(QStringLiteral("user/small_avatars_enabled"), false).toBool(); + invertEnterKey_ = settings.value(QStringLiteral("user/invert_enter_key"), false).toBool(); animateImagesOnHover_ = settings.value(QStringLiteral("user/animate_images_on_hover"), false).toBool(); typingNotifications_ = @@ -309,6 +310,17 @@ UserSettings::setSmallAvatars(bool state) save(); } +void +UserSettings::setInvertEnterKey(bool state) +{ + if (state == invertEnterKey_) + return; + + invertEnterKey_ = state; + emit invertEnterKeyChanged(state); + save(); +} + void UserSettings::setAnimateImagesOnHover(bool state) { @@ -822,6 +834,7 @@ UserSettings::save() settings.setValue(QStringLiteral("markdown_enabled"), markdown_); settings.setValue(QStringLiteral("bubbles_enabled"), bubbles_); settings.setValue(QStringLiteral("small_avatars_enabled"), smallAvatars_); + settings.setValue(QStringLiteral("invert_enter_key"), invertEnterKey_); settings.setValue(QStringLiteral("animate_images_on_hover"), animateImagesOnHover_); settings.setValue(QStringLiteral("desktop_notifications"), hasDesktopNotifications_); settings.setValue(QStringLiteral("alert_on_notification"), hasAlertOnNotification_); @@ -931,6 +944,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr("Enable message bubbles"); case SmallAvatars: return tr("Enable small Avatars"); + case InvertEnterKey: + return tr("Use shift+enter to send and enter to start a new line"); case AnimateImagesOnHover: return tr("Play animated images only on hover"); case TypingNotifications: @@ -1065,6 +1080,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return i->bubbles(); case SmallAvatars: return i->smallAvatars(); + case InvertEnterKey: + return i->invertEnterKey(); case AnimateImagesOnHover: return i->animateImagesOnHover(); case TypingNotifications: @@ -1206,6 +1223,10 @@ UserSettingsModel::data(const QModelIndex &index, int role) const "Messages get a bubble background. This also triggers some layout changes (WIP)."); case SmallAvatars: return tr("Avatars are resized to fit above the message."); + case InvertEnterKey: + return tr( + "Invert the behavior of the enter key in the text input, making it send the message " + "when shift+enter is pressed and starting a new line when enter is pressed."); case AnimateImagesOnHover: return tr("Plays media like GIFs or WEBPs only when explicitly hovering over them."); case TypingNotifications: @@ -1345,6 +1366,7 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case Markdown: case Bubbles: case SmallAvatars: + case InvertEnterKey: case AnimateImagesOnHover: case TypingNotifications: case SortByImportance: @@ -1582,6 +1604,13 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int } else return false; } + case InvertEnterKey: { + if (value.userType() == QMetaType::Bool) { + i->setInvertEnterKey(value.toBool()); + return true; + } else + return false; + } case AnimateImagesOnHover: { if (value.userType() == QMetaType::Bool) { i->setAnimateImagesOnHover(value.toBool()); @@ -1990,6 +2019,9 @@ UserSettingsModel::UserSettingsModel(QObject *p) connect(s.get(), &UserSettings::smallAvatarsChanged, this, [this]() { emit dataChanged(index(SmallAvatars), index(SmallAvatars), {Value}); }); + connect(s.get(), &UserSettings::invertEnterKeyChanged, this, [this]() { + emit dataChanged(index(InvertEnterKey), index(InvertEnterKey), {Value}); + }); connect(s.get(), &UserSettings::groupViewStateChanged, this, [this]() { emit dataChanged(index(GroupView), index(GroupView), {Value}); }); @@ -2002,7 +2034,7 @@ UserSettingsModel::UserSettingsModel(QObject *p) connect(s.get(), &UserSettings::decryptNotificationsChanged, this, [this]() { emit dataChanged(index(DecryptNotifications), index(DecryptNotifications), {Value}); }); - connect(s.get(), &UserSettings::spaceNotificationsChanged, this, [this] { + connect(s.get(), &UserSettings::spaceNotificationsChanged, this, [this]() { emit dataChanged(index(SpaceNotifications), index(SpaceNotifications), {Value}); }); connect(s.get(), &UserSettings::trayChanged, this, [this]() { diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 5371bfab..8e4bc43b 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -41,6 +41,8 @@ class UserSettings final : public QObject Q_PROPERTY(bool markdown READ markdown WRITE setMarkdown NOTIFY markdownChanged) Q_PROPERTY(bool bubbles READ bubbles WRITE setBubbles NOTIFY bubblesChanged) Q_PROPERTY(bool smallAvatars READ smallAvatars WRITE setSmallAvatars NOTIFY smallAvatarsChanged) + Q_PROPERTY( + bool invertEnterKey READ invertEnterKey WRITE setInvertEnterKey NOTIFY invertEnterKeyChanged) Q_PROPERTY(bool animateImagesOnHover READ animateImagesOnHover WRITE setAnimateImagesOnHover NOTIFY animateImagesOnHoverChanged) Q_PROPERTY(bool typingNotifications READ typingNotifications WRITE setTypingNotifications NOTIFY @@ -154,6 +156,7 @@ public: void setMarkdown(bool state); void setBubbles(bool state); void setSmallAvatars(bool state); + void setInvertEnterKey(bool state); void setAnimateImagesOnHover(bool state); void setReadReceipts(bool state); void setTypingNotifications(bool state); @@ -216,6 +219,7 @@ public: bool markdown() const { return markdown_; } bool bubbles() const { return bubbles_; } bool smallAvatars() const { return smallAvatars_; } + bool invertEnterKey() const { return invertEnterKey_; } bool animateImagesOnHover() const { return animateImagesOnHover_; } bool typingNotifications() const { return typingNotifications_; } bool sortByImportance() const { return sortByImportance_; } @@ -280,6 +284,7 @@ signals: void markdownChanged(bool state); void bubblesChanged(bool state); void smallAvatarsChanged(bool state); + void invertEnterKeyChanged(bool state); void animateImagesOnHoverChanged(bool state); void typingNotificationsChanged(bool state); void buttonInTimelineChanged(bool state); @@ -343,6 +348,7 @@ private: bool markdown_; bool bubbles_; bool smallAvatars_; + bool invertEnterKey_; bool animateImagesOnHover_; bool typingNotifications_; bool sortByImportance_; @@ -435,6 +441,7 @@ class UserSettingsModel final : public QAbstractListModel Markdown, Bubbles, SmallAvatars, + InvertEnterKey, SidebarSection, GroupView, SortByImportance, From 9a15b0ea20d7eff7f12e1b8370e17b6983d9748a Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Fri, 4 Nov 2022 23:53:36 +0100 Subject: [PATCH 26/84] Move invert enter key setting --- src/UserSettingsPage.cpp | 64 ++++++++++++++++++++-------------------- src/UserSettingsPage.h | 14 ++++----- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 5ffdfaa9..7082d4e2 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -71,9 +71,9 @@ UserSettings::load(std::optional profile) enlargeEmojiOnlyMessages_ = settings.value(QStringLiteral("user/timeline/enlarge_emoji_only_msg"), false).toBool(); markdown_ = settings.value(QStringLiteral("user/markdown_enabled"), true).toBool(); + invertEnterKey_ = settings.value(QStringLiteral("user/invert_enter_key"), false).toBool(); bubbles_ = settings.value(QStringLiteral("user/bubbles_enabled"), false).toBool(); smallAvatars_ = settings.value(QStringLiteral("user/small_avatars_enabled"), false).toBool(); - invertEnterKey_ = settings.value(QStringLiteral("user/invert_enter_key"), false).toBool(); animateImagesOnHover_ = settings.value(QStringLiteral("user/animate_images_on_hover"), false).toBool(); typingNotifications_ = @@ -290,6 +290,17 @@ UserSettings::setMarkdown(bool state) save(); } +void +UserSettings::setInvertEnterKey(bool state) +{ + if (state == invertEnterKey_) + return; + + invertEnterKey_ = state; + emit invertEnterKeyChanged(state); + save(); +} + void UserSettings::setBubbles(bool state) { @@ -310,17 +321,6 @@ UserSettings::setSmallAvatars(bool state) save(); } -void -UserSettings::setInvertEnterKey(bool state) -{ - if (state == invertEnterKey_) - return; - - invertEnterKey_ = state; - emit invertEnterKeyChanged(state); - save(); -} - void UserSettings::setAnimateImagesOnHover(bool state) { @@ -832,9 +832,9 @@ UserSettings::save() settings.setValue(QStringLiteral("read_receipts"), readReceipts_); settings.setValue(QStringLiteral("group_view"), groupView_); settings.setValue(QStringLiteral("markdown_enabled"), markdown_); + settings.setValue(QStringLiteral("invert_enter_key"), invertEnterKey_); settings.setValue(QStringLiteral("bubbles_enabled"), bubbles_); settings.setValue(QStringLiteral("small_avatars_enabled"), smallAvatars_); - settings.setValue(QStringLiteral("invert_enter_key"), invertEnterKey_); settings.setValue(QStringLiteral("animate_images_on_hover"), animateImagesOnHover_); settings.setValue(QStringLiteral("desktop_notifications"), hasDesktopNotifications_); settings.setValue(QStringLiteral("alert_on_notification"), hasAlertOnNotification_); @@ -940,12 +940,12 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr("Communities sidebar"); case Markdown: return tr("Send messages as Markdown"); + case InvertEnterKey: + return tr("Use shift+enter to send and enter to start a new line"); case Bubbles: return tr("Enable message bubbles"); case SmallAvatars: return tr("Enable small Avatars"); - case InvertEnterKey: - return tr("Use shift+enter to send and enter to start a new line"); case AnimateImagesOnHover: return tr("Play animated images only on hover"); case TypingNotifications: @@ -1076,12 +1076,12 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return i->groupView(); case Markdown: return i->markdown(); + case InvertEnterKey: + return i->invertEnterKey(); case Bubbles: return i->bubbles(); case SmallAvatars: return i->smallAvatars(); - case InvertEnterKey: - return i->invertEnterKey(); case AnimateImagesOnHover: return i->animateImagesOnHover(); case TypingNotifications: @@ -1218,15 +1218,15 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr( "Allow using markdown in messages.\nWhen disabled, all messages are sent as a plain " "text."); + case InvertEnterKey: + return tr( + "Invert the behavior of the enter key in the text input, making it send the message " + "when shift+enter is pressed and starting a new line when enter is pressed."); case Bubbles: return tr( "Messages get a bubble background. This also triggers some layout changes (WIP)."); case SmallAvatars: return tr("Avatars are resized to fit above the message."); - case InvertEnterKey: - return tr( - "Invert the behavior of the enter key in the text input, making it send the message " - "when shift+enter is pressed and starting a new line when enter is pressed."); case AnimateImagesOnHover: return tr("Plays media like GIFs or WEBPs only when explicitly hovering over them."); case TypingNotifications: @@ -1364,9 +1364,9 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case StartInTray: case GroupView: case Markdown: + case InvertEnterKey: case Bubbles: case SmallAvatars: - case InvertEnterKey: case AnimateImagesOnHover: case TypingNotifications: case SortByImportance: @@ -1590,6 +1590,13 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int } else return false; } + case InvertEnterKey: { + if (value.userType() == QMetaType::Bool) { + i->setInvertEnterKey(value.toBool()); + return true; + } else + return false; + } case Bubbles: { if (value.userType() == QMetaType::Bool) { i->setBubbles(value.toBool()); @@ -1604,13 +1611,6 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int } else return false; } - case InvertEnterKey: { - if (value.userType() == QMetaType::Bool) { - i->setInvertEnterKey(value.toBool()); - return true; - } else - return false; - } case AnimateImagesOnHover: { if (value.userType() == QMetaType::Bool) { i->setAnimateImagesOnHover(value.toBool()); @@ -2013,15 +2013,15 @@ UserSettingsModel::UserSettingsModel(QObject *p) connect(s.get(), &UserSettings::markdownChanged, this, [this]() { emit dataChanged(index(Markdown), index(Markdown), {Value}); }); + connect(s.get(), &UserSettings::invertEnterKeyChanged, this, [this]() { + emit dataChanged(index(InvertEnterKey), index(InvertEnterKey), {Value}); + }); connect(s.get(), &UserSettings::bubblesChanged, this, [this]() { emit dataChanged(index(Bubbles), index(Bubbles), {Value}); }); connect(s.get(), &UserSettings::smallAvatarsChanged, this, [this]() { emit dataChanged(index(SmallAvatars), index(SmallAvatars), {Value}); }); - connect(s.get(), &UserSettings::invertEnterKeyChanged, this, [this]() { - emit dataChanged(index(InvertEnterKey), index(InvertEnterKey), {Value}); - }); connect(s.get(), &UserSettings::groupViewStateChanged, this, [this]() { emit dataChanged(index(GroupView), index(GroupView), {Value}); }); diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 8e4bc43b..3bd0f833 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -39,10 +39,10 @@ class UserSettings final : public QObject Q_PROPERTY(bool startInTray READ startInTray WRITE setStartInTray NOTIFY startInTrayChanged) Q_PROPERTY(bool groupView READ groupView WRITE setGroupView NOTIFY groupViewStateChanged) Q_PROPERTY(bool markdown READ markdown WRITE setMarkdown NOTIFY markdownChanged) - Q_PROPERTY(bool bubbles READ bubbles WRITE setBubbles NOTIFY bubblesChanged) - Q_PROPERTY(bool smallAvatars READ smallAvatars WRITE setSmallAvatars NOTIFY smallAvatarsChanged) Q_PROPERTY( bool invertEnterKey READ invertEnterKey WRITE setInvertEnterKey NOTIFY invertEnterKeyChanged) + Q_PROPERTY(bool bubbles READ bubbles WRITE setBubbles NOTIFY bubblesChanged) + Q_PROPERTY(bool smallAvatars READ smallAvatars WRITE setSmallAvatars NOTIFY smallAvatarsChanged) Q_PROPERTY(bool animateImagesOnHover READ animateImagesOnHover WRITE setAnimateImagesOnHover NOTIFY animateImagesOnHoverChanged) Q_PROPERTY(bool typingNotifications READ typingNotifications WRITE setTypingNotifications NOTIFY @@ -154,9 +154,9 @@ public: void setEmojiFontFamily(QString family); void setGroupView(bool state); void setMarkdown(bool state); + void setInvertEnterKey(bool state); void setBubbles(bool state); void setSmallAvatars(bool state); - void setInvertEnterKey(bool state); void setAnimateImagesOnHover(bool state); void setReadReceipts(bool state); void setTypingNotifications(bool state); @@ -217,9 +217,9 @@ public: bool privacyScreen() const { return privacyScreen_; } int privacyScreenTimeout() const { return privacyScreenTimeout_; } bool markdown() const { return markdown_; } + bool invertEnterKey() const { return invertEnterKey_; } bool bubbles() const { return bubbles_; } bool smallAvatars() const { return smallAvatars_; } - bool invertEnterKey() const { return invertEnterKey_; } bool animateImagesOnHover() const { return animateImagesOnHover_; } bool typingNotifications() const { return typingNotifications_; } bool sortByImportance() const { return sortByImportance_; } @@ -282,9 +282,9 @@ signals: void trayChanged(bool state); void startInTrayChanged(bool state); void markdownChanged(bool state); + void invertEnterKeyChanged(bool state); void bubblesChanged(bool state); void smallAvatarsChanged(bool state); - void invertEnterKeyChanged(bool state); void animateImagesOnHoverChanged(bool state); void typingNotificationsChanged(bool state); void buttonInTimelineChanged(bool state); @@ -346,9 +346,9 @@ private: bool startInTray_; bool groupView_; bool markdown_; + bool invertEnterKey_; bool bubbles_; bool smallAvatars_; - bool invertEnterKey_; bool animateImagesOnHover_; bool typingNotifications_; bool sortByImportance_; @@ -439,9 +439,9 @@ class UserSettingsModel final : public QAbstractListModel TypingNotifications, ReadReceipts, Markdown, + InvertEnterKey, Bubbles, SmallAvatars, - InvertEnterKey, SidebarSection, GroupView, SortByImportance, From de3cdd590f4b8646a7b541c35a3412c383753553 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Sat, 5 Nov 2022 13:13:18 -0400 Subject: [PATCH 27/84] Add status message to D-Bus API --- src/dbus/NhekoDBusApi.cpp | 9 +++++++++ src/dbus/NhekoDBusApi.h | 3 +++ src/dbus/NhekoDBusBackend.cpp | 6 ++++++ src/dbus/NhekoDBusBackend.h | 2 ++ 4 files changed, 20 insertions(+) diff --git a/src/dbus/NhekoDBusApi.cpp b/src/dbus/NhekoDBusApi.cpp index 2367c27b..a58812ef 100644 --- a/src/dbus/NhekoDBusApi.cpp +++ b/src/dbus/NhekoDBusApi.cpp @@ -152,6 +152,15 @@ directChat(const QString &userId) interface.isValid()) interface.call(QDBus::NoBlock, QStringLiteral("directChat"), userId); } + +void +setStatusMessage(const QString &message) +{ + if (QDBusInterface interface{QStringLiteral(NHEKO_DBUS_SERVICE_NAME), QStringLiteral("/")}; + interface.isValid()) + interface.call(QDBus::NoBlock, QStringLiteral("setStatusMessage"), message); +} + } // nheko::dbus /** diff --git a/src/dbus/NhekoDBusApi.h b/src/dbus/NhekoDBusApi.h index 3995404a..20316b64 100644 --- a/src/dbus/NhekoDBusApi.h +++ b/src/dbus/NhekoDBusApi.h @@ -80,6 +80,9 @@ joinRoom(const QString &alias); //! desired). void directChat(const QString &userId); +//! Sets the user's status message (if supported by the homeserver). +void +setStatusMessage(const QString &message); QDBusArgument & operator<<(QDBusArgument &arg, const RoomInfoItem &item); diff --git a/src/dbus/NhekoDBusBackend.cpp b/src/dbus/NhekoDBusBackend.cpp index 56fdfe8d..a7fa2d74 100644 --- a/src/dbus/NhekoDBusBackend.cpp +++ b/src/dbus/NhekoDBusBackend.cpp @@ -100,6 +100,12 @@ NhekoDBusBackend::directChat(const QString &userId) const ChatPage::instance()->startChat(userId); } +void +NhekoDBusBackend::setStatusMessage(const QString &message) +{ + ChatPage::instance()->setStatus(message); +} + void NhekoDBusBackend::bringWindowToTop() const { diff --git a/src/dbus/NhekoDBusBackend.h b/src/dbus/NhekoDBusBackend.h index 6fb9dd72..83562da2 100644 --- a/src/dbus/NhekoDBusBackend.h +++ b/src/dbus/NhekoDBusBackend.h @@ -37,6 +37,8 @@ public slots: //! Starts or activates a direct chat. It is your responsibility to ask for confirmation (if //! desired). Q_SCRIPTABLE void directChat(const QString &userId) const; + //! Sets the user's status message. + Q_SCRIPTABLE void setStatusMessage(const QString &message); private: void bringWindowToTop() const; From b622604c47aceeda62b20caf6553bbf1008b33f5 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Sat, 5 Nov 2022 16:38:12 -0400 Subject: [PATCH 28/84] Bump micro version --- src/dbus/NhekoDBusApi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dbus/NhekoDBusApi.h b/src/dbus/NhekoDBusApi.h index 20316b64..baf942b1 100644 --- a/src/dbus/NhekoDBusApi.h +++ b/src/dbus/NhekoDBusApi.h @@ -18,7 +18,7 @@ init(); //! The nheko D-Bus API version provided by this file. The API version number follows semantic //! versioning as defined by https://semver.org. -const QVersionNumber dbusApiVersion{1, 0, 0}; +const QVersionNumber dbusApiVersion{1, 0, 1}; //! Compare the installed Nheko API to the version that your client app targets to see if they //! are compatible. From 1f77e1c810ad8b47cb40cb59e52b01fe534652b7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 6 Nov 2022 01:06:01 +0100 Subject: [PATCH 29/84] Prompt before deleting the database --- src/Cache.cpp | 3 ++- src/ChatPage.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index b577f201..09e3fe5c 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -361,7 +361,8 @@ fatalSecretError() "have multiple reasons. Check if your D-Bus service is running and you have configured a " "service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If " "you are having trouble, feel free to open an issue here: " - "https://github.com/Nheko-Reborn/nheko/issues")); + "https://github.com/Nheko-Reborn/nheko/issues"), + QMessageBox::StandardButton::Close); QCoreApplication::exit(1); exit(1); diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index f87c2738..8edaa1cf 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -378,6 +378,20 @@ ChatPage::dropToLoginPage(const QString &msg) http::client()->shutdown(); connectivityTimer_.stop(); + auto btn = QMessageBox::warning( + nullptr, + tr("Confirm logout"), + tr("Because of the following reason Nheko wants to drop you to the login page:\n%1\nIf you " + "think this is a mistake, you can close Nheko instead to possibly recover your encrpytion " + "keys. After you have been dropped to the login page, you can sign in again using your " + "usual methods."), + QMessageBox::StandardButton::Close | QMessageBox::StandardButton::Ok, + QMessageBox::StandardButton::Ok); + if (btn == QMessageBox::StandardButton::Close) { + QCoreApplication::exit(1); + exit(1); + } + resetUI(); deleteConfigs(); From 537fa437e2cf7aae82d3e066cfc26b4149652523 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 6 Nov 2022 03:36:56 +0100 Subject: [PATCH 30/84] Store secrets (apart from the pickle key) in the database --- src/Cache.cpp | 127 ++++++++++++++++++++++++++--------------- src/Cache_p.h | 14 +++-- src/ChatPage.cpp | 3 +- src/encryption/Olm.cpp | 19 ++++-- 4 files changed, 106 insertions(+), 57 deletions(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index 09e3fe5c..41dd507c 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -39,7 +39,7 @@ //! Should be changed when a breaking change occurs in the cache format. //! This will reset client's data. -static const std::string CURRENT_CACHE_FORMAT_VERSION{"2022.04.08"}; +static const std::string CURRENT_CACHE_FORMAT_VERSION{"2022.11.06"}; //! Keys used for the DB static const std::string_view NEXT_BATCH_KEY("next_batch"); @@ -340,13 +340,13 @@ Cache::setup() txn.commit(); - loadSecrets({ - {mtx::secret_storage::secrets::cross_signing_master, false}, - {mtx::secret_storage::secrets::cross_signing_self_signing, false}, - {mtx::secret_storage::secrets::cross_signing_user_signing, false}, - {mtx::secret_storage::secrets::megolm_backup_v1, false}, - {"pickle_secret", true}, - }); + loadSecretsFromStore( + { + {"pickle_secret", true}, + }, + [this](const std::string &, bool, const std::string &value) { + this->pickle_secret_ = value; + }); } static void @@ -380,7 +380,9 @@ secretName(std::string name, bool internal) } void -Cache::loadSecrets(std::vector> toLoad) +Cache::loadSecretsFromStore( + std::vector> toLoad, + std::function callback) { auto settings = UserSettings::instance()->qsettings(); @@ -398,12 +400,11 @@ Cache::loadSecrets(std::vector> toLoad) if (value.isEmpty()) { nhlog::db()->info("Restored empty secret '{}'.", name.toStdString()); } else { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets[name.toStdString()] = value.toStdString(); + callback(name_, internal, value.toStdString()); } } // if we emit the databaseReady signal directly it won't be received - QTimer::singleShot(0, this, [this] { loadSecrets({}); }); + QTimer::singleShot(0, this, [this, callback] { loadSecretsFromStore({}, callback); }); return; } @@ -419,7 +420,7 @@ Cache::loadSecrets(std::vector> toLoad) connect(job, &QKeychain::ReadPasswordJob::finished, this, - [this, name, toLoad, job](QKeychain::Job *) mutable { + [this, name, toLoad, job, name_, internal, callback](QKeychain::Job *) mutable { nhlog::db()->debug("Finished reading '{}'", toLoad.begin()->first); const QString secret = job->textData(); if (job->error() && job->error() != QKeychain::Error::EntryNotFound) { @@ -433,40 +434,72 @@ Cache::loadSecrets(std::vector> toLoad) if (secret.isEmpty()) { nhlog::db()->debug("Restored empty secret '{}'.", name.toStdString()); } else { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets[name.toStdString()] = secret.toStdString(); + callback(name_, internal, secret.toStdString()); } // load next secret toLoad.erase(toLoad.begin()); // You can't start a job from the finish signal of a job. - QTimer::singleShot(0, this, [this, toLoad] { loadSecrets(toLoad); }); + QTimer::singleShot( + 0, this, [this, toLoad, callback] { loadSecretsFromStore(toLoad, callback); }); }); nhlog::db()->debug("Reading '{}'", name_); job->start(); } std::optional -Cache::secret(const std::string name_, bool internal) +Cache::secret(const std::string &name_, bool internal) { auto name = secretName(name_, internal); - std::unique_lock lock(secret_storage.mtx); - if (auto secret = secret_storage.secrets.find(name.toStdString()); - secret != secret_storage.secrets.end()) - return secret->second; - else + + auto txn = ro_txn(env_); + std::string_view value; + auto db_name = "secret." + name.toStdString(); + if (!syncStateDb_.get(txn, db_name, value)) return std::nullopt; + + mtx::secret_storage::AesHmacSha2EncryptedData data = nlohmann::json::parse(value); + + auto decrypted = mtx::crypto::decrypt(data, mtx::crypto::to_binary_buf(pickle_secret_), name_); + if (decrypted.empty()) + return std::nullopt; + else + return decrypted; } void -Cache::storeSecret(const std::string name_, const std::string secret, bool internal) +Cache::storeSecret(const std::string &name_, const std::string &secret, bool internal) { auto name = secretName(name_, internal); - { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets[name.toStdString()] = secret; - } + + auto txn = lmdb::txn::begin(env_); + + auto encrypted = + mtx::crypto::encrypt(secret, mtx::crypto::to_binary_buf(pickle_secret_), name_); + + auto db_name = "secret." + name.toStdString(); + syncStateDb_.put(txn, db_name, nlohmann::json(encrypted).dump()); + txn.commit(); + emit secretChanged(name_); +} + +void +Cache::deleteSecret(const std::string &name_, bool internal) +{ + auto name = secretName(name_, internal); + + auto txn = lmdb::txn::begin(env_); + std::string_view value; + auto db_name = "secret." + name.toStdString(); + syncStateDb_.del(txn, db_name, value); + txn.commit(); +} + +void +Cache::storeSecretInStore(const std::string name_, const std::string secret) +{ + auto name = secretName(name_, true); auto settings = UserSettings::instance()->qsettings(); if (settings->value(QStringLiteral("run_without_secure_secrets_service"), false).toBool()) { @@ -507,13 +540,9 @@ Cache::storeSecret(const std::string name_, const std::string secret, bool inter } void -Cache::deleteSecret(const std::string name, bool internal) +Cache::deleteSecretFromStore(const std::string name, bool internal) { auto name_ = secretName(name, internal); - { - std::unique_lock lock(secret_storage.mtx); - secret_storage.secrets.erase(name_.toStdString()); - } auto settings = UserSettings::instance()->qsettings(); if (settings->value(QStringLiteral("run_without_secure_secrets_service"), false).toBool()) { @@ -539,13 +568,8 @@ std::string Cache::pickleSecret() { if (pickle_secret_.empty()) { - auto s = secret("pickle_secret", true); - if (!s) { - this->pickle_secret_ = mtx::client::utils::random_token(64, true); - storeSecret("pickle_secret", pickle_secret_, true); - } else { - this->pickle_secret_ = *s; - } + this->pickle_secret_ = mtx::client::utils::random_token(64, true); + storeSecretInStore("pickle_secret", pickle_secret_); } return pickle_secret_; @@ -1179,11 +1203,7 @@ Cache::deleteData() nhlog::db()->info("deleted cache files from disk"); } - deleteSecret(mtx::secret_storage::secrets::megolm_backup_v1); - deleteSecret(mtx::secret_storage::secrets::cross_signing_master); - deleteSecret(mtx::secret_storage::secrets::cross_signing_user_signing); - deleteSecret(mtx::secret_storage::secrets::cross_signing_self_signing); - deleteSecret("pickle_secret", true); + deleteSecretFromStore("pickle_secret", true); } } @@ -1392,7 +1412,8 @@ Cache::runMigrations() }}, {"2021.08.31", [this]() { - storeSecret("pickle_secret", "secret", true); + storeSecretInStore("pickle_secret", "secret"); + this->pickle_secret_ = "secret"; return true; }}, {"2022.04.08", @@ -1448,6 +1469,22 @@ Cache::runMigrations() return false; } }}, + {"2022.11.06", + [this]() { + loadSecretsFromStore( + { + {mtx::secret_storage::secrets::cross_signing_master, false}, + {mtx::secret_storage::secrets::cross_signing_self_signing, false}, + {mtx::secret_storage::secrets::cross_signing_user_signing, false}, + {mtx::secret_storage::secrets::megolm_backup_v1, false}, + }, + [this](const std::string &name, bool internal, const std::string &value) { + this->storeSecret(name, value, internal); + QTimer::singleShot( + 0, this, [this, name, internal] { deleteSecretFromStore(name, internal); }); + }); + return true; + }}, }; nhlog::db()->info("Running migrations, this may take a while!"); diff --git a/src/Cache_p.h b/src/Cache_p.h index 742e4aab..5a42c7f9 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -291,9 +291,9 @@ public: void deleteBackupVersion(); std::optional backupVersion(); - void storeSecret(const std::string name, const std::string secret, bool internal = false); - void deleteSecret(const std::string name, bool internal = false); - std::optional secret(const std::string name, bool internal = false); + void storeSecret(const std::string &name, const std::string &secret, bool internal = false); + void deleteSecret(const std::string &name, bool internal = false); + std::optional secret(const std::string &name, bool internal = false); std::string pickleSecret(); @@ -324,7 +324,12 @@ signals: void databaseReady(); private: - void loadSecrets(std::vector> toLoad); + void loadSecretsFromStore( + std::vector> toLoad, + std::function + callback); + void storeSecretInStore(const std::string name, const std::string secret); + void deleteSecretFromStore(const std::string name, bool internal); //! Save an invited room. void saveInvite(lmdb::txn &txn, @@ -685,7 +690,6 @@ private: std::string pickle_secret_; VerificationStorage verification_storage; - SecretsStorage secret_storage; bool databaseReady_ = false; }; diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 8edaa1cf..5e0a7b73 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -384,7 +384,8 @@ ChatPage::dropToLoginPage(const QString &msg) tr("Because of the following reason Nheko wants to drop you to the login page:\n%1\nIf you " "think this is a mistake, you can close Nheko instead to possibly recover your encrpytion " "keys. After you have been dropped to the login page, you can sign in again using your " - "usual methods."), + "usual methods.") + .arg(msg), QMessageBox::StandardButton::Close | QMessageBox::StandardButton::Ok, QMessageBox::StandardButton::Ok); if (btn == QMessageBox::StandardButton::Close) { diff --git a/src/encryption/Olm.cpp b/src/encryption/Olm.cpp index a9d5b1c2..a1d311e1 100644 --- a/src/encryption/Olm.cpp +++ b/src/encryption/Olm.cpp @@ -6,6 +6,7 @@ #include "Olm.h" #include +#include #include #include @@ -98,13 +99,19 @@ handle_secret_request(const mtx::events::DeviceEventcontent.requesting_device_id}}}}, secretSend); + // Randomly delay reply to workaround olm session generation races + QTimer::singleShot(QRandomGenerator::global()->bounded(0, 3000), + ChatPage::instance(), + [local_user, e = *e, secretSend] { + send_encrypted_to_device_messages( + {{local_user.to_string(), {{e.content.requesting_device_id}}}}, + secretSend); - nhlog::net()->info("Sent secret '{}' to ({},{})", - e->content.name, - local_user.to_string(), - e->content.requesting_device_id); + nhlog::net()->info("Sent secret '{}' to ({},{})", + e.content.name, + local_user.to_string(), + e.content.requesting_device_id); + }); } void From 725b5e0383089ff0f5fb566860513f2b390807ad Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 6 Nov 2022 04:02:14 +0100 Subject: [PATCH 31/84] Try to fix clang-tidy --- src/Cache.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index 41dd507c..5cb87a2f 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -420,7 +420,8 @@ Cache::loadSecretsFromStore( connect(job, &QKeychain::ReadPasswordJob::finished, this, - [this, name, toLoad, job, name_, internal, callback](QKeychain::Job *) mutable { + [this, name, toLoad, job, name_ = name_, internal = internal, callback]( + QKeychain::Job *) mutable { nhlog::db()->debug("Finished reading '{}'", toLoad.begin()->first); const QString secret = job->textData(); if (job->error() && job->error() != QKeychain::Error::EntryNotFound) { From fe02e0dd91ce627c0b8b57325eeecc18418d36bb Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Mon, 7 Nov 2022 19:26:42 -0500 Subject: [PATCH 32/84] Add room settings in room list --- resources/qml/RoomList.qml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index b64df669..97639baa 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -159,6 +159,11 @@ Page { } } + Platform.MenuItem { + text: qsTr("Room settings") + onTriggered: TimelineManager.openRoomSettings(roomContextMenu.roomid) + } + Platform.MenuItem { text: qsTr("Leave room") onTriggered: TimelineManager.openLeaveRoomDialog(roomContextMenu.roomid) From 485babba14485801f9835a27a2062d19ec126cc4 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 9 Nov 2022 04:58:19 +0100 Subject: [PATCH 33/84] Implement a completer for commands fixes #429 --- CMakeLists.txt | 2 + resources/qml/Completer.qml | 24 +++ resources/qml/MessageInput.qml | 2 + src/CommandCompleter.cpp | 222 +++++++++++++++++++++++++++ src/CommandCompleter.h | 61 ++++++++ src/RoomsModel.cpp | 1 + src/RoomsModel.h | 2 +- src/timeline/TimelineViewManager.cpp | 6 + 8 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 src/CommandCompleter.cpp create mode 100644 src/CommandCompleter.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ca85577..302fad3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -451,6 +451,8 @@ set(SRC_FILES src/ColorImageProvider.h src/CombinedImagePackModel.cpp src/CombinedImagePackModel.h + src/CommandCompleter.cpp + src/CommandCompleter.h src/CompletionModelRoles.h src/CompletionProxyModel.cpp src/CompletionProxyModel.h diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index c0435dff..abf37486 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -209,6 +209,30 @@ Control { } + DelegateChoice { + roleValue: "command" + + RowLayout { + id: del + + anchors.centerIn: parent + spacing: rowSpacing + + Label { + text: model.name + color: model.index == popup.currentIndex ? Nheko.colors.highlightedText : Nheko.colors.text + font.bold: true + } + + Label { + text: model.description + color: model.index == popup.currentIndex ? Nheko.colors.highlightedText : Nheko.colors.buttonText + } + + } + + } + DelegateChoice { roleValue: "customEmoji" diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 0800260f..7f5f63ec 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -168,6 +168,8 @@ Rectangle { messageInput.openCompleter(selectionStart-1, "roomAliases"); } else if (lastChar == "~") { messageInput.openCompleter(selectionStart-1, "customEmoji"); + } else if (lastChar == "/" && cursorPosition == 1) { + messageInput.openCompleter(selectionStart-1, "command"); } } onCursorPositionChanged: { diff --git a/src/CommandCompleter.cpp b/src/CommandCompleter.cpp new file mode 100644 index 00000000..96dfeace --- /dev/null +++ b/src/CommandCompleter.cpp @@ -0,0 +1,222 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "CommandCompleter.h" + +#include "CompletionModelRoles.h" + +CommandCompleter::CommandCompleter(QObject *parent) + : QAbstractListModel(parent) +{ +} + +QHash +CommandCompleter::roleNames() const +{ + return { + {CompletionModel::CompletionRole, "completionRole"}, + {CompletionModel::SearchRole, "searchRole"}, + {CompletionModel::SearchRole2, "searchRole2"}, + {Roles::Name, "name"}, + {Roles::Description, "description"}, + }; +} + +QVariant +CommandCompleter::data(const QModelIndex &index, int role) const +{ + if (hasIndex(index.row(), index.column(), index.parent())) { + switch (role) { + case CompletionModel::CompletionRole: + // append space where applicable in a completion + switch (index.row()) { + case Me: + return QString("/me "); + case React: + return QString("/react "); + case Join: + return QString("/join "); + case Knock: + return QString("/knock "); + case Part: + return QString("/part "); + case Leave: + return QString("/leave "); + case Invite: + return QString("/invite @"); + case Kick: + return QString("/kick @"); + case Ban: + return QString("/ban @"); + case Unban: + return QString("/unban @"); + case Redact: + return QString("/redact "); + case Roomnick: + return QString("/roomnick "); + case Shrug: + return QString("/shrug"); + case Fliptable: + return QString("/fliptable"); + case Unfliptable: + return QString("/unfliptable"); + case Sovietflip: + return QString("/sovietflip"); + case ClearTimeline: + return QString("/clear-timeline"); + case ResetState: + return QString("/reset-state"); + case RotateMegolmSession: + return QString("/rotate-megolm-session"); + case Md: + return QString("/md "); + case Plain: + return QString("/plain "); + case Rainbow: + return QString("/rainbow "); + case RainbowMe: + return QString("/rainbowme "); + case Notice: + return QString("/notice "); + case RainbowNotice: + return QString("/rainbownotice "); + case Goto: + return QString("/goto "); + case ConvertToDm: + return QString("/converttodm"); + case ConvertToRoom: + return QString("/converttoroom"); + default: + return {}; + } + case CompletionModel::SearchRole: + case Qt::DisplayRole: + case Roles::Name: + switch (index.row()) { + case Me: + return tr("/me "); + case React: + return tr("/react "); + case Join: + return tr("/join (!roomid|#alias) [reason]"); + case Knock: + return tr("/knock (!roomid|#alias) [reason]"); + case Part: + return tr("/part [reason]"); + case Leave: + return tr("/leave [reason]"); + case Invite: + return tr("/invite @userid [reason]"); + case Kick: + return tr("/kick @userid [reason]"); + case Ban: + return tr("/ban @userid [reason]"); + case Unban: + return tr("/unban @userid [reason]"); + case Redact: + return tr("/redact ($eventid|@userid)"); + case Roomnick: + return tr("/roomnick "); + case Shrug: + return tr("/shrug [message]"); + case Fliptable: + return tr("/fliptable"); + case Unfliptable: + return tr("/unfliptable"); + case Sovietflip: + return tr("/sovietflip"); + case ClearTimeline: + return tr("/clear-timeline"); + case ResetState: + return tr("/reset-state"); + case RotateMegolmSession: + return tr("/rotate-megolm-session"); + case Md: + return tr("/md [message]"); + case Plain: + return tr("/plain [message]"); + case Rainbow: + return tr("/rainbow [message]"); + case RainbowMe: + return tr("/rainbowme [message]"); + case Notice: + return tr("/notice [message]"); + case RainbowNotice: + return tr("/rainbownotice [message]"); + case Goto: + return tr("/goto ($eventid|message index|matrix:r/room/e/event)"); + case ConvertToDm: + return tr("/converttodm"); + case ConvertToRoom: + return tr("/converttoroom"); + default: + return {}; + } + case CompletionModel::SearchRole2: + case Roles::Description: + switch (index.row()) { + case Me: + return tr("Send a message expressing an action."); + case React: + return tr("Send as a reaction when you’re replying to a message."); + case Join: + return tr("Join a room. Reason is optional."); + case Knock: + return tr("Ask to join a room. Reason is optional."); + case Part: + return tr("Leave a room. Reason is optional."); + case Leave: + return tr("Leave a room. Reason is optional."); + case Invite: + return tr("Invite a user into the current room. Reason is optional."); + case Kick: + return tr("Kick a user from the current room. Reason is optional."); + case Ban: + return tr("Ban a user from the current room. Reason is optional."); + case Unban: + return tr("Unban a user in the current room. Reason is optional."); + case Redact: + return tr("Redact an event or all locally cached messages of a user."); + case Roomnick: + return tr("Change your displayname in this room."); + case Shrug: + return tr("¯\\_(ツ)_/¯ with an optional message."); + case Fliptable: + return tr("(╯°□°)╯︵ ┻━┻"); + case Unfliptable: + return tr("┯━┯╭( º _ º╭)"); + case Sovietflip: + return tr("ノ┬─┬ノ ︵ ( \\o°o)\\"); + case ClearTimeline: + return tr("Clear the currently cached messages in this room."); + case ResetState: + return tr("Refetch the state in this room."); + case RotateMegolmSession: + return tr("Rotate the current symmetric encryption key."); + case Md: + return tr("Send a markdown formatted message (ignoring the global setting)."); + case Plain: + return tr("Send an unformatted message (ignoring the global setting)."); + case Rainbow: + return tr("Send a message in rainbow colors."); + case RainbowMe: + return tr("Send /me in rainbow colors."); + case Notice: + return tr("Send a bot message."); + case RainbowNotice: + return tr("Send a bot message in rainbow colors."); + case Goto: + return tr("Go to this event or link."); + case ConvertToDm: + return tr("Convert this room to a direct chat."); + case ConvertToRoom: + return tr("Convert this direct chat into a room."); + default: + return {}; + } + } + } + return {}; +} diff --git a/src/CommandCompleter.h b/src/CommandCompleter.h new file mode 100644 index 00000000..360bff73 --- /dev/null +++ b/src/CommandCompleter.h @@ -0,0 +1,61 @@ +// SPDX-FileCopyrightText: 2021 Nheko Contributors +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include +#include + +class CommandCompleter final : public QAbstractListModel +{ +public: + enum Roles + { + Name = Qt::UserRole, + Description, + }; + + enum Commands + { + Me, + React, + Join, + Knock, + Part, + Leave, + Invite, + Kick, + Ban, + Unban, + Redact, + Roomnick, + Shrug, + Fliptable, + Unfliptable, + Sovietflip, + ClearTimeline, + ResetState, + RotateMegolmSession, + Md, + Plain, + Rainbow, + RainbowMe, + Notice, + RainbowNotice, + Goto, + ConvertToDm, + ConvertToRoom, + COUNT, + }; + + CommandCompleter(QObject *parent = nullptr); + QHash roleNames() const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override + { + (void)parent; + return (int)Commands::COUNT; + } + QVariant data(const QModelIndex &index, int role) const override; +}; diff --git a/src/RoomsModel.cpp b/src/RoomsModel.cpp index 8abcb32e..3d13ef8b 100644 --- a/src/RoomsModel.cpp +++ b/src/RoomsModel.cpp @@ -7,6 +7,7 @@ #include +#include "Cache.h" #include "Cache_p.h" #include "CompletionModelRoles.h" #include "UserSettingsPage.h" diff --git a/src/RoomsModel.h b/src/RoomsModel.h index 8571e4bb..0b7371db 100644 --- a/src/RoomsModel.h +++ b/src/RoomsModel.h @@ -5,7 +5,7 @@ #pragma once -#include "Cache.h" +#include "CacheStructs.h" #include #include diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 9c46d201..ed86414d 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -12,6 +12,7 @@ #include "ChatPage.h" #include "CombinedImagePackModel.h" +#include "CommandCompleter.h" #include "CompletionProxyModel.h" #include "EventAccessors.h" #include "ImagePackListModel.h" @@ -443,6 +444,11 @@ TimelineViewManager::completerFor(const QString &completerName, const QString &r auto proxy = new CompletionProxyModel(stickerModel); stickerModel->setParent(proxy); return proxy; + } else if (completerName == QLatin1String("command")) { + static auto commandCompleter = new CommandCompleter(); + auto proxy = new CompletionProxyModel(commandCompleter); + commandCompleter->setParent(proxy); + return proxy; } return nullptr; } From 3576589ea7cdc3423e0b39a4b36c03627653c1a7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 9 Nov 2022 16:38:17 +0100 Subject: [PATCH 34/84] Fix crash in slash completer --- src/timeline/TimelineViewManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index ed86414d..490bf726 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -445,8 +445,8 @@ TimelineViewManager::completerFor(const QString &completerName, const QString &r stickerModel->setParent(proxy); return proxy; } else if (completerName == QLatin1String("command")) { - static auto commandCompleter = new CommandCompleter(); - auto proxy = new CompletionProxyModel(commandCompleter); + auto commandCompleter = new CommandCompleter(); + auto proxy = new CompletionProxyModel(commandCompleter); commandCompleter->setParent(proxy); return proxy; } From ed889c32fc1fe08f57831378935a2fd157dbb3bf Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 10 Nov 2022 00:43:05 +0100 Subject: [PATCH 35/84] Change margins because people nagged me --- resources/qml/TimelineRow.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index 66128846..eb2406e7 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -128,6 +128,7 @@ AbstractButton { right: parent.right margins: (Settings.bubbles && ! isStateEvent)? 4 : 2 leftMargin: 4 + rightMargin: 4 } id: msg rowSpacing: 0 @@ -300,7 +301,7 @@ AbstractButton { Reactions { anchors { top: row.bottom - topMargin: -2 + topMargin: -4 left: row.bubbleOnRight? undefined : row.left right: row.bubbleOnRight? row.right : undefined } From 802ba78fea363134bd4215dc8ea0124bceb9b38d Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Tue, 15 Nov 2022 19:04:38 -0500 Subject: [PATCH 36/84] Only play macOS notification sounds when pushrules dictate it --- src/notifications/Manager.h | 3 ++- src/notifications/ManagerMac.cpp | 29 ++++++++++++++++++++++++----- src/notifications/ManagerMac.mm | 7 +++++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/notifications/Manager.h b/src/notifications/Manager.h index de678738..9c992767 100644 --- a/src/notifications/Manager.h +++ b/src/notifications/Manager.h @@ -81,7 +81,8 @@ private: const QString &bodyImagePath, const QString &respondStr, const QString &sendStr, - const QString &placeholder); + const QString &placeholder, + const bool playSound); public: static void attachToMacNotifCenter(); diff --git a/src/notifications/ManagerMac.cpp b/src/notifications/ManagerMac.cpp index 75ea838c..630080d4 100644 --- a/src/notifications/ManagerMac.cpp +++ b/src/notifications/ManagerMac.cpp @@ -47,13 +47,29 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if const auto sendStr = QObject::tr("Send"); const auto placeholder = QObject::tr("Write a message..."); + auto playSound = false; + + if (std::find(notification.actions.begin(), + notification.actions.end(), + mtx::pushrules::actions::Action{mtx::pushrules::actions::set_tweak_sound{ + .value = "default"}}) != notification.actions.end()) { + playSound = true; + } if (isEncrypted) { // TODO: decrypt this message if the decryption setting is on in the UserSettings const QString messageInfo = (isReply ? tr("%1 replied with an encrypted message") : tr("%1 sent an encrypted message")) .arg(sender); - objCxxPostNotification( - room_name, room_id, event_id, messageInfo, "", "", respondStr, sendStr, placeholder); + objCxxPostNotification(room_name, + room_id, + event_id, + messageInfo, + "", + "", + respondStr, + sendStr, + placeholder, + playSound); } else { const QString messageInfo = (isReply ? tr("%1 replied to a message") : tr("%1 sent a message")).arg(sender); @@ -69,7 +85,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if messageInfo, respondStr, sendStr, - placeholder](QString, QSize, QImage, QString imgPath) { + placeholder, + playSound](QString, QSize, QImage, QString imgPath) { objCxxPostNotification(room_name, room_id, event_id, @@ -78,7 +95,8 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if imgPath, respondStr, sendStr, - placeholder); + placeholder, + playSound); }); else objCxxPostNotification(room_name, @@ -89,6 +107,7 @@ NotificationsManager::postNotification(const mtx::responses::Notification ¬if "", respondStr, sendStr, - placeholder); + placeholder, + playSound); } } diff --git a/src/notifications/ManagerMac.mm b/src/notifications/ManagerMac.mm index 4865e30d..39312465 100644 --- a/src/notifications/ManagerMac.mm +++ b/src/notifications/ManagerMac.mm @@ -75,7 +75,8 @@ void NotificationsManager::objCxxPostNotification( const QString& bodyImagePath, const QString& respondStr, const QString& sendStr, - const QString& placeholder) + const QString& placeholder, + const bool enableSound) { // Request permissions for alerts (the generic type of notification), sound playback, // and badges (which allows the Nheko app icon to show the little red bubble with unread count). @@ -128,7 +129,9 @@ void NotificationsManager::objCxxPostNotification( content.title = title; content.subtitle = sub; content.body = body; - content.sound = [UNNotificationSound defaultSound]; + if (enableSound) { + content.sound = [UNNotificationSound defaultSound]; + } content.threadIdentifier = threadIdentifier; content.categoryIdentifier = @"ReplyCategory"; From 5f554aa5ccde4510c1cdabf7d1d6990e5585d803 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 17 Nov 2022 10:23:49 -0500 Subject: [PATCH 37/84] Translated using Weblate (Japanese) Currently translated at 9.1% (78 of 855 strings) Co-authored-by: Max Harmathy Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/ja/ Translation: Nheko/nheko --- resources/langs/nheko_ja.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index 103273b8..d91bb0f5 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -22,7 +22,7 @@ Hide/Show Picture-in-Picture - + 非表示/表示 ピクチャー・イン・ピクチャー From 30bbfeaea6e718dd72d348e1963ddaf8b1ac699a Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 17 Nov 2022 10:23:49 -0500 Subject: [PATCH 38/84] Translated using Weblate (German) Currently translated at 92.7% (793 of 855 strings) Co-authored-by: fnetX (aka fralix) Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/de/ Translation: Nheko/nheko --- resources/langs/nheko_de.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 9be4599f..f75fcfe9 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -104,27 +104,27 @@ Allowed rooms settings - + Erlaubte Raumeinstellungen List of rooms that allow access to this room. Anyone who is in any of those rooms can join this room. - + Liste der Räume, die Zugriff zu diesem Raum erlauben. Personen in einem dieser Räume können diesen Raum betreten. Parent community - + Übergeordnete Community Other room - + Anderer Raum Enter additional rooms not in the list yet... - + Weitere Räume eingeben, die noch nicht in der Liste sind… @@ -2704,7 +2704,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer Apply access rules - + Zugriffsregeln anwenden From 5b929c9d1aee9e0ce4c16e86718c13e0c319f36c Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 20 Nov 2022 03:51:44 +0100 Subject: [PATCH 39/84] Enable http/3 support --- CMakeLists.txt | 10 +++++----- io.github.NhekoReborn.Nheko.yaml | 6 +++--- src/MatrixClient.cpp | 9 ++++++++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 302fad3f..3c9256c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,9 +25,9 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "compile as PIC by default") option(HUNTER_ENABLED "Enable Hunter package manager" OFF) include("cmake/HunterGate.cmake") HunterGate( - URL "https://github.com/cpp-pm/hunter/archive/v0.24.3.tar.gz" - SHA1 "10738b59e539818a01090e64c2d09896247530c7" - LOCAL + URL "https://github.com/cpp-pm/hunter/archive/v0.24.8.tar.gz" + SHA1 "ca7838dded9a1811b04ffd56175f629e0af82d3d" + LOCAL ) macro(hunter_add_package_safe) @@ -186,7 +186,7 @@ if(USE_BUNDLED_COEURL) FetchContent_Declare( coeurl GIT_REPOSITORY https://nheko.im/Nheko-Reborn/coeurl.git - GIT_TAG v0.2.1 + GIT_TAG f989f3c54c1ca15e29c5bd6b1ce4efbcb3fd8078 ) FetchContent_MakeAvailable(coeurl) set(COEURL_TARGET_NAME coeurl::coeurl) @@ -595,7 +595,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG a1b7b81ce00ef5808eac0fdd895a95044e1b07ed + GIT_TAG c7a13e79289ae35c4e2a9bccb3fdeb2bc03a925d ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 69be7301..7f3aefc3 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -170,8 +170,8 @@ modules: - -Ddefault_library=static name: coeurl sources: - - commit: cfeae3acef061dbb19706f462ee58b9be2e6ec76 - tag: v0.2.1 + - commit: f989f3c54c1ca15e29c5bd6b1ce4efbcb3fd8078 + #tag: v0.2.1 type: git url: https://nheko.im/nheko-reborn/coeurl.git - config-opts: @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: a1b7b81ce00ef5808eac0fdd895a95044e1b07ed + - commit: c7a13e79289ae35c4e2a9bccb3fdeb2bc03a925d #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/src/MatrixClient.cpp b/src/MatrixClient.cpp index e1c890ed..b5ea7609 100644 --- a/src/MatrixClient.cpp +++ b/src/MatrixClient.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include "nlohmann/json.hpp" @@ -33,7 +34,13 @@ namespace http { mtx::http::Client * client() { - static auto client_ = std::make_shared(); + static auto client_ = [] { + auto c = std::make_shared(); + c->alt_svc_cache_path((QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + + "/curl_alt_svc_cache.txt") + .toStdString()); + return c; + }(); return client_.get(); } From 329b4310b3ce436f1cd182e821ac65579ae26021 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 20 Nov 2022 04:30:42 +0100 Subject: [PATCH 40/84] Fix cmark warning --- cmake/Findcmark.cmake | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cmake/Findcmark.cmake b/cmake/Findcmark.cmake index 29092bb0..6f3e72a3 100644 --- a/cmake/Findcmark.cmake +++ b/cmake/Findcmark.cmake @@ -2,7 +2,7 @@ # CMake module to search for the cmark library # -include(FindPkgConfig) +find_package(PkgConfig) pkg_check_modules(PC_CMARK QUIET cmark) if(NOT CMARK_INCLUDE_DIR) @@ -34,9 +34,8 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(cmark - DEFAULT_MSG - CMARK_INCLUDE_DIR - CMARK_LIBRARY) + REQUIRED_VARS CMARK_LIBRARY CMARK_INCLUDE_DIR +) mark_as_advanced(CMARK_LIBRARY CMARK_INCLUDE_DIR) From f440b411953c2aad752848390d67de7e75a2f1bc Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 22 Nov 2022 19:18:10 +0100 Subject: [PATCH 41/84] Fix stack overflow when filtering timeline --- src/timeline/TimelineFilter.cpp | 3 ++- src/timeline/TimelineModel.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/timeline/TimelineFilter.cpp b/src/timeline/TimelineFilter.cpp index cd17a7f6..91cae637 100644 --- a/src/timeline/TimelineFilter.cpp +++ b/src/timeline/TimelineFilter.cpp @@ -69,7 +69,8 @@ TimelineFilter::setSource(TimelineModel *s) this->setSourceModel(s); connect(s, &TimelineModel::currentIndexChanged, this, &TimelineFilter::currentIndexChanged); - connect(s, &TimelineModel::fetchedMore, this, &TimelineFilter::fetchAgain); + connect( + s, &TimelineModel::fetchedMore, this, &TimelineFilter::fetchAgain, Qt::QueuedConnection); emit sourceChanged(); invalidateFilter(); diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 6b764081..dedfa197 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -880,6 +880,9 @@ TimelineModel::setPaginationInProgress(const bool paginationInProgress) m_paginationInProgress = paginationInProgress; emit paginationInProgressChanged(m_paginationInProgress); + + if (m_paginationInProgress) + events.fetchMore(); } void @@ -891,8 +894,6 @@ TimelineModel::fetchMore(const QModelIndex &) } setPaginationInProgress(true); - - events.fetchMore(); } void From ea5984a575b34967fa7a58e117fe2deccad7c0b1 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 3 Dec 2022 21:20:04 -0500 Subject: [PATCH 42/84] Translated using Weblate (Chinese (Simplified)) Currently translated at 90.0% (770 of 855 strings) Co-authored-by: ling Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/zh_Hans/ Translation: Nheko/nheko --- resources/langs/nheko_zh_CN.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index 6ac2b84e..713475eb 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -2134,7 +2134,7 @@ Example: https://server.my:8787 type - + 类型 From 59703d3c255d8809434824838619b2239abe28fe Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 3 Dec 2022 02:10:45 +0100 Subject: [PATCH 43/84] Implement MSC3664, pushrules for related events --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- src/ChatPage.cpp | 24 +++++++++++++++++++++++- src/timeline/TimelineModel.cpp | 13 ++++++++++++- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c9256c4..60f16d9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -595,7 +595,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG c7a13e79289ae35c4e2a9bccb3fdeb2bc03a925d + GIT_TAG 7155cbb8ed3289f2cc7269da7607b0dd012f471b ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 7f3aefc3..f41f71b4 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: c7a13e79289ae35c4e2a9bccb3fdeb2bc03a925d + - commit: 7155cbb8ed3289f2cc7269da7607b0dd012f471b #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 5e0a7b73..1910ce0b 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -261,6 +261,10 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) cache::getEventIndex(room_id, cache::client()->getFullyReadEventId(room_id)); auto ctx = roomModel->pushrulesRoomContext(); + std::vector< + std::pair> + relatedEvents; + for (const auto &event : room.timeline.events) { mtx::events::collections::TimelineEvent te{event}; std::visit([room_id = room_id](auto &event_) { event_.room_id = room_id; }, @@ -277,7 +281,25 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) te.data = result.event.value(); } - auto actions = pushrules->evaluate(te, ctx); + relatedEvents.clear(); + for (const auto &r : mtx::accessors::relations(te.data).relations) { + auto related = cache::client()->getEvent(room_id, r.event_id); + if (related) { + relatedEvents.emplace_back(r, *related); + if (auto encryptedEvent = std::get_if< + mtx::events::EncryptedEvent>( + &related->data); + encryptedEvent && userSettings_->decryptNotifications()) { + MegolmSessionIndex index(room_id, encryptedEvent->content); + + auto result = olm::decryptEvent(index, *encryptedEvent); + if (result.event) + relatedEvents.back().second.data = result.event.value(); + } + } + } + + auto actions = pushrules->evaluate(te, ctx, relatedEvents); if (std::find(actions.begin(), actions.end(), mtx::pushrules::actions::Action{ diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index dedfa197..f61214fd 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -742,7 +742,18 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r case Notificationlevel: { const auto &push = ChatPage::instance()->pushruleEvaluator(); if (push) { - auto actions = push->evaluate({event}, pushrulesRoomContext()); + const auto &id = event_id(event); + std::vector> + relatedEvents; + for (const auto &r : mtx::accessors::relations(event).relations) { + auto related = events.get(r.event_id, id); + if (related) { + relatedEvents.emplace_back(r, + mtx::events::collections::TimelineEvent{*related}); + } + } + + auto actions = push->evaluate({event}, pushrulesRoomContext(), relatedEvents); if (std::find(actions.begin(), actions.end(), mtx::pushrules::actions::Action{ From 4b8709598b064dcfc3ab9e8ddce631a44574eaed Mon Sep 17 00:00:00 2001 From: q234rty Date: Tue, 6 Dec 2022 01:48:06 +0800 Subject: [PATCH 44/84] Fix people icon blurriness --- resources/qml/TopBar.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index 4608da4d..bdf19bf9 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -228,8 +228,6 @@ Pane { Layout.maximumWidth: Nheko.avatarSize - Nheko.paddingMedium contentItem: EncryptionIndicator { - sourceSize.height: parent.Layout.preferredHeight * Screen.devicePixelRatio - sourceSize.width: parent.Layout.preferredWidth * Screen.devicePixelRatio encrypted: isEncrypted trust: trustlevel enabled: false From 93291abfdf0897c626e69f1ffc1585a6170070fd Mon Sep 17 00:00:00 2001 From: q234rty Date: Tue, 6 Dec 2022 01:49:42 +0800 Subject: [PATCH 45/84] Fix downscale --- resources/qml/EncryptionIndicator.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/EncryptionIndicator.qml b/resources/qml/EncryptionIndicator.qml index 0bbdffc6..04d4bace 100644 --- a/resources/qml/EncryptionIndicator.qml +++ b/resources/qml/EncryptionIndicator.qml @@ -34,8 +34,8 @@ Image { width: 16 height: 16 - sourceSize.height: height * Screen.devicePixelRatio - sourceSize.width: width * Screen.devicePixelRatio + sourceSize.height: height + sourceSize.width: width source: { if (encrypted) { switch (trust) { From 283d6361e8c194fd3e2831254a8fb858a9046c82 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 7 Dec 2022 12:47:03 +0100 Subject: [PATCH 46/84] Properly check for target room encryption --- src/timeline/TimelineViewManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 490bf726..12a247c8 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -10,6 +10,7 @@ #include #include +#include "Cache.h" #include "ChatPage.h" #include "CombinedImagePackModel.h" #include "CommandCompleter.h" @@ -461,7 +462,7 @@ TimelineViewManager::forwardMessageToRoom(mtx::events::collections::TimelineEven auto content = mtx::accessors::url(*e); std::optional encryptionInfo = mtx::accessors::file(*e); - if (encryptionInfo) { + if (encryptionInfo && !cache::isRoomEncrypted(roomId.toStdString())) { http::client()->download( content, [this, roomId, e, encryptionInfo](const std::string &res, From 40a7d58ce1eff68d3b5ef21629663249851a5b39 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 7 Dec 2022 13:09:41 +0100 Subject: [PATCH 47/84] fix squish --- resources/qml/TopBar.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index bdf19bf9..5d65f3bc 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -225,7 +225,7 @@ Pane { Layout.row: 1 Layout.rowSpan: 2 Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium - Layout.maximumWidth: Nheko.avatarSize - Nheko.paddingMedium + Layout.preferredWidth: Nheko.avatarSize - Nheko.paddingMedium contentItem: EncryptionIndicator { encrypted: isEncrypted From c2eb2f7ad116f04168e264cad0770e683aa6e6b1 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 9 Dec 2022 23:08:12 -0500 Subject: [PATCH 48/84] Translated using Weblate (French) Currently translated at 75.0% (642 of 855 strings) Translated using Weblate (French) Currently translated at 75.0% (642 of 855 strings) Translated using Weblate (French) Currently translated at 75.0% (642 of 855 strings) Co-authored-by: GitEz-code Co-authored-by: Guillaume Girol Co-authored-by: lascapi Translate-URL: https://weblate.nheko.im/projects/nheko/nheko-master/fr/ Translation: Nheko/nheko --- resources/langs/nheko_fr.ts | 72 ++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index 3c1a120e..05b3140b 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -234,7 +234,7 @@ Failed to open database, logging out! - Impossible d'ouvrir la base de données, déconnexion ! + Impossible d'ouvrir la base de données, déconnexion ! @@ -270,7 +270,7 @@ Do you really want to invite %1 (%2)? - Voulez-vous vraiment inviter %1 (%2) ? + Voulez-vous vraiment inviter %1 (%2) ? @@ -300,7 +300,7 @@ Do you really want to unban %1 (%2)? - Voulez-vous vraiment annuler le bannissement de %1 (%2) ? + Voulez-vous vraiment annuler le bannissement de %1 (%2) ? @@ -320,7 +320,7 @@ Cache migration failed! - Échec de la migration du cache ! + Échec de la migration du cache ! @@ -369,7 +369,7 @@ You may optionally provide a reason for others to accept your knock: Failed to remove invite: %1 - Impossible de supprimer l'invitation : %1 + Impossible de supprimer l'invitation : %1 @@ -394,7 +394,7 @@ You may optionally provide a reason for others to accept your knock: Failed to kick %1 from %2: %3 - Échec de l'expulsion de %1 de %2  : %3 + Échec de l'expulsion de %1 de %2  : %3 @@ -582,7 +582,7 @@ You may optionally provide a reason for others to accept your knock: Name - Nom + Nom @@ -612,7 +612,7 @@ You may optionally provide a reason for others to accept your knock: Alias - Alias + Alias @@ -637,7 +637,7 @@ You may optionally provide a reason for others to accept your knock: Encryption - Chiffrement + Chiffrement @@ -683,17 +683,17 @@ You may optionally provide a reason for others to accept your knock: Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification! - Veuillez vérifier les chiffres suivants. Vous devriez voir les mêmes chiffres des deux côtés. Si ceux-ci diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! + Veuillez vérifier les chiffres suivants. Vous devriez voir les mêmes chiffres des deux côtés. Si ceux-ci diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! They do not match! - Ils sont différents ! + Ils sont différents ! They match! - Ils sont identiques ! + Ils sont identiques ! @@ -754,7 +754,7 @@ You may optionally provide a reason for others to accept your knock: Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification! - Veuillez vérifier les émoji suivants. Vous devriez voir les mêmes émoji des deux côtés. S'ils diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! + Veuillez vérifier les émoji suivants. Vous devriez voir les mêmes émoji des deux côtés. S'ils diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! @@ -764,12 +764,12 @@ You may optionally provide a reason for others to accept your knock: They do not match! - Ils sont différents ! + Ils sont différents ! They match! - Ils sont identiques ! + Ils sont identiques ! @@ -820,7 +820,7 @@ You may optionally provide a reason for others to accept your knock: This message is not encrypted! - Ce message n'est pas chiffré ! + Ce message n'est pas chiffré ! @@ -853,7 +853,7 @@ You may optionally provide a reason for others to accept your knock: Key mismatch detected! - Clés non correspondantes détectées ! + Clés non correspondantes détectées ! @@ -868,7 +868,7 @@ You may optionally provide a reason for others to accept your knock: Verification messages received out of order! - Messages de vérification reçus dans le désordre ! + Messages de vérification reçus dans le désordre ! @@ -1249,7 +1249,7 @@ Example: https://server.my:8787 You have entered an invalid Matrix ID e.g @joe:matrix.org - Vous avez entré un identifiant Matrix invalide exemple correct : @moi:monserveur.example.com) + Vous avez entré un identifiant Matrix invalide exemple correct : @moi:monserveur.example.com) @@ -1332,12 +1332,12 @@ Example: https://server.my:8787 A call is in progress. Log out? - Un appel est en cours. Se déconnecter ? + Un appel est en cours. Se déconnecter ? Are you sure you want to log out? - Êtes-vous certain de vouloir vous déconnecter ? + Êtes-vous certain de vouloir vous déconnecter ? @@ -1726,7 +1726,7 @@ Example: https://server.my:8787 Place a call to %1? - Appeler %1 ? + Appeler %1 ? @@ -2834,17 +2834,17 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. Share desktop with %1? - Partager le bureau avec %1  ? + Partager le bureau avec %1  ? Window: - Fenêtre : + Fenêtre : Frame rate: - Fréquence d'images : + Fréquence d'images : @@ -2893,7 +2893,7 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. Nheko could not connect to the secure storage to save encryption secrets to. This can have multiple reasons. Check if your D-Bus service is running and you have configured a service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If you are having trouble, feel free to open an issue here: https://github.com/Nheko-Reborn/nheko/issues - Nheko n'a pas pu se connecter au stockage sécurisé afin d'y sauvegarder les clés de chiffrement. Cela peut avoir différentes causes. Vérifiez si votre service D-Bus est lancé, et si vous avez configuré un service tel que KWallet ; Gnome Keyring ; KeePassXC ou l'équivalent pour votre système. Si vous n'arrivez pas à résoudre le problème, n'hésitez pas à nous en faire part ici : https ://github.com/Nheko-Reborn/nheko/issues + Nheko n'a pas pu se connecter au stockage sécurisé afin d'y sauvegarder les clés de chiffrement. Cela peut avoir différentes causes. Vérifiez si votre service D-Bus est lancé, et si vous avez configuré un service tel que KWallet ; Gnome Keyring ; KeePassXC ou l'équivalent pour votre système. Si vous n'arrivez pas à résoudre le problème, n'hésitez pas à nous en faire part ici : https ://github.com/Nheko-Reborn/nheko/issues @@ -2901,7 +2901,7 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. This is your recovery key. You will need it to restore access to your encrypted messages and verification keys. Keep this safe. Don't share it with anyone and don't lose it! Do not pass go! Do not collect $200! - Ceci est votre clé de récupération. Vous en aurez besoin afin de restaurer l'accès à vos messages chiffrés et à vos clés de vérification. Gardez cette clé en sûreté. Ne la partagez pas avec qui que ce soit et ne la perdez pas ! Ne passez pas par la case départ et ne recevez pas 20 000 francs ! + Ceci est votre clé de récupération. Vous en aurez besoin afin de restaurer l'accès à vos messages chiffrés et à vos clés de vérification. Gardez cette clé en sûreté. Ne la partagez pas avec qui que ce soit et ne la perdez pas ! Ne passez pas par la case départ et ne recevez pas 20 000 francs ! @@ -2922,8 +2922,8 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. Hello and welcome to Matrix! It seems like you are new. Before you can securely encrypt your messages, we need to setup a few small things. You can either press accept immediately or adjust a few basic options. We also try to explain a few of the basics. You can skip those parts, but they might prove to be helpful! - Bonjour et bienvenue sur le réseau Matrix ! -Il semblerait que ce soit votre première fois ici. Avant de pouvoir chiffrer vos messages de manière sécurisée, nous devons configurer quelques détails. Vous pouvez soit accepter immédiatement, soit ajuster quelques options basiques. Nous essayons également d'expliquer le fonctionnement de certains mécanismes. Vous pouvez sauter ces étapes, mais celles-ci pourraient se montrer utiles par la suite ! + Bonjour et bienvenue sur le réseau Matrix ! +Il semblerait que ce soit votre première fois ici. Avant de pouvoir chiffrer vos messages de manière sécurisée, nous devons configurer quelques détails. Vous pouvez soit accepter immédiatement, soit ajuster quelques options basiques. Nous essayons également d'expliquer le fonctionnement de certains mécanismes. Vous pouvez sauter ces étapes, mais celles-ci pourraient se montrer utiles par la suite ! @@ -2953,17 +2953,17 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Failed to create keys for cross-signing! - Échec de la création des clés pour l'auto-vérification (cross-signing) ! + Échec de la création des clés pour l'auto-vérification (cross-signing) ! Failed to create keys for online key backup! - Échec de la création de clés pour la sauvegarde en ligne ! + Échec de la création de clés pour la sauvegarde en ligne ! Failed to create keys for secure server side secret storage! - Échec de la création des clés pour le stockage sécurisé côté serveur ! + Échec de la création des clés pour le stockage sécurisé côté serveur ! @@ -2973,7 +2973,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Encryption setup failed: %1 - Échec de la configuration du chiffrement : %1 + Échec de la configuration du chiffrement : %1 @@ -3086,7 +3086,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Verification successful! Both sides verified their devices! - Vérification réussie ! Les deux côtés ont vérifié leur appareil ! + Vérification réussie ! Les deux côtés ont vérifié leur appareil ! @@ -3106,7 +3106,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Failed to encrypt event, sending aborted! - Échec du chiffrement de l'évènement, envoi abandonné ! + Échec du chiffrement de l'évènement, envoi abandonné ! @@ -3486,7 +3486,7 @@ Raison : %4 %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 a quitté le salon après l'avoir déjà quitté ! + %1 a quitté le salon après l'avoir déjà quitté ! From fa0c14b84681b94ff2136d6b7480c8b7283ad96a Mon Sep 17 00:00:00 2001 From: Loren Burkholder <55629213+LorenDB@users.noreply.github.com> Date: Sat, 10 Dec 2022 10:17:15 -0500 Subject: [PATCH 49/84] confetti (#1243) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🎉 (confetti) message support. Thanks @LorenDB ! --- CMakeLists.txt | 4 +- io.github.NhekoReborn.Nheko.yaml | 2 +- resources/confettiparticle.png | Bin 0 -> 4732 bytes resources/confettiparticle.svg | 49 +++++++++++++++ resources/qml/MessageView.qml | 1 - resources/qml/TimelineView.qml | 64 ++++++++++++++++++++ resources/qml/delegates/MessageDelegate.qml | 14 +++++ resources/res.qrc | 1 + src/CommandCompleter.cpp | 12 ++++ src/CommandCompleter.h | 2 + src/UserSettingsPage.cpp | 30 +++++++++ src/UserSettingsPage.h | 7 +++ src/timeline/InputBar.cpp | 25 ++++++++ src/timeline/InputBar.h | 1 + src/timeline/TimelineModel.cpp | 37 ++++++++++- src/timeline/TimelineModel.h | 8 +++ 16 files changed, 251 insertions(+), 6 deletions(-) create mode 100644 resources/confettiparticle.png create mode 100644 resources/confettiparticle.svg diff --git a/CMakeLists.txt b/CMakeLists.txt index 60f16d9a..d7219318 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -594,8 +594,8 @@ if(USE_BUNDLED_MTXCLIENT) include(FetchContent) FetchContent_Declare( MatrixClient - GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 7155cbb8ed3289f2cc7269da7607b0dd012f471b + GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git + GIT_TAG 13285437739413587a22272865d1e684e1959579 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index f41f71b4..c82513e4 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: 7155cbb8ed3289f2cc7269da7607b0dd012f471b + - commit: 13285437739413587a22272865d1e684e1959579 #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/resources/confettiparticle.png b/resources/confettiparticle.png new file mode 100644 index 0000000000000000000000000000000000000000..808429d82e78c276c0776b178d69aea714cbcfea GIT binary patch literal 4732 zcmeHKX;f3!77n5hM8Oe6hH?!mW0ISBSOkPHg%V^EnXF!t8@NaYl8^*Ms-Rd7I|+!mUjMk(>p!yAy}9?CZ-0C5@9eYJ zxjDf>ex@c?CO90A8$)@LKhE%jEdRUct?3ZuP zY`;wyaeOeZY;R{<)& zRo}VQbN_R)$n|kCtN3YVjWRG>`=+xaA+`X2Y08l6Z~f;SuR6GIUi`%Q%%%K6;R(xm z6|U@8)v=3I+}krugRe}}M*mP^ZIU_Y&XAFZj;((hImfqwz4=kdx`tV)ubbT4w>Pv_ zrIx1tj_=E*KZ}3Y$>}Wb$bfdN&yfAvcCfc=Xwj`a+oPKEjUDbSCCRzPl(=2}CEfNF z3)}M+)>pe6jcGF2k`gE;b>w}ET|e=Kwe!om+Sys}4|^YQHs!S5FTGrU&B5CDnMGvF z5yQ~O|N44*(Z--GL9QzKm`@Blf0Nzngd)PtSobvFC%T>H1vqM=gDQ)Lca zF$P{!@0!H>FN4Ijc1~CAg$(@EUkpmGq!e5;GT!N|Vf~xG*wC!Z@Q2FAgq$;d)!WXM z9fO>sW+vr^*9Gu*c@)^N!&lHwBu0d_9-)7Ea8Kdcr-Nw~OA7)C`-+TQB38N8q^Xtt zPpai}YJaRg9JIACG;#AClVjb^13T?))7r0^c?7T$c|%qAs-B9QW3XyvVcwLU znwb8t(zu=8&Ida0Q4gtyqJHM=Oyv1mar#cf>G>gciPl}S-ZM+@9BEAr)Z<4!xXt8eKs#{x%iILl7sC_sp&g{&2Pv<9rg$9wlqGzJJN{zf>E=dTyMfoGCYlRukZ?hAd~Py%_bT(OQ^sqI>x|c74@! zx+ti5-jtT52CA_ajQp-e(VM6x)PsFlb;Ps8EdJhXB|xE57GacDdy<>GrT{)C4x5f{Ib zE`SAc9-4sprzy~|w4iWd+FBu7g!gbaano`Dfdo|{kXDi;RdTdkyq=c>o^`_{Jfw%H z)^hQYf?$XzQ=kxyNF%}oA1$V);N49iH-$*d3HA0JqX2JQe1b|P=a5JmjfSY95@m{b z5}D0rlVA#oLLmSIL76I5AzFe|X|JOg>8gQP{|Br*{uNhG9+7D|&J6Q=0G<9l=QI{zGzOo)j%`bR3vW>e^K6oQaKXA@{_8k2yC zU>ZRz6pJY^Sp+l5lnGRPsZxbVg{Y1SkP|V$Bc{^H6skCmK&8-V1R71uCa_^v93f83 zCNn8alq#l8q*$)NKvg116Qj~mi2zj`T}T%(V1z(}5pbiisRTBa%p$-jlgfn2Y=)SD z>Z1_}IleN51Ody5NsxGyB$vkPCv<{yJcIdMJcS5<90^WBRAOMj#Rp>26z#`}a7==R zsSur-WCooKe9(aq44A=Yegs9J3MHsS9VZzkQb&1p%fbQ40AUebodN>A1;~ZNQ=o`S zrU;kGlDK$XNRZA_U*3@0=%V;zN`Oe!Rs2}ZhoQ-%Z=+iv3DZwOkiKj=h;Y=25>cZf zy(3^ZIwed%r12=&-(v;!VI2FL#X@O98kwbAA~q8y&=5M6z(SZP0TnZZ6c!9KSoG1w z8fRC^#3~JBPTN4=CzpT?p|Ky^C7U~hveqAC*wc(8(WKi&;y{Jbn;pHPRcbY z*Jmm4S>Va)nw0Ca6!n;QB zcOGgmXr$r`e2kt=wZ=iy_Wkr{AQ)Px@`+UOWD?ye8K*zIp(03wsS+UF;cewcvjqTT z!}s + + + + + + diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml index 8e6ad8d2..e3e02ee9 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml @@ -59,7 +59,6 @@ Item { onCountChanged: { // Mark timeline as read if (atYEnd && room) model.currentIndex = 0; - } ScrollBar.vertical: scrollbar diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index ab1bbc28..dff23700 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -13,6 +13,7 @@ import Qt.labs.platform 1.1 as Platform import QtQuick 2.15 import QtQuick.Controls 2.5 import QtQuick.Layouts 1.3 +import QtQuick.Particles 2.15 import QtQuick.Window 2.13 import im.nheko 1.0 import im.nheko.EmojiModel 1.0 @@ -25,6 +26,8 @@ Item { property bool showBackButton: false clip: true + onRoomChanged: if (room != null) room.triggerSpecialEffects() + Shortcut { sequence: StandardKey.Close onActivated: Rooms.resetCurrentRoom() @@ -298,6 +301,58 @@ Item { onClicked: Rooms.resetCurrentRoom() } + ParticleSystem { id: confettiParticleSystem } + + Emitter { + id: confettiEmitter + + width: parent.width * 3/4 + enabled: false + anchors.horizontalCenter: parent.horizontalCenter + y: parent.height + emitRate: Math.min(400 * Math.sqrt(parent.width * parent.height) / 870, 1000) + lifeSpan: 15000 + system: confettiParticleSystem + velocityFromMovement: 8 + size: 16 + sizeVariation: 4 + velocity: PointDirection { + x: 0 + y: -Math.min(450 * parent.height / 700, 1000) + xVariation: Math.min(4 * parent.width / 7, 450) + yVariation: 250 + } + + ImageParticle { + system: confettiParticleSystem + source: "qrc:/confettiparticle.svg" + rotationVelocity: 0 + rotationVelocityVariation: 360 + colorVariation: 1 + color: "white" + entryEffect: ImageParticle.None + xVector: PointDirection { + x: 1 + y: 0 + xVariation: 0.2 + yVariation: 0.2 + } + yVector: PointDirection { + x: 0 + y: 0.5 + xVariation: 0.2 + yVariation: 0.2 + } + } + } + + Gravity { + system: confettiParticleSystem + anchors.fill: parent + magnitude: 350 + angle: 90 + } + NhekoDropArea { anchors.fill: parent roomid: room ? room.roomId : "" @@ -321,6 +376,15 @@ Item { timelineRoot.destroyOnClose(dialog); } + function onConfetti() + { + if (!Settings.fancyEffects) + return + + confettiEmitter.pulse(parent.height * 2) + room.markSpecialEffectsDone() + } + target: room } diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml index a2a44cb2..3725be05 100644 --- a/resources/qml/delegates/MessageDelegate.qml +++ b/resources/qml/delegates/MessageDelegate.qml @@ -75,6 +75,20 @@ Item { } + DelegateChoice { + roleValue: MtxEvent.ConfettiMessage + + TextMessage { + formatted: d.formattedBody + body: d.body + isOnlyEmoji: d.isOnlyEmoji + isReply: d.isReply + keepFullText: d.keepFullText + metadataWidth: d.metadataWidth + } + + } + DelegateChoice { roleValue: MtxEvent.NoticeMessage diff --git a/resources/res.qrc b/resources/res.qrc index 595dd5a7..e9320a1b 100644 --- a/resources/res.qrc +++ b/resources/res.qrc @@ -193,6 +193,7 @@ qml/voip/PlaceCall.qml qml/voip/ScreenShare.qml qml/voip/VideoCall.qml + confettiparticle.svg media/ring.ogg diff --git a/src/CommandCompleter.cpp b/src/CommandCompleter.cpp index 96dfeace..307defa4 100644 --- a/src/CommandCompleter.cpp +++ b/src/CommandCompleter.cpp @@ -82,6 +82,10 @@ CommandCompleter::data(const QModelIndex &index, int role) const return QString("/notice "); case RainbowNotice: return QString("/rainbownotice "); + case Confetti: + return QString("/confetti "); + case RainbowConfetti: + return QString("/rainbowconfetti "); case Goto: return QString("/goto "); case ConvertToDm: @@ -145,6 +149,10 @@ CommandCompleter::data(const QModelIndex &index, int role) const return tr("/notice [message]"); case RainbowNotice: return tr("/rainbownotice [message]"); + case Confetti: + return tr("/confetti [message]"); + case RainbowConfetti: + return tr("/rainbowconfetti [message]"); case Goto: return tr("/goto ($eventid|message index|matrix:r/room/e/event)"); case ConvertToDm: @@ -207,6 +215,10 @@ CommandCompleter::data(const QModelIndex &index, int role) const return tr("Send a bot message."); case RainbowNotice: return tr("Send a bot message in rainbow colors."); + case Confetti: + return tr("Send a message with confetti."); + case RainbowConfetti: + return tr("Send a message in rainbow colors with confetti."); case Goto: return tr("Go to this event or link."); case ConvertToDm: diff --git a/src/CommandCompleter.h b/src/CommandCompleter.h index 360bff73..08272a19 100644 --- a/src/CommandCompleter.h +++ b/src/CommandCompleter.h @@ -44,6 +44,8 @@ public: RainbowMe, Notice, RainbowNotice, + Confetti, + RainbowConfetti, Goto, ConvertToDm, ConvertToRoom, diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 7082d4e2..145b3b8f 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -92,6 +92,7 @@ UserSettings::load(std::optional profile) decryptNotifications_ = settings.value(QStringLiteral("user/decrypt_notifications"), true).toBool(); spaceNotifications_ = settings.value(QStringLiteral("user/space_notifications"), true).toBool(); + fancyEffects_ = settings.value(QStringLiteral("user/fancy_effects"), true).toBool(); privacyScreen_ = settings.value(QStringLiteral("user/privacy_screen"), false).toBool(); privacyScreenTimeout_ = settings.value(QStringLiteral("user/privacy_screen_timeout"), 0).toInt(); @@ -459,6 +460,16 @@ UserSettings::setSpaceNotifications(bool state) save(); } +void +UserSettings::setFancyEffects(bool state) +{ + if (state == fancyEffects_) + return; + fancyEffects_ = state; + emit fancyEffectsChanged(state); + save(); +} + void UserSettings::setPrivacyScreen(bool state) { @@ -822,6 +833,7 @@ UserSettings::save() settings.setValue(QStringLiteral("decrypt_sidebar"), decryptSidebar_); settings.setValue(QStringLiteral("decrypt_notificatons"), decryptNotifications_); settings.setValue(QStringLiteral("space_notifications"), spaceNotifications_); + settings.setValue(QStringLiteral("fancy_effects"), fancyEffects_); settings.setValue(QStringLiteral("privacy_screen"), privacyScreen_); settings.setValue(QStringLiteral("privacy_screen_timeout"), privacyScreenTimeout_); settings.setValue(QStringLiteral("mobile_mode"), mobileMode_); @@ -976,6 +988,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr("Decrypt notifications"); case SpaceNotifications: return tr("Show message counts for communities and tags"); + case FancyEffects: + return tr("Display fancy effects such as confetti"); case PrivacyScreen: return tr("Privacy Screen"); case PrivacyScreenTimeout: @@ -1112,6 +1126,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return i->decryptNotifications(); case SpaceNotifications: return i->spaceNotifications(); + case FancyEffects: + return i->fancyEffects(); case PrivacyScreen: return i->privacyScreen(); case PrivacyScreenTimeout: @@ -1276,6 +1292,9 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case SpaceNotifications: return tr("Choose where to show the total number of notifications contained within a " "community or tag."); + case FancyEffects: + return tr("Some messages can be sent with fancy effects. For example, messages sent " + "with '/confetti' will show confetti on screen."); case PrivacyScreen: return tr("When the window loses focus, the timeline will\nbe blurred."); case MobileMode: @@ -1388,6 +1407,7 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case UseOnlineKeyBackup: case ExposeDBusApi: case SpaceNotifications: + case FancyEffects: return Toggle; case Profile: case UserId: @@ -1716,6 +1736,13 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int } else return false; } + case FancyEffects: { + if (value.userType() == QMetaType::Bool) { + i->setFancyEffects(value.toBool()); + return true; + } else + return false; + } case PrivacyScreen: { if (value.userType() == QMetaType::Bool) { i->setPrivacyScreen(value.toBool()); @@ -2037,6 +2064,9 @@ UserSettingsModel::UserSettingsModel(QObject *p) connect(s.get(), &UserSettings::spaceNotificationsChanged, this, [this]() { emit dataChanged(index(SpaceNotifications), index(SpaceNotifications), {Value}); }); + connect(s.get(), &UserSettings::fancyEffectsChanged, this, [this]() { + emit dataChanged(index(FancyEffects), index(FancyEffects), {Value}); + }); connect(s.get(), &UserSettings::trayChanged, this, [this]() { emit dataChanged(index(Tray), index(Tray), {Value}); emit dataChanged(index(StartInTray), index(StartInTray), {Enabled}); diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 3bd0f833..4d805bb7 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -64,6 +64,7 @@ class UserSettings final : public QObject NOTIFY decryptNotificationsChanged) Q_PROPERTY(bool spaceNotifications READ spaceNotifications WRITE setSpaceNotifications NOTIFY spaceNotificationsChanged) + Q_PROPERTY(bool fancyEffects READ fancyEffects WRITE setFancyEffects NOTIFY fancyEffectsChanged) Q_PROPERTY( bool privacyScreen READ privacyScreen WRITE setPrivacyScreen NOTIFY privacyScreenChanged) Q_PROPERTY(int privacyScreenTimeout READ privacyScreenTimeout WRITE setPrivacyScreenTimeout @@ -171,6 +172,7 @@ public: void setDecryptSidebar(bool state); void setDecryptNotifications(bool state); void setSpaceNotifications(bool state); + void setFancyEffects(bool state); void setPrivacyScreen(bool state); void setPrivacyScreenTimeout(int state); void setPresence(Presence state); @@ -214,6 +216,7 @@ public: bool decryptSidebar() const { return decryptSidebar_; } bool decryptNotifications() const { return decryptNotifications_; } bool spaceNotifications() const { return spaceNotifications_; } + bool fancyEffects() const { return fancyEffects_; } bool privacyScreen() const { return privacyScreen_; } int privacyScreenTimeout() const { return privacyScreenTimeout_; } bool markdown() const { return markdown_; } @@ -295,6 +298,7 @@ signals: void decryptSidebarChanged(bool state); void decryptNotificationsChanged(bool state); void spaceNotificationsChanged(bool state); + void fancyEffectsChanged(bool state); void privacyScreenChanged(bool state); void privacyScreenTimeoutChanged(int state); void timelineMaxWidthChanged(int state); @@ -360,6 +364,7 @@ private: bool decryptSidebar_; bool decryptNotifications_; bool spaceNotifications_; + bool fancyEffects_; bool privacyScreen_; int privacyScreenTimeout_; bool shareKeysWithTrustedUsers_; @@ -442,6 +447,8 @@ class UserSettingsModel final : public QAbstractListModel InvertEnterKey, Bubbles, SmallAvatars, + FancyEffects, + SidebarSection, GroupView, SortByImportance, diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index a9afb01c..94955152 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -534,6 +534,27 @@ InputBar::notice(const QString &msg, bool rainbowify) room->sendMessageEvent(notice, mtx::events::EventType::RoomMessage); } +void +InputBar::confetti(const QString &body, bool rainbowify) +{ + auto html = utils::markdownToHtml(body, rainbowify); + + mtx::events::msg::Confetti confetti; + confetti.body = body.trimmed().toStdString(); + + if (html != body.trimmed().toHtmlEscaped() && + ChatPage::instance()->userSettings()->markdown()) { + confetti.formatted_body = html.toStdString(); + confetti.format = "org.matrix.custom.html"; + // Remove markdown links by completer + confetti.body = replaceMatrixToMarkdownLink(body.trimmed()).toStdString(); + } + + confetti.relations = generateRelations(); + + room->sendMessageEvent(confetti, mtx::events::EventType::RoomMessage); +} + void InputBar::image(const QString &filename, const std::optional &file, @@ -777,6 +798,10 @@ InputBar::command(const QString &command, QString args) notice(args, false); } else if (command == QLatin1String("rainbownotice")) { notice(args, true); + } else if (command == QLatin1String("confetti")) { + confetti(args, false); + } else if (command == QLatin1String("rainbowconfetti")) { + confetti(args, true); } else if (command == QLatin1String("goto")) { // Goto has three different modes: // 1 - Going directly to a given event ID diff --git a/src/timeline/InputBar.h b/src/timeline/InputBar.h index eced7cb8..125591d4 100644 --- a/src/timeline/InputBar.h +++ b/src/timeline/InputBar.h @@ -230,6 +230,7 @@ signals: private: void emote(const QString &body, bool rainbowify); void notice(const QString &body, bool rainbowify); + void confetti(const QString &body, bool rainbowify); void command(const QString &name, QString args); void image(const QString &filename, const std::optional &file, diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index f61214fd..fe8a78ef 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -53,6 +53,10 @@ struct RoomEventType { return qml_mtx_events::EventType::AudioMessage; } + qml_mtx_events::EventType operator()(const mtx::events::Event &) + { + return qml_mtx_events::EventType::ConfettiMessage; + } qml_mtx_events::EventType operator()(const mtx::events::Event &) { return qml_mtx_events::EventType::EmoteMessage; @@ -346,6 +350,7 @@ qml_mtx_events::fromRoomEventType(qml_mtx_events::EventType t) return mtx::events::EventType::SpaceChild; /// m.room.message case qml_mtx_events::AudioMessage: + case qml_mtx_events::ConfettiMessage: case qml_mtx_events::EmoteMessage: case qml_mtx_events::FileMessage: case qml_mtx_events::ImageMessage: @@ -1025,9 +1030,18 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) } else if (std::holds_alternative>(e)) { this->parentChecked = false; emit parentSpaceChanged(); - } + } else if (std::holds_alternative>(e)) { + if (auto msg = QString::fromStdString( + std::get>(e).content.body); + msg.contains("🎉") || msg.contains("🎊")) + needsSpecialEffects_ = true; + } else if (std::holds_alternative>(e)) + needsSpecialEffects_ = true; } + if (needsSpecialEffects_) + emit confetti(); + updateLastMessage(); } @@ -1957,6 +1971,22 @@ TimelineModel::copyLinkToEvent(const QString &eventId) const QGuiApplication::clipboard()->setText(link); } +void +TimelineModel::triggerSpecialEffects() +{ + if (needsSpecialEffects_) { + // Note (Loren): Without the timer, this apparently emits before QML is ready + QTimer::singleShot(1, this, [this] { emit confetti(); }); + needsSpecialEffects_ = false; + } +} + +void +TimelineModel::markSpecialEffectsDone() +{ + needsSpecialEffects_ = false; +} + QString TimelineModel::formatTypingUsers(const std::vector &users, const QColor &bg) { @@ -2790,7 +2820,8 @@ TimelineModel::setEdit(const QString &newEdit) auto msgType = mtx::accessors::msg_type(e); if (msgType == mtx::events::MessageType::Text || msgType == mtx::events::MessageType::Notice || - msgType == mtx::events::MessageType::Emote) { + msgType == mtx::events::MessageType::Emote || + msgType == mtx::events::MessageType::Confetti) { auto relInfo = relatedInfo(newEdit); auto editText = relInfo.quoted_body; @@ -2811,6 +2842,8 @@ TimelineModel::setEdit(const QString &newEdit) if (msgType == mtx::events::MessageType::Emote) input()->setText("/me " + editText); + else if (msgType == mtx::events::MessageType::Confetti) + input()->setText("/confetti" + editText); else input()->setText(editText); } else { diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 9daeeb3a..2352be1f 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -100,6 +100,7 @@ enum EventType Widget, /// m.room.message AudioMessage, + ConfettiMessage, EmoteMessage, FileMessage, ImageMessage, @@ -419,6 +420,9 @@ public slots: QString scrollTarget() const; + void triggerSpecialEffects(); + void markSpecialEffectsDone(); + private slots: void addPendingMessage(mtx::events::collections::TimelineEvents event); void scrollTimerEvent(); @@ -438,6 +442,7 @@ signals: void paginationInProgressChanged(const bool); void newCallEvent(const mtx::events::collections::TimelineEvents &event); void scrollToIndex(int index); + void confetti(); void lastMessageChanged(); void notificationsChanged(); @@ -509,6 +514,9 @@ private: std::string last_event_id; std::string fullyReadEventId_; + // TODO (Loren): This should hopefully handle more than just confetti in the future + bool needsSpecialEffects_ = false; + std::unique_ptr parentSummary = nullptr; bool parentChecked = false; }; From 0035c359ce97bf5975e19fd519f5852a40967bd7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Dec 2022 03:57:32 +0100 Subject: [PATCH 50/84] Disable keyboard selection for text by default --- resources/qml/MatrixText.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/qml/MatrixText.qml b/resources/qml/MatrixText.qml index 69eb7cdb..8af66e9b 100644 --- a/resources/qml/MatrixText.qml +++ b/resources/qml/MatrixText.qml @@ -15,8 +15,10 @@ TextEdit { textFormat: TextEdit.RichText readOnly: true focus: false + activeFocusOnPress: false wrapMode: Text.Wrap selectByMouse: !Settings.mobileMode + selectByKeyboard: false // this always has to be enabled, otherwise you can't click links anymore! //enabled: selectByMouse color: Nheko.colors.text From 952827d629bbb7571f290dad63ae5dad69646472 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Dec 2022 05:08:05 +0100 Subject: [PATCH 51/84] Add a button to room the upgraded room in the timeline --- resources/qml/delegates/MessageDelegate.qml | 28 +++++++++++++++++++++ src/timeline/TimelineModel.cpp | 27 +++++++++++++++++++- src/timeline/TimelineModel.h | 1 + 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml index 3725be05..c2d49e91 100644 --- a/resources/qml/delegates/MessageDelegate.qml +++ b/resources/qml/delegates/MessageDelegate.qml @@ -61,6 +61,33 @@ Item { } + DelegateChoice { + roleValue: MtxEvent.Tombstone + + + ColumnLayout { + width: parent.width + + NoticeMessage { + body: formatted + isOnlyEmoji: false + isReply: d.isReply + keepFullText: d.keepFullText + isStateEvent: d.isStateEvent + Layout.fillWidth: true + formatted: qsTr("This room was replaced for the following reason: %1").arg(d.body) + } + + Button { + palette: Nheko.colors + Layout.alignment: Qt.AlignHCenter + text: qsTr("Go to replacement room") + onClicked: room.joinReplacementRoom(eventId) + } + + } + } + DelegateChoice { roleValue: MtxEvent.TextMessage @@ -579,6 +606,7 @@ Item { Button { visible: d.relatedEventCacheBuster, room.showAcceptKnockButton(d.eventId) palette: Nheko.colors + Layout.alignment: Qt.AlignHCenter text: qsTr("Allow them in") onClicked: room.acceptKnock(eventId) } diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index fe8a78ef..62dbdae6 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -1489,7 +1489,6 @@ TimelineModel::sendEncryptedMessage(mtx::events::RoomEvent msg, mtx::events:: const auto room_id = room_id_.toStdString(); using namespace mtx::events; - using namespace mtx::identifiers; nlohmann::json doc = {{"type", mtx::events::to_string(eventType)}, {"content", nlohmann::json(msg.content)}, @@ -2658,6 +2657,32 @@ TimelineModel::showAcceptKnockButton(const QString &id) return event->content.membership == Membership::Knock; } +void +TimelineModel::joinReplacementRoom(const QString &id) +{ + mtx::events::collections::TimelineEvents *e = events.get(id.toStdString(), ""); + if (!e) + return; + + auto event = std::get_if>(e); + if (!event) + return; + + auto joined_rooms = cache::joinedRooms(); + for (const auto &roomid : joined_rooms) { + if (roomid == event->content.replacement_room) { + manager_->rooms()->setCurrentRoom( + QString::fromStdString(event->content.replacement_room)); + return; + } + } + + ChatPage::instance()->joinRoomVia( + event->content.replacement_room, + {mtx::identifiers::parse(event->sender).hostname()}, + true); +} + QString TimelineModel::formatMemberEvent(const QString &id) { diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 2352be1f..01d80797 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -287,6 +287,7 @@ public: Q_INVOKABLE QString formatTypingUsers(const std::vector &users, const QColor &bg); Q_INVOKABLE bool showAcceptKnockButton(const QString &id); Q_INVOKABLE void acceptKnock(const QString &id); + Q_INVOKABLE void joinReplacementRoom(const QString &id); Q_INVOKABLE QString formatMemberEvent(const QString &id); Q_INVOKABLE QString formatJoinRuleEvent(const QString &id); Q_INVOKABLE QString formatHistoryVisibilityEvent(const QString &id); From 95d898e09d2b4056e3be2b98bfaaf13946d813b0 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Dec 2022 06:02:07 +0100 Subject: [PATCH 52/84] Add cache pruning for old image files --- src/MxcImageProvider.cpp | 59 ++++++++++++++++++++++++++++++++++++++++ src/MxcImageProvider.h | 4 +++ 2 files changed, 63 insertions(+) diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index cd7e3946..00177b73 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include "Logging.h" #include "MatrixClient.h" @@ -23,6 +25,39 @@ QHash infos; +MxcImageProvider::MxcImageProvider(QObject *parent) +#if QT_VERSION < 0x60000 + : QObject(parent) +#else + : QQuickAsyncImageProvider(parent) +#endif +{ + auto timer = new QTimer(this); + timer->setInterval(std::chrono::hours(30)); + connect(timer, &QTimer::timeout, this, [] { + QThreadPool::globalInstance()->start([] { + QDir dir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + + "/media_cache", + "", + QDir::SortFlags(QDir::Name | QDir::IgnoreCase), + QDir::Filter::Writable | QDir::Filter::NoDotAndDotDot | QDir::Filter::Files); + + for (const auto &fileInfo : dir.entryInfoList()) { + if (fileInfo.fileTime(QFile::FileTime::FileAccessTime) + .daysTo(QDateTime::currentDateTime()) > 30) { + if (QFile::remove(fileInfo.absoluteFilePath())) + nhlog::net()->debug("Deleted stale media '{}'", + fileInfo.absoluteFilePath().toStdString()); + else + nhlog::net()->warn("Failed to delete stale media '{}'", + fileInfo.absoluteFilePath().toStdString()); + } + } + }); + }); + timer->start(); +} + QQuickImageResponse * MxcImageProvider::requestImageResponse(const QString &id, const QSize &requestedSize) { @@ -97,6 +132,24 @@ clipRadius(QImage img, double radius) return out; } +static void +possiblyUpdateAccessTime(const QFileInfo &fileInfo) +{ + if (fileInfo.fileTime(QFile::FileTime::FileAccessTime).daysTo(QDateTime::currentDateTime()) > + 7) { + nhlog::net()->debug("Updating file time for '{}'", + fileInfo.absoluteFilePath().toStdString()); + + QFile f(fileInfo.absoluteFilePath()); + + if (!f.open(QIODevice::ReadWrite) || + !f.setFileTime(QDateTime::currentDateTime(), QFile::FileTime::FileAccessTime)) { + nhlog::net()->warn("Failed to update filetime for '{}'", + fileInfo.absoluteFilePath().toStdString()); + } + } +} + void MxcImageProvider::download(const QString &id, const QSize &requestedSize, @@ -141,6 +194,8 @@ MxcImageProvider::download(const QString &id, if (fileInfo.exists()) { QImage image = utils::readImageFromFile(fileInfo.absoluteFilePath()); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); + if (requestedSize.width() <= 0) { image = image.scaledToHeight(requestedSize.height(), Qt::SmoothTransformation); } else { @@ -185,6 +240,8 @@ MxcImageProvider::download(const QString &id, auto data = QByteArray(res.data(), (int)res.size()); QImage image = utils::readImage(data); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); + if (requestedSize.width() <= 0) { image = image.scaledToHeight(requestedSize.height(), Qt::SmoothTransformation); @@ -238,6 +295,7 @@ MxcImageProvider::download(const QString &id, QImage image = utils::readImage(data); image.setText(QStringLiteral("mxc url"), "mxc://" + id); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); if (radius != 0) { image = clipRadius(std::move(image), radius); } @@ -248,6 +306,7 @@ MxcImageProvider::download(const QString &id, } else { QImage image = utils::readImageFromFile(fileInfo.absoluteFilePath()); if (!image.isNull()) { + possiblyUpdateAccessTime(fileInfo); if (radius != 0) { image = clipRadius(std::move(image), radius); } diff --git a/src/MxcImageProvider.h b/src/MxcImageProvider.h index 9d5aaabc..d8325219 100644 --- a/src/MxcImageProvider.h +++ b/src/MxcImageProvider.h @@ -80,6 +80,10 @@ class MxcImageProvider public QQuickAsyncImageProvider { Q_OBJECT + +public: + MxcImageProvider(QObject *parent = nullptr); + public slots: QQuickImageResponse * requestImageResponse(const QString &id, const QSize &requestedSize) override; From 8356746ea476d46648f6ebfaf438e468d2b9a1bf Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Dec 2022 06:05:29 +0100 Subject: [PATCH 53/84] Fix image cache pruning interval --- src/MxcImageProvider.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index 00177b73..ade12dee 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -33,7 +33,7 @@ MxcImageProvider::MxcImageProvider(QObject *parent) #endif { auto timer = new QTimer(this); - timer->setInterval(std::chrono::hours(30)); + timer->setInterval(std::chrono::hours(1)); connect(timer, &QTimer::timeout, this, [] { QThreadPool::globalInstance()->start([] { QDir dir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + From 593d08fd2e8408a8ceb5304a0fde750daf69b22f Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Dec 2022 17:53:48 +0100 Subject: [PATCH 54/84] Revert "Disable keyboard selection for text by default" This reverts commit 0035c359ce97bf5975e19fd519f5852a40967bd7. --- resources/qml/MatrixText.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/qml/MatrixText.qml b/resources/qml/MatrixText.qml index 8af66e9b..69eb7cdb 100644 --- a/resources/qml/MatrixText.qml +++ b/resources/qml/MatrixText.qml @@ -15,10 +15,8 @@ TextEdit { textFormat: TextEdit.RichText readOnly: true focus: false - activeFocusOnPress: false wrapMode: Text.Wrap selectByMouse: !Settings.mobileMode - selectByKeyboard: false // this always has to be enabled, otherwise you can't click links anymore! //enabled: selectByMouse color: Nheko.colors.text From 8730586cfdc85f9704c3d52914539897f7312e70 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Dec 2022 18:09:34 +0100 Subject: [PATCH 55/84] Focus text field on key press (swallows first though...) --- resources/qml/TimelineView.qml | 2 ++ resources/qml/TopBar.qml | 3 +++ 2 files changed, 5 insertions(+) diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index dff23700..e168c883 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -28,6 +28,8 @@ Item { onRoomChanged: if (room != null) room.triggerSpecialEffects() + Keys.onPressed: if (!topBar.searchHasFocus) TimelineManager.focusMessageInput(); + Shortcut { sequence: StandardKey.Close onActivated: Rooms.resetCurrentRoom() diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index 5d65f3bc..760f20e6 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -25,6 +25,8 @@ Pane { property bool isDirect: room ? room.isDirect : false property string directChatOtherUserId: room ? room.directChatOtherUserId : "" + property bool searchHasFocus: searchField.focus && searchField.enabled + property string searchString: "" onRoomIdChanged: { @@ -447,6 +449,7 @@ Pane { MatrixTextField { id: searchField visible: searchButton.searchActive + enabled: visible Layout.row: 5 Layout.column: 2 From eefa6379f9d66134102998346b54e8a017d47407 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Dec 2022 23:47:08 +0100 Subject: [PATCH 56/84] I don't see why this would have detached, but make clazy happy --- src/MxcImageProvider.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index ade12dee..de800e93 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -42,7 +42,8 @@ MxcImageProvider::MxcImageProvider(QObject *parent) QDir::SortFlags(QDir::Name | QDir::IgnoreCase), QDir::Filter::Writable | QDir::Filter::NoDotAndDotDot | QDir::Filter::Files); - for (const auto &fileInfo : dir.entryInfoList()) { + auto files = dir.entryInfoList(); + for (const auto &fileInfo : qAsConst(files)) { if (fileInfo.fileTime(QFile::FileTime::FileAccessTime) .daysTo(QDateTime::currentDateTime()) > 30) { if (QFile::remove(fileInfo.absoluteFilePath())) From 6762032c53dd2efb06b199da31bd8ce9a27604fb Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 14 Dec 2022 19:04:08 +0100 Subject: [PATCH 57/84] Fix copy and paste again --- resources/qml/TimelineView.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index e168c883..14b74e68 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -28,7 +28,8 @@ Item { onRoomChanged: if (room != null) room.triggerSpecialEffects() - Keys.onPressed: if (!topBar.searchHasFocus) TimelineManager.focusMessageInput(); + // focus message input on key press, but not on Ctrl-C and such. + Keys.onPressed: if (event.text && !topBar.searchHasFocus) TimelineManager.focusMessageInput(); Shortcut { sequence: StandardKey.Close From 0d0c6187c0f41aaf5caebaaebb5f99945c05548b Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 16 Dec 2022 15:36:33 +0100 Subject: [PATCH 58/84] Bump mtxclient version --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d7219318..4a7e333f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -595,7 +595,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 13285437739413587a22272865d1e684e1959579 + GIT_TAG 36619300be0dd8127b71119b443a07fffe4f53a3 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index c82513e4..3b735b64 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: 13285437739413587a22272865d1e684e1959579 + - commit: 36619300be0dd8127b71119b443a07fffe4f53a3 #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git From 1a9f7860d41fe14ca38bc9a3c99931dceae95679 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 16 Dec 2022 17:24:52 +0100 Subject: [PATCH 59/84] Fix sending confetti --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- src/Cache.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a7e333f..3af559a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -595,7 +595,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 36619300be0dd8127b71119b443a07fffe4f53a3 + GIT_TAG 6252a4a902053fb227b61e65e76c1c29bc905a45 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 3b735b64..a150f97b 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: 36619300be0dd8127b71119b443a07fffe4f53a3 + - commit: 6252a4a902053fb227b61e65e76c1c29bc905a45 #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/src/Cache.cpp b/src/Cache.cpp index 5cb87a2f..809d5e17 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -3251,7 +3251,7 @@ Cache::pendingEvents(const std::string &room_id) std::optional Cache::firstPendingMessage(const std::string &room_id) { - auto txn = ro_txn(env_); + auto txn = lmdb::txn::begin(env_); auto pending = getPendingMessagesDb(txn, room_id); try { From e8e475956b3d2a57981ad41536a1ddc1b7361591 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 17 Dec 2022 01:11:19 +0100 Subject: [PATCH 60/84] Fix confetti in the sidebar --- src/Utils.cpp | 42 ++++++++++++------------------------------ src/Utils.h | 21 ++++++++++++++++++--- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/Utils.cpp b/src/Utils.cpp index c19871bc..b0d84339 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -45,16 +45,17 @@ createDescriptionInfo(const Event &event, const QString &localUser, const QStrin const auto username = displayName; const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); - auto body = utils::event_body(event).trimmed(); + auto body = mtx::accessors::body(event); if (mtx::accessors::relations(event).reply_to()) - body = QString::fromStdString(utils::stripReplyFromBody(body.toStdString())); + body = utils::stripReplyFromBody(body); - return DescInfo{QString::fromStdString(msg.event_id), - sender, - utils::messageDescription(username, body, sender == localUser), - utils::descriptiveTime(ts), - msg.origin_server_ts, - ts}; + return DescInfo{ + QString::fromStdString(msg.event_id), + sender, + utils::messageDescription(username, QString::fromStdString(body), sender == localUser), + utils::descriptiveTime(ts), + msg.origin_server_ts, + ts}; } std::string @@ -216,6 +217,7 @@ utils::getMessageDescription(const TimelineEvent &event, using Notice = mtx::events::RoomEvent; using Text = mtx::events::RoomEvent; using Video = mtx::events::RoomEvent; + using Confetti = mtx::events::RoomEvent; using CallInvite = mtx::events::RoomEvent; using CallAnswer = mtx::events::RoomEvent; using CallHangUp = mtx::events::RoomEvent; @@ -236,6 +238,8 @@ utils::getMessageDescription(const TimelineEvent &event, return createDescriptionInfo(event, localUser, displayName); } else if (std::holds_alternative @@ -585,12 +585,12 @@ You may optionally provide a reason for others to accept your knock: New community - + 新社区 New Room - + 新房间 @@ -620,7 +620,7 @@ You may optionally provide a reason for others to accept your knock: Public rooms can be joined by anyone; private rooms need explicit invites. - + 任何人都可以加入公共房间;私人房间需要明确的邀请。 @@ -1159,7 +1159,7 @@ You may optionally provide a reason for others to accept your knock: Join - + 加入 @@ -1213,13 +1213,14 @@ 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 nothing is provided, a default is used. - + 此设备的名称,将在验证您的设备时向其他人显示。如果未提供任何内容,则使用默认值。 The address that can be used to contact you homeserver's client API. Example: https://server.my:8787 - + 可联系到您的主服务器客户端 API 的地址。 +示例:https://server.my:8787 @@ -1277,7 +1278,7 @@ Example: https://server.my:8787 The selected server does not support a version of the Matrix protocol, that this client understands (v1.1 to v1.4). You can't sign in. - + 所选服务器不支持此客户端兼容的 Matrix 协议版本(v1.1 到 v1.4)。您无法登录。 @@ -1851,7 +1852,7 @@ Example: https://server.my:8787 Apply permission changes - + 应用权限更改 @@ -1861,7 +1862,7 @@ Example: https://server.my:8787 Apply permissions recursively - + 递归应用权限 @@ -1876,7 +1877,7 @@ Example: https://server.my:8787 No changes needed - + 无需更改 @@ -1894,7 +1895,7 @@ Example: https://server.my:8787 Failed to update powerlevel: %1 - 未能更新权限等级:%1 + 未能更新权限等级:%1 @@ -2124,7 +2125,7 @@ Example: https://server.my:8787 level - + 级别 From c0b79631347356ba58dd51a904eb086c22770f98 Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Mon, 26 Dec 2022 16:20:17 -0500 Subject: [PATCH 71/84] Update translations --- resources/langs/nheko_ca.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_cs.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_de.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_el.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_en.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_eo.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_es.ts | 578 ++++++++++++++++++++++++---- resources/langs/nheko_et.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_fi.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_fr.ts | 634 ++++++++++++++++++++++++++----- resources/langs/nheko_hu.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_id.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_ie.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_it.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_ja.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_ml.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_nl.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_pl.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_pt_BR.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_pt_PT.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_ro.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_ru.ts | 584 ++++++++++++++++++++++++---- resources/langs/nheko_si.ts | 568 +++++++++++++++++++++++---- resources/langs/nheko_sr_Latn.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_sv.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_vi.ts | 576 ++++++++++++++++++++++++---- resources/langs/nheko_zh_CN.ts | 568 +++++++++++++++++++++++---- 27 files changed, 13490 insertions(+), 2042 deletions(-) diff --git a/resources/langs/nheko_ca.ts b/resources/langs/nheko_ca.ts index aa521bbb..9fa2c3d7 100644 --- a/resources/langs/nheko_ca.ts +++ b/resources/langs/nheko_ca.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,34 @@ - + Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,12 +325,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4159,6 +4546,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4590,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4614,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4275,7 +4677,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4730,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4882,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4936,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +4997,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5057,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts index b8255ea7..3c6bf616 100644 --- a/resources/langs/nheko_cs.ts +++ b/resources/langs/nheko_cs.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -209,7 +209,7 @@ CallManager - + Entire screen @@ -223,22 +223,34 @@ - + Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -264,12 +276,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -314,12 +326,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -334,7 +346,7 @@ - + Failed to restore OLM account. Please login again. @@ -346,13 +358,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1354,7 +1665,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1419,27 +1730,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,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. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3572,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3607,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3641,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4191,8 @@ Reason: %4 UserSettings - - + + Default @@ -3828,7 +4200,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3862,6 +4234,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4314,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4128,7 +4515,7 @@ Reason: %4 - + Default @@ -4170,6 +4557,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4209,9 +4601,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4223,23 +4625,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4651,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4286,7 +4688,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4339,7 +4741,7 @@ This setting will take effect upon restart. - + Select a file @@ -4491,7 +4893,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4545,7 +4947,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4606,16 +5008,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4654,6 +5068,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index f75fcfe9..6f86d345 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -89,12 +89,12 @@ Adresse entfernen - + #new-alias:server.tld #neue-addresse:server.domain - + Add Hinzufügen @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 und %n anderer Teilnehmer @@ -208,7 +208,7 @@ CallManager - + Entire screen Ganzer Bildschirm @@ -222,22 +222,34 @@ - + Invited user: %1 Eingeladener Benutzer: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Das Datenbankformat auf der Festplatte ist neuer als die von dieser Nhekoversion unterstützte Version. Bitte update Nheko oder lösche die Datenbank. - + Failed to open database, logging out! Öffnen der Datenbank fehlgeschlagen, du wirst ausgeloggt! - + Knock on room Raumbeitritt anfragen (anklopfen) @@ -263,12 +275,12 @@ - + Confirm invite Einladung bestätigen - + Do you really want to invite %1 (%2)? Nutzer %1 (%2) wirklich einladen? @@ -313,12 +325,12 @@ Verbannung aufgehoben: %1 - + Do you really want to start a private chat with %1? Möchtest du wirklich eine private Konversation mit %1 beginnen? - + Cache migration failed! Migration des Caches fehlgeschlagen! @@ -333,7 +345,7 @@ Inkompatible Version des Caches - + Failed to restore OLM account. Please login again. Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein. @@ -345,13 +357,13 @@ Gespeicherte Nachrichten konnten nicht wiederhergestellt werden. Bitte melde Dich erneut an. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Fehler beim Setup der Verschlüsselungsschlüssel. Servermeldung: %1 %2. Bitte versuche es später erneut. - + Please try to login again: %1 Bitte melde dich erneut an: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: Keine Netzwerkverbindung + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Zeige 1:1 Konversationen an. - + Favourites Favoriten @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Geheimnisse entschlüsseln @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Konnte die versteckten Events nicht ändern: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Alle Dateien (*) - + Upload of '%1' failed Das Hochladen von '%1' ist fehlgeschlagen @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Raum verlassen @@ -1246,7 +1557,7 @@ Example: https://server.my: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 @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 hat eine Nachricht gelöscht @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. %1 hat den Anruf angenommen. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 hat den Anruf beendet. + %1 is negotiating the call... %1 wartet auf Verbindung... - + Allow them in Reinlassen @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Anrufen - + + Already on a call + + + + Send a file Versende Datei @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Schreibe eine Nachricht… - + Stickers Sticker @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Bearbeiten @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Optionen - + Reason for removal Grund für die Löschung @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 hat eine verschlüsselte Nachricht gesendet @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 hat mit einer verschlüsselten Nachricht geantwortet - + %1 replied to a message %1 hat auf eine Nachricht geantwortet @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Konnte Berechtigungen nicht aktualisieren: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Andere Events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call Anruf auflegen + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Senden + + + + Write a message... + Schreibe eine Nachricht… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Gestern, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTRIEREN - + Autodiscovery failed. Received malformed response. Automatische Erkennung fehlgeschlagen. Antwort war fehlerhaft. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored keine Version gespeichert @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Raum verlassen @@ -2752,7 +3114,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer mehr anzeigen - + Failed to enable encryption: %1 Aktivierung der Verschlüsselung fehlgeschlagen: %1 @@ -2886,7 +3248,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer SecretStorage - + Failed to connect to secret storage Verbindung zum kryptografischen Speicher fehlgeschlagen @@ -2984,7 +3346,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn SingleImagePackModel - + Failed to update image pack: %1 Konnte die Bilderpackung nicht aktualisieren: %1 @@ -3097,19 +3459,19 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn TimelineModel - + Message redaction failed: %1 Nachricht zurückziehen fehlgeschlagen: %1 - + Failed to encrypt event, sending aborted! Event konnte nicht verschlüsselt werden, senden wurde abgebrochen! - + Save image Bild speichern @@ -3129,7 +3491,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn 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.) @@ -3398,7 +3760,7 @@ Reason: %4 Grund: %4 - + %2 revoked the invite to %1. %2 hat die Einladung an %1 zurückgezogen. @@ -3458,17 +3820,17 @@ Grund: %4 %1 hat das Anklopfen zurückgezogen. - + You joined this room. Du bist dem Raum beigetreten. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 hat %2 eingeladen. @@ -3502,7 +3864,7 @@ Grund: %4 TimelineRow - + Edited Bearbeitet @@ -3515,12 +3877,12 @@ Grund: %4 TimelineView - + No room open Kein Raum geöffnet - + No preview available Keine Vorschau verfügbar @@ -3566,22 +3928,22 @@ Grund: %4 TopBar - + Back to room list Zurück zur Raumliste - + No room selected Kein Raum ausgewählt - + In %1 - + Show room members. Zeige Raummitglieder an. @@ -3601,12 +3963,17 @@ Grund: %4 Dieser Raum enthält unverifizierte Geräte! - + Show or hide pinned messages Angehefte Nachrichten anzeigen oder verstecken - + + Search this room + + + + Room options Raumoptionen @@ -3635,6 +4002,11 @@ Grund: %4 Unpin Anheften aufheben + + + Enter search query + + TrayIcon @@ -3677,7 +4049,7 @@ Grund: %4 UploadBox - + Upload %n file(s) Datei hochladen @@ -3812,8 +4184,8 @@ Grund: %4 UserSettings - - + + Default Standard @@ -3821,7 +4193,7 @@ Grund: %4 UserSettingsModel - + Theme Erscheinungsbild @@ -3855,6 +4227,11 @@ Grund: %4 Send messages as Markdown Sende Nachrichten als Markdown formatiert + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3930,8 +4307,18 @@ Grund: %4 Decrypt messages in sidebar Entschlüssele Nachrichten in der Raumliste + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Blickschutz @@ -4121,7 +4508,7 @@ Grund: %4 Mache Rauminformationen über D-Bus verfügbar - + Default Standard @@ -4166,6 +4553,11 @@ When disabled, all messages are sent as a plain text. Nutze Markdown als Format für Nachrichten. Wenn deaktiviert werden alle Nachrichten als unformatierter Text gesendet. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4207,9 +4599,19 @@ AUS - Quadratisch, AN - Kreisförmig. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4221,24 +4623,24 @@ AUS - Quadratisch, AN - Kreisförmig. Der Schlüssel um deine eigenen Geräte zu verifizieren. Wenn dieser im Cache ist, dann werden alle deine Geräte als verifiziert für andere Nutzer erscheinen, wenn du diese verifiziert hast. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Hebe das Fenster hervor, wenn eine Nachricht empfangen wurde. Normalerweise animiert das den Taskbaricon oder färbt das Fenster orange ein. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4248,7 +4650,7 @@ Normalerweise animiert das den Taskbaricon oder färbt das Fenster orange ein. - + 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. @@ -4290,7 +4692,7 @@ Only affects messages in encrypted chats. Betrifft nur Nachrichten in verschlüsselten Chats. - + When the window loses focus, the timeline will be blurred. Die Zeitliste wird unscharf, wenn das Fenster den Fokus verliert. @@ -4345,7 +4747,7 @@ This setting will take effect upon restart. Diese Einstellung benötigt einen Neustart von Nheko. - + Select a file Datei auswählen @@ -4497,7 +4899,7 @@ Diese Einstellung benötigt einen Neustart von Nheko. descriptiveTime - + Yesterday Gestern @@ -4551,7 +4953,7 @@ Diese Einstellung benötigt einen Neustart von Nheko. message-description sent: - + You sent an audio clip Du hast eine Audiodatei gesendet @@ -4612,16 +5014,28 @@ Diese Einstellung benötigt einen Neustart von Nheko. + You: %1 Du: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Du hast eine verschlüsselte Nachricht gesendet @@ -4660,6 +5074,16 @@ Diese Einstellung benötigt einen Neustart von Nheko. %1 ended a call %1 hat einen Anruf beendet + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index a6c65c4f..bda4af75 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,34 @@ - + Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,12 +325,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Όλα τα αρχεία (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Βγές @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. + %1 is negotiating the call... - + Allow them in @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Γράψε ένα μήνυμα... - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + Γράψε ένα μήνυμα... + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 ΕΓΓΡΑΦΗ - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Βγές @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image Αποθήκευση Εικόνας @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme Φόντο @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4159,6 +4546,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4590,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4614,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4275,7 +4677,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4730,7 @@ This setting will take effect upon restart. - + Select a file Διάλεξε ένα αρχείο @@ -4480,7 +4882,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4936,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +4997,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5057,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index fe97cd35..b919c960 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -89,12 +89,12 @@ Remove this alias - + #new-alias:server.tld #new-alias:server.tld - + Add Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 and %n other @@ -208,7 +208,7 @@ CallManager - + Entire screen Entire screen @@ -222,22 +222,34 @@ - + Invited user: %1 Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! Failed to open database, logging out! - + Knock on room Knock on room @@ -263,12 +275,12 @@ - + Confirm invite Confirm invite - + Do you really want to invite %1 (%2)? Do you really want to invite %1 (%2)? @@ -313,12 +325,12 @@ Unbanned user: %1 - + Do you really want to start a private chat with %1? Do you really want to start a private chat with %1? - + Cache migration failed! Cache migration failed! @@ -333,7 +345,7 @@ Incompatible cache version - + Failed to restore OLM account. Please login again. Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ Failed to restore saved data. Please login again. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 Please try to login again: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock:No network connection + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock:Show direct chats. - + Favourites Favourites @@ -649,7 +960,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Decrypt secrets @@ -893,7 +1204,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Failed to set hidden events: %1 @@ -1108,7 +1419,7 @@ You may optionally provide a reason for others to accept your knock:All Files (*) - + Upload of '%1' failed Upload of '%1' failed @@ -1168,7 +1479,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Leave room @@ -1251,7 +1562,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 @@ -1357,7 +1668,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message %1 removed a message @@ -1422,27 +1733,48 @@ Example: https://server.my:8787 %1 placed a call. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... %1 is negotiating the call... - + Allow them in Allow them in - + %1 answered the call. %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. %1 changed the parent communities for this room. - + %1 ended the call. %1 ended the call. @@ -1460,7 +1792,12 @@ Example: https://server.my:8787 Place a call - + + Already on a call + + + + Send a file Send a file @@ -1470,7 +1807,7 @@ Example: https://server.my:8787 Write a message… - + Stickers Stickers @@ -1493,7 +1830,7 @@ Example: https://server.my:8787 MessageView - + Edit Edit @@ -1523,7 +1860,7 @@ Example: https://server.my:8787 Options - + Reason for removal Reason for removal @@ -1699,8 +2036,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 sent an encrypted message @@ -1716,7 +2053,7 @@ Example: https://server.my:8787 %1 replied with an encrypted message - + %1 replied to a message %1 replied to a message @@ -1899,7 +2236,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Failed to update powerlevel: %1 @@ -1915,7 +2252,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Other events @@ -2084,6 +2421,11 @@ Example: https://server.my:8787 Hang up a call Hang up a call + + + Reject a call + + Change the room emotes @@ -2101,7 +2443,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. @@ -2143,6 +2485,21 @@ Example: https://server.my:8787 type type + + + Respond + + + + + Send + Send + + + + Write a message... + Write a message… + ReadReceipts @@ -2155,7 +2512,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Yesterday, %1 @@ -2229,7 +2586,7 @@ Example: https://server.my:8787 REGISTER - + Autodiscovery failed. Received malformed response. Autodiscovery failed. Received malformed response. @@ -2323,7 +2680,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored no version stored @@ -2347,6 +2704,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Leave room @@ -2757,7 +3119,7 @@ Please take note that it can't be disabled afterwards. show more - + Failed to enable encryption: %1 Failed to enable encryption: %1 @@ -2891,7 +3253,7 @@ Please take note that it can't be disabled afterwards. SecretStorage - + Failed to connect to secret storage Failed to connect to secret storage @@ -2989,7 +3351,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 Failed to update image pack: %1 @@ -3102,19 +3464,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Message redaction failed: %1 - + Failed to encrypt event, sending aborted! Failed to encrypt event, sending aborted! - + Save image Save image @@ -3134,7 +3496,7 @@ If you choose verify, you need to have the other device available. If you choose 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.) @@ -3403,7 +3765,7 @@ Reason: %4 Reason: %4 - + %2 revoked the invite to %1. %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 %1 redacted their knock. - + You joined this room. You joined this room. - + %1 made this room require an invitation to join. %1 made this room require an invitation to join. - + %1 invited %2. %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited Edited @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open No room open - + No preview available No preview available @@ -3571,22 +3933,22 @@ Reason: %4 TopBar - + Back to room list Back to room list - + No room selected No room selected - + In %1 In %1 - + Show room members. Show room members. @@ -3606,12 +3968,17 @@ Reason: %4 This room contains unverified devices! - + Show or hide pinned messages Show or hide pinned messages - + + Search this room + + + + Room options Room options @@ -3640,6 +4007,11 @@ Reason: %4 Unpin Unpin + + + Enter search query + + TrayIcon @@ -3682,7 +4054,7 @@ Reason: %4 UploadBox - + Upload %n file(s) Upload file @@ -3817,8 +4189,8 @@ Reason: %4 UserSettings - - + + Default Default @@ -3826,7 +4198,7 @@ Reason: %4 UserSettingsModel - + Theme Theme @@ -3860,6 +4232,11 @@ Reason: %4 Send messages as Markdown Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3935,8 +4312,18 @@ Reason: %4 Decrypt messages in sidebar Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privacy Screen @@ -4126,7 +4513,7 @@ Reason: %4 Expose room information via D-Bus - + Default Default @@ -4171,6 +4558,11 @@ When disabled, all messages are sent as a plain text. Allow using markdown in messages. When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4212,9 +4604,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4226,24 +4628,24 @@ OFF - square, ON - circle. The key to verify your own devices. If it is cached, verifying one of your devices will mark it verified for all your other devices and for users that have verified you. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar Communities sidebar - + Show message counts for communities and tags Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4253,7 +4655,7 @@ This usually causes the application icon in the task bar to animate in some fash Show a column containing communities and tags next to the room list. - + 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. @@ -4297,7 +4699,7 @@ Only affects messages in encrypted chats. Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. When the window loses focus, the timeline will @@ -4353,7 +4755,7 @@ This setting will take effect upon restart. This setting will take effect upon restart. - + Select a file Select a file @@ -4505,7 +4907,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Yesterday @@ -4559,7 +4961,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip You sent an audio clip @@ -4620,16 +5022,28 @@ This setting will take effect upon restart. + You: %1 You: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message You sent an encrypted message @@ -4668,6 +5082,16 @@ This setting will take effect upon restart. %1 ended a call %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts index 0d448988..30e35719 100644 --- a/resources/langs/nheko_eo.ts +++ b/resources/langs/nheko_eo.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Aldoni @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen Tuta ekrano @@ -222,22 +222,34 @@ - + Invited user: %1 Invitita uzanto: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. La kaŝmemoro sur via disko pli novas, ol tio, kion povas subteni ĉi tiu versio de Nheko. Bonvolu ĝisdatigi Nhekon aŭ vakigi vian kaŝmemoron. - + Failed to open database, logging out! Malsukcesis malfermi datumbazon; adiaŭas! - + Knock on room @@ -264,12 +276,12 @@ - + Confirm invite Konfirmu inviton - + Do you really want to invite %1 (%2)? Ĉu vi certe volas inviti uzanton %1 (%2)? @@ -314,12 +326,12 @@ Malforbaris uzanton: %1 - + Do you really want to start a private chat with %1? Ĉu vi certe volas komenci privatan babilon kun %1? - + Cache migration failed! Malsukcesis migrado de kaŝmemoro! @@ -334,7 +346,7 @@ Neakorda versio de kaŝmemoro - + Failed to restore OLM account. Please login again. Malsukcesis rehavi konton je OLM. Bonvolu resaluti. @@ -346,13 +358,13 @@ Malsukcesis rehavi konservitajn datumojn. Bonvolu resaluti. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Malsukcesis agordi ĉifrajn ŝlosilojn. Respondo de servilo: %1 %2. Bonvolu reprovi poste. - + Please try to login again: %1 Bonvolu provi resaluti: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: Neniu retkonekto + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: Montri individuajn ĉambrojn. - + Favourites Elstaraj @@ -649,7 +960,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Malĉifri sekretojn @@ -893,7 +1204,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Malsukcesis agordi kaŝitajn okazojn: %1 @@ -1108,7 +1419,7 @@ You may optionally provide a reason for others to accept your knock: Ĉiuj dosieroj (*) - + Upload of '%1' failed @@ -1168,7 +1479,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Eliri el ĉambro @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Vi enigis nevalidan identigilon de Matrikso ekz. @tacuo:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 forigis mesaĝon @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 respondis la vokon. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 finis la vokon. + %1 is negotiating the call... - + Allow them in Enlasi ĝin @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Voki - + + Already on a call + + + + Send a file Sendi dosieron @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Skribu mesaĝon… - + Stickers Glumarkoj @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Redakti @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Elektebloj - + Reason for removal Kialo de forigo @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 sendis ĉifritan mesaĝon @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 %1 respondis per ĉifrita mesaĝo - + %1 replied to a message %1 respondis al mesaĝo @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,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. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Sendi + + + + Write a message... + Skribu mesaĝon… + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Hieraŭ, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 REGISTRIĜI - + Autodiscovery failed. Received malformed response. Malsukcesis memaga trovado. Ricevis misformitan respondon. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored neniu versio konservita @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Eliri el ĉambro @@ -2753,7 +3115,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Malsukcesis ŝalti ĉifradon: %1 @@ -2887,7 +3249,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Malsukcesis konektiĝi al sekreta deponejo @@ -2985,7 +3347,7 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos SingleImagePackModel - + Failed to update image pack: %1 Malsukcesis ĝisdatigi bildopakon: %1 @@ -3099,19 +3461,19 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos TimelineModel - + Message redaction failed: %1 Malsukcesis redaktado de mesaĝo: %1 - + Failed to encrypt event, sending aborted! Malsukcesis ĉifri okazon; sendado nuliĝis! - + Save image Konservi bildon @@ -3131,7 +3493,7 @@ Se vi elektos kontrolon, vi devos havi alian aparaton disponeblan. Se vi elektos Konservi dosieron - + %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.) @@ -3400,7 +3762,7 @@ Reason: %4 Kialo: %4 - + %2 revoked the invite to %1. @@ -3461,17 +3823,17 @@ Kialo: %4 %1 forigis sian frapon. - + You joined this room. Vi aliĝis ĉi tiun ĉambron. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3505,7 +3867,7 @@ Kialo: %4 TimelineRow - + Edited Redaktita @@ -3518,12 +3880,12 @@ Kialo: %4 TimelineView - + No room open Neniu ĉambro estas malfermita - + No preview available Neniu antaŭrigardo disponeblas @@ -3569,22 +3931,22 @@ Kialo: %4 TopBar - + Back to room list Reen al listo de ĉambroj - + No room selected Neniu ĉambro estas elektita - + In %1 - + Show room members. @@ -3604,12 +3966,17 @@ Kialo: %4 Ĉi tiu ĉambro enhavas nekontrolitajn aparatojn! - + Show or hide pinned messages - + + Search this room + + + + Room options Elektebloj de ĉambro @@ -3638,6 +4005,11 @@ Kialo: %4 Unpin + + + Enter search query + + TrayIcon @@ -3680,7 +4052,7 @@ Kialo: %4 UploadBox - + Upload %n file(s) @@ -3815,8 +4187,8 @@ Kialo: %4 UserSettings - - + + Default Implicita @@ -3824,7 +4196,7 @@ Kialo: %4 UserSettingsModel - + Theme Haŭto @@ -3858,6 +4230,11 @@ Kialo: %4 Send messages as Markdown Sendi mesaĝojn Markdaŭne + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3933,8 +4310,18 @@ Kialo: %4 Decrypt messages in sidebar Malĉifri mesaĝojn en flanka breto + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privateca ŝirmilo @@ -4124,7 +4511,7 @@ Kialo: %4 - + Default Implicita @@ -4170,6 +4557,11 @@ When disabled, all messages are sent as a plain text. Permesas uzon de Markdaŭno en mesaĝoj. Kun ĉi tio malŝaltita, ĉiuj mesaĝoj sendiĝas en plata teksto. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4211,9 +4603,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4225,24 +4627,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Atentigas je ricevo de mesaĝo. Ĉi tio kutime movbildigas la simbolbildon sur la pleto iumaniere. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4252,7 +4654,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4290,7 +4692,7 @@ Only affects messages in encrypted chats. Influas nur sur mesaĝoj en ĉifritaj babiloj. - + When the window loses focus, the timeline will be blurred. Kiam la fenestro ne estos fokusata, la historio @@ -4344,7 +4746,7 @@ This setting will take effect upon restart. - + Select a file Elektu dosieron @@ -4497,7 +4899,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Hieraŭ @@ -4551,7 +4953,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Vi sendis sonmesaĝon @@ -4612,16 +5014,28 @@ This setting will take effect upon restart. + You: %1 Vi: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Vi sendis ĉifritan mesaĝon @@ -4660,6 +5074,16 @@ This setting will take effect upon restart. %1 ended a call %1 finis vokon + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_es.ts b/resources/langs/nheko_es.ts index de839198..404d4108 100644 --- a/resources/langs/nheko_es.ts +++ b/resources/langs/nheko_es.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Añadir @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 y %n otro @@ -208,7 +208,7 @@ CallManager - + Entire screen Pantalla completa @@ -222,22 +222,34 @@ - + Invited user: %1 Se invitó al usuario: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. La cache en su disco es más reciente de lo que esta versión de Nheko soporta. Por favor actualiza Nheko o limpia la cache. - + Failed to open database, logging out! Error al abrir la base de datos, cerrando sesión! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite Confirmar invitación - + Do you really want to invite %1 (%2)? ¿Seguro que quieres invitar a %1 (%2)? @@ -313,12 +325,12 @@ Usuario desbaneado: %1 - + Do you really want to start a private chat with %1? ¿Seguro que quieres comenzar un chat privado con %1? - + Cache migration failed! Migración de cache fallida! @@ -333,7 +345,7 @@ Versión de cache incompatible - + Failed to restore OLM account. Please login again. No se ha podido restaurar la cuenta OLM. Por favor inicia sesión de nuevo. @@ -345,13 +357,13 @@ No se ha podido restaurar los datos guardados. Por favor inicia sesión de nuevo. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. No se han podido configurar las claves de encriptación. Respuesta del servidor: %1 %2. Por favor intentalo de nuevo más tarde. - + Please try to login again: %1 Por favor intenta iniciar sesión de nuevo: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Mostrar chats directos. - + Favourites Favoritos @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Desencriptar secretos @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Todos los archivos (*) - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Salir de la sala @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Has insertado un ID de Matrix invalido ej @joe:matrix.org @@ -1354,7 +1665,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1419,27 +1730,48 @@ Example: https://server.my:8787 %1 hizo una llamada. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in Permitir que entren - + %1 answered the call. %1 atendió la llamada. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 terminó la llamada. @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Llamar - + + Already on a call + + + + Send a file Enviar archivo @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Escribe un mensaje... - + Stickers Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Editar @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Opciones - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 envió un mensaje encriptado @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 %1 respondió con un mensaje encriptado - + %1 replied to a message %1 respondió a un mensaje @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,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. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Enviar + + + + Write a message... + Escribe un mensaje... + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Ayer, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 REGISTRARSE - + Autodiscovery failed. Received malformed response. El autodescubrimiento falló. Se ha recibido una respuesta malformada. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored ninguna version guardada @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Salir de la sala @@ -2754,7 +3116,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Error al activar la encriptación: %1 @@ -2888,7 +3250,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Hubo en error al conectarse al almacenamiento secreto @@ -2986,7 +3348,7 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q SingleImagePackModel - + Failed to update image pack: %1 Falló en la actualización del pack de imágenes: %1 @@ -3099,19 +3461,19 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q TimelineModel - + Message redaction failed: %1 Falló en la eliminación del mensaje: %1 - + Failed to encrypt event, sending aborted! Falló al encriptar el evento, abortando el envío! - + Save image Guardar imagen @@ -3131,7 +3493,7 @@ Si escoges verificar, necesitas tener otro dispositivo disponible. Si escoges &q Guardar archivo - + %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.) @@ -3400,7 +3762,7 @@ Reason: %4 Razón: %4 - + %1 invited %2. @@ -3430,12 +3792,12 @@ Razón: %4 %1 cambió su avatar y su nombre a %2. - + %1 made this room require an invitation to join. - + %1 has changed their display name to %2. %1 cambió su nombre a %2. @@ -3480,12 +3842,12 @@ Razón: %4 %1 canceló después de tocar la puerta. - + You joined this room. Te has unido a esta sala. - + %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 se fue después de ya haberse ido! @@ -3504,7 +3866,7 @@ Razón: %4 TimelineRow - + Edited Editado @@ -3517,12 +3879,12 @@ Razón: %4 TimelineView - + No room open Ninguna sala abierta - + No preview available Vista previa no disponible @@ -3568,22 +3930,22 @@ Razón: %4 TopBar - + Back to room list Volver a la lista de salas - + No room selected Ninguna sala seleccionada - + In %1 - + Show room members. @@ -3603,12 +3965,17 @@ Razón: %4 Esta sala contiene dispositivos sin verificar! - + Show or hide pinned messages Mostrar u ocultar mensajes fijados - + + Search this room + + + + Room options Ajustes de la sala @@ -3637,6 +4004,11 @@ Razón: %4 Unpin Desfijar + + + Enter search query + + TrayIcon @@ -3679,7 +4051,7 @@ Razón: %4 UploadBox - + Upload %n file(s) @@ -3814,8 +4186,8 @@ Razón: %4 UserSettings - - + + Default Por defecto @@ -3823,7 +4195,7 @@ Razón: %4 UserSettingsModel - + Theme Tema @@ -3857,6 +4229,11 @@ Razón: %4 Send messages as Markdown Enviar mensajes en Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3932,8 +4309,18 @@ Razón: %4 Decrypt messages in sidebar Desencriptar mensajes en la barra lateral + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privacidad de pantalla @@ -4123,7 +4510,7 @@ Razón: %4 - + Default Por defecto @@ -4168,6 +4555,11 @@ When disabled, all messages are sent as a plain text. Permitir usar markdown en los mensajes. Cuando está deshabilitado, todos los mensajes son enviados en texto sin formato. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4208,9 +4600,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4222,24 +4624,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Mostrar una alerta cuando un mensaje sea recibido. Esto usualmente causa que el icono de la aplicación en la barra de tareas sea animado de alguna forma. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4651,7 @@ Esto usualmente causa que el icono de la aplicación en la barra de tareas sea a - + 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. @@ -4287,7 +4689,7 @@ Only affects messages in encrypted chats. Sólo afecta a los mensajes en chats encriptados. - + When the window loses focus, the timeline will be blurred. Cuando la ventana no este enfocada, la línea de tiempo se volverá borrosa. @@ -4340,7 +4742,7 @@ This setting will take effect upon restart. - + Select a file Seleccionar un archivo @@ -4492,7 +4894,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ayer @@ -4546,7 +4948,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Enviaste un clip de audio @@ -4607,16 +5009,28 @@ This setting will take effect upon restart. + You: %1 Tú: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Enviaste un mensaje encriptado @@ -4655,6 +5069,16 @@ This setting will take effect upon restart. %1 ended a call %1 terminó la llamada + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 26c1263a..0b78496c 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -89,12 +89,12 @@ Kustuta see alias - + #new-alias:server.tld #uus-alias:server.tippdomeen - + Add Lisa @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 ja veel %n teine kasutaja @@ -208,7 +208,7 @@ CallManager - + Entire screen Terve ekraan @@ -222,22 +222,34 @@ - + Invited user: %1 Kutsutud kasutaja: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Sinu andmekandjale salvestatud puhvri versioon on uuem, kui käesolev Nheko versioon kasutada oskab. Palun tee Nheko uuendus või kustuta puhverdatud andmed. - + Failed to open database, logging out! Andmebaasi avamine ei õnnestunud. Login välja! - + Knock on room Koputa jututoa uksele @@ -263,12 +275,12 @@ - + Confirm invite Kinnita kutse - + Do you really want to invite %1 (%2)? Kas sa tõesti soovid saata kutset kasutajale %1 (%2)? @@ -313,12 +325,12 @@ Suhtluskeeld eemaldatud: %1 - + Do you really want to start a private chat with %1? Kas sa kindlasti soovid alustada otsevestlust kasutajaga %1? - + Cache migration failed! Puhvri versiooniuuendus ebaõnnestus! @@ -333,7 +345,7 @@ Mitteühilduv puhvri versioon - + Failed to restore OLM account. Please login again. OLM konto taastamine ei õnnestunud. Palun logi uuesti sisse. @@ -345,13 +357,13 @@ Salvestatud andmete taastamine ei õnnestunud. Palun logi uuesti sisse. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Krüptovõtmete kasutusele võtmine ei õnnestunud. Koduserveri vastus päringule: %1 %2. Palun proovi hiljem uuesti. - + Please try to login again: %1 Palun proovi uuesti sisse logida: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: Võrguühendus puudub + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Näita otsevestluseid. - + Favourites Lemmikud @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Dekrüpti andmed @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Peidetud sündmuste loomine ei õnnestunud: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Kõik failid (*) - + Upload of '%1' failed „%1“ üleslaadimine ei õnnestunud @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Lahku jututoast @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Sisestatud Matrix'i kasutajatunnus on vigane - peaks olema @kasutaja:server.tld @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message %1 eemaldas sõnumi @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 %1 helistas. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... %1 alustab kõnet... - + Allow them in Luba neid - + %1 answered the call. %1 vastas kõnele. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 lõpetas kõne. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Helista - + + Already on a call + + + + Send a file Saada fail @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Kirjuta sõnum… - + Stickers Kleepsud @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Muuda @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Valikud - + Reason for removal Eemaldamise põhjus @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 saatis krüptitud sõnumi @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 vastas krüptitud sõnumiga - + %1 replied to a message %1 vastas sõnumile @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Õiguste muutmine ei õnnestunud: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Muud sündmused @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call Kõne lõpetamine + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Saada + + + + Write a message... + Kirjuta sõnum… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Eile, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTREERI - + Autodiscovery failed. Received malformed response. Koduserveri automaatne tuvastamine ei õnnestunud: päringuvastus oli vigane. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored salvestatud versiooni ei leidu @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Lahku jututoast @@ -2752,7 +3114,7 @@ Palun arvesta, et krüptimist ei saa hiljem enam välja lülitada. näita rohkem - + Failed to enable encryption: %1 Krüptimise kasutuselevõtmine ei õnnestunud: %1 @@ -2886,7 +3248,7 @@ Palun arvesta, et krüptimist ei saa hiljem enam välja lülitada. SecretStorage - + Failed to connect to secret storage Ühenduse loomine võtmehoidlaga ei õnnestunud @@ -2984,7 +3346,7 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui SingleImagePackModel - + Failed to update image pack: %1 Pildipaki uuendamine ei õnnestunud: %1 @@ -3097,19 +3459,19 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui TimelineModel - + Message redaction failed: %1 Sõnumi ümbersõnastamine ebaõnnestus: %1 - + Failed to encrypt event, sending aborted! Sündmuse krüptimine ei õnnestunud, katkestame saatmise! - + Save image Salvesta pilt @@ -3129,7 +3491,7 @@ Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui 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.) @@ -3398,7 +3760,7 @@ Reason: %4 Põhjus: %4 - + %2 revoked the invite to %1. %2 tühistas kutse kasutajale %1. @@ -3458,17 +3820,17 @@ Põhjus: %4 %1 muutis oma koputust jututoa uksele. - + You joined this room. Sa liitusid jututoaga. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 saatis kutse kasutajale %2. @@ -3502,7 +3864,7 @@ Põhjus: %4 TimelineRow - + Edited Muudetud @@ -3515,12 +3877,12 @@ Põhjus: %4 TimelineView - + No room open Ühtegi jututuba pole avatud - + No preview available Eelvaade pole saadaval @@ -3566,22 +3928,22 @@ Põhjus: %4 TopBar - + Back to room list Tagasi jututubade loendisse - + No room selected Jututuba on valimata - + In %1 - + Show room members. Näita jututoas osalejaid. @@ -3601,12 +3963,17 @@ Põhjus: %4 Selles jututoas leidub verifitseerimata seadmeid! - + Show or hide pinned messages Näita klammerdatud sõnumeid või peida nad - + + Search this room + + + + Room options Jututoa valikud @@ -3635,6 +4002,11 @@ Põhjus: %4 Unpin Võta lahti + + + Enter search query + + TrayIcon @@ -3677,7 +4049,7 @@ Põhjus: %4 UploadBox - + Upload %n file(s) Laadi fail üles @@ -3812,8 +4184,8 @@ Põhjus: %4 UserSettings - - + + Default Vaikimisi @@ -3821,7 +4193,7 @@ Põhjus: %4 UserSettingsModel - + Theme Teema @@ -3855,6 +4227,11 @@ Põhjus: %4 Send messages as Markdown Saada sõnumid kasutades Markdown vormindust + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3930,8 +4307,18 @@ Põhjus: %4 Decrypt messages in sidebar Dekrüpti sõnumid külgribal + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privaatsust tagav sirm @@ -4121,7 +4508,7 @@ Põhjus: %4 Jaga jututoa teavet D-Bus'i vahendusel - + Default Vaikimisi @@ -4166,6 +4553,11 @@ When disabled, all messages are sent as a plain text. Luba Markdown-vormingu kasutamine sõnumite koostamisel. Kui Markdown ei ole kasutusel, siis saadetakse kõik sõnumid vormindamata tekstina. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4207,9 +4599,19 @@ Väljalülitatuna - ruut, sisselülitatuna - ümmargune. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4221,24 +4623,24 @@ Väljalülitatuna - ruut, sisselülitatuna - ümmargune. Selle võtmega verifitseerid oma seadmeid. Kui ta on puhverdatud, siis sinu seadme verifitseerimine märgib selle seadme usaldusväärseks nii sinu muude seadmete kui selliste kasutajate jaoks, kes on sinu verifitseerinud. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Sõnumi saabumisel näita teavitust. See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti animatsiooniga sulle märku. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4248,7 +4650,7 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim - + 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. @@ -4290,7 +4692,7 @@ Only affects messages in encrypted chats. Kehtib vaid läbivalt krüptitud vestluste puhul. - + When the window loses focus, the timeline will be blurred. Kui aken kaotab fookuse, @@ -4346,7 +4748,7 @@ This setting will take effect upon restart. Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. - + Select a file Vali fail @@ -4498,7 +4900,7 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. descriptiveTime - + Yesterday Eile @@ -4552,7 +4954,7 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. message-description sent: - + You sent an audio clip Sa saatsid helifaili @@ -4613,16 +5015,28 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist. + You: %1 Sina: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Sa saatsid krüptitud sõnumi @@ -4661,6 +5075,16 @@ Selle funktsionaalsuse jõustumine eeldab rakenduse uuesti käivitamist.%1 ended a call %1 lõpetas kõne + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index d720082f..df590bce 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -89,12 +89,12 @@ Poista tämä alias - + #new-alias:server.tld #uusi-alias:palvelin.tld - + Add Lisää @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 ja %n muu @@ -208,7 +208,7 @@ CallManager - + Entire screen Koko näyttö @@ -222,22 +222,34 @@ - + Invited user: %1 Kutsuttiin käyttäjä: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Levylläsi oleva välimuisti on uudempaa kuin mitä tämä Nhekon versio tukee. Päivitä Nheko tai poista välimuistisi. - + Failed to open database, logging out! Tietokannan avaaminen epäonnistui, kirjaudutaan ulos! - + Knock on room Koputa huoneeseen @@ -263,12 +275,12 @@ - + Confirm invite Vahvista kutsu - + Do you really want to invite %1 (%2)? Haluatko varmasti kutsua %1 (%2)? @@ -313,12 +325,12 @@ Purettiin porttikielto käyttäjältä %1 - + Do you really want to start a private chat with %1? Haluatko luoda yksityisen keskustelun käyttäjän %1 kanssa? - + Cache migration failed! Välimuistin siirto epäonnistui! @@ -333,7 +345,7 @@ Yhteensopimaton välimuistin versio - + Failed to restore OLM account. Please login again. OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen. @@ -345,13 +357,13 @@ Tallennettujen tietojen palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Salausavainten lähetys epäonnistui. Palvelimen vastaus: %1 %2. Ole hyvä ja yritä uudelleen myöhemmin. - + Please try to login again: %1 Ole hyvä ja yritä kirjautua sisään uudelleen: %1 @@ -413,6 +425,305 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: Ei verkkoyhteyttä + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: Näytä suorat keskustelut. - + Favourites Suosikit @@ -649,7 +960,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: CrossSigningSecrets - + Decrypt secrets Salaisuuksien salauksen purku @@ -893,7 +1204,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: HiddenEvents - + Failed to set hidden events: %1 Piilotettujen tapahtumien asettaminen epäonnistui: %1 @@ -1108,7 +1419,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: Kaikki Tiedostot (*) - + Upload of '%1' failed Tiedoston "%1" lähetys epäonnistui @@ -1168,7 +1479,7 @@ Voit antaa valinnaisen syyn muiden hyväksyäkseen koputuksesi: LeaveRoomDialog - + Leave room Poistu huoneesta @@ -1250,7 +1561,7 @@ Esimerkki: https://palvelime.ni:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Väärä Matrix-tunnus. Esim. @joe:matrix.org @@ -1356,7 +1667,17 @@ Esimerkki: https://palvelime.ni:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 poisti viestin @@ -1430,18 +1751,29 @@ Esimerkki: https://palvelime.ni:8787 %1 answered the call. %1 vastasi puheluun. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 päätti puhelun. + %1 is negotiating the call... %1 neuvottelee puhelua... - + Allow them in Päästä hänet sisään @@ -1459,7 +1791,12 @@ Esimerkki: https://palvelime.ni:8787 Soita puhelu - + + Already on a call + + + + Send a file Lähetä tiedosto @@ -1469,7 +1806,7 @@ Esimerkki: https://palvelime.ni:8787 Kirjoita viesti… - + Stickers Tarrat @@ -1492,7 +1829,7 @@ Esimerkki: https://palvelime.ni:8787 MessageView - + Edit Muokkaa @@ -1522,7 +1859,7 @@ Esimerkki: https://palvelime.ni:8787 Asetukset - + Reason for removal Syy poistamiselle @@ -1698,8 +2035,8 @@ Esimerkki: https://palvelime.ni:8787 NotificationsManager - - + + %1 sent an encrypted message %1 lähetti salatun viestin @@ -1715,7 +2052,7 @@ Esimerkki: https://palvelime.ni:8787 %1 vastasi salatulla viestillä - + %1 replied to a message %1 vastasi viestiin @@ -1898,7 +2235,7 @@ Esimerkki: https://palvelime.ni:8787 PowerLevels - + Failed to update powerlevel: %1 Oikeustason päivitys epäonnistui: %1 @@ -1914,7 +2251,7 @@ Esimerkki: https://palvelime.ni:8787 PowerlevelsTypeListModel - + Other events Muut tapahtumat @@ -2083,6 +2420,11 @@ Esimerkki: https://palvelime.ni:8787 Hang up a call Lopeta puheluita + + + Reject a call + + Change the room emotes @@ -2100,7 +2442,7 @@ Esimerkki: https://palvelime.ni:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. Luo ainutkertainen profiili, jonka kautta voit kirjautua sisään samanaikaisesti usealla käyttäjällä, sekä käynnistää Nhekosta monta ilmentymää. @@ -2142,6 +2484,21 @@ Esimerkki: https://palvelime.ni:8787 type tyyppi + + + Respond + + + + + Send + Lähetä + + + + Write a message... + Kirjoita viesti… + ReadReceipts @@ -2154,7 +2511,7 @@ Esimerkki: https://palvelime.ni:8787 ReadReceiptsModel - + Yesterday, %1 Eilen, %1 @@ -2228,7 +2585,7 @@ Esimerkki: https://palvelime.ni:8787 REKISTERÖIDY - + Autodiscovery failed. Received malformed response. Palvelimen tietojen hakeminen epäonnistui: virheellinen vastaus. @@ -2322,7 +2679,7 @@ Esimerkki: https://palvelime.ni:8787 RoomInfo - + no version stored ei tallennettua versiota @@ -2346,6 +2703,11 @@ Esimerkki: https://palvelime.ni:8787 + Room settings + + + + Leave room Poistu huoneesta @@ -2756,7 +3118,7 @@ Huomaathan ettei sitä voida poistaa käytöstä myöhemmin. näytä enemmän - + Failed to enable encryption: %1 Salauksen aktivointi epäonnistui: %1 @@ -2890,7 +3252,7 @@ Huomaathan ettei sitä voida poistaa käytöstä myöhemmin. SecretStorage - + Failed to connect to secret storage Salattuun tallennustilaan ei saatu yhteyttä @@ -2988,7 +3350,7 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s SingleImagePackModel - + Failed to update image pack: %1 Kuvapakkausta %1 ei onnistuttu päivittämään @@ -3101,19 +3463,19 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s TimelineModel - + Message redaction failed: %1 Viestin muokkaus epäonnistui: %1 - + Failed to encrypt event, sending aborted! Tapahtuman salaus epäonnistui, lähetys keskeytetään! - + Save image Tallenna kuva @@ -3133,7 +3495,7 @@ Jos valitset vahvistamisen, toisen laitteen on oltava saatavilla. Jos valitset s Tallenna tiedosto - + %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.) @@ -3402,7 +3764,7 @@ Reason: %4 Syy: %4 - + %2 revoked the invite to %1. %2 perui käyttäjän %1 kutsun. @@ -3462,17 +3824,17 @@ Syy: %4 %1 perui koputuksensa. - + You joined this room. Liityit tähän huoneeseen. - + %1 made this room require an invitation to join. %1 teki tämän huoneen vaatimaan kutsun liittymiseen. - + %1 invited %2. %1 kutsui käyttäjän %2. @@ -3506,7 +3868,7 @@ Syy: %4 TimelineRow - + Edited Muokattu @@ -3519,12 +3881,12 @@ Syy: %4 TimelineView - + No room open Yhtäkään huonetta ei ole avattu - + No preview available Esikatselu ei saatavilla @@ -3570,22 +3932,22 @@ Syy: %4 TopBar - + Back to room list Takaisin huonelistaan - + No room selected Ei valittua huonetta - + In %1 Osa yhteisöä %1 - + Show room members. Näytä huoneen jäsenet. @@ -3605,12 +3967,17 @@ Syy: %4 Tämä huone sisältää varmentamattomia laitteita! - + Show or hide pinned messages Näytä tai piilota kiinnitetyt viestit - + + Search this room + + + + Room options Huoneen asetukset @@ -3639,6 +4006,11 @@ Syy: %4 Unpin Poista kiinnitys + + + Enter search query + + TrayIcon @@ -3681,7 +4053,7 @@ Syy: %4 UploadBox - + Upload %n file(s) Lähetä tiedosto @@ -3816,8 +4188,8 @@ Syy: %4 UserSettings - - + + Default Oletus @@ -3825,7 +4197,7 @@ Syy: %4 UserSettingsModel - + Theme Teema @@ -3859,6 +4231,11 @@ Syy: %4 Send messages as Markdown Lähetä viestit Markdownina + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3934,8 +4311,18 @@ Syy: %4 Decrypt messages in sidebar Pura viestien salaus sivupalkissa + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Yksityisyysnäkymä @@ -4125,7 +4512,7 @@ Syy: %4 Paljasta huonetiedot D-Bus:in kautta - + Default Oletus @@ -4170,6 +4557,11 @@ When disabled, all messages are sent as a plain text. Salli Markdownin käyttö viesteissä. Kun poissa päältä, kaikki viestit lähetetään tavallisena tekstinä. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4211,9 +4603,19 @@ POIS - neliö, PÄÄLLÄ - ympyrä. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. Valitse, missä yhteisön tai tagin ilmoitusten kokonaismäärä näytetään. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4225,24 +4627,24 @@ POIS - neliö, PÄÄLLÄ - ympyrä. Omien laitteidesi vahvistamiseen käytettävä avain. Jos avain on välimuistissa, jonkun laitteesi vahvistus tekee siitä vahvistetun kaikille muille laitteillesi, ja käyttäjille, jotka ovat vahvistaneet sinut. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Näytä hälytys kun viesti on vastaanotettu. Tämä yleensä saa sovelluksen kuvakkeen liikkumaan jollain tapaa tehtäväpalkissa. - + Communities sidebar Yhteisösivupalkki - + Show message counts for communities and tags Näytä yhteisöjen ja tagien viestimäärät - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized Aseta viestien maksimileveys aikajanalla (pikseleinä). Voi auttaa luettavuudessa, kun Nheko on suurennettuna @@ -4252,7 +4654,7 @@ Tämä yleensä saa sovelluksen kuvakkeen liikkumaan jollain tapaa tehtäväpalk Näytä yhteisöt ja tagit sisältävä sarake huonelistan vieressä. - + 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. @@ -4296,7 +4698,7 @@ Only affects messages in encrypted chats. Vaikuttaa vain salattujen keskustelujen viesteihin. - + When the window loses focus, the timeline will be blurred. Kun ikkuna ei ole kohdistettuna, tämä aikajana @@ -4352,7 +4754,7 @@ This setting will take effect upon restart. Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. - + Select a file Valitse tiedosto @@ -4504,7 +4906,7 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. descriptiveTime - + Yesterday Eilen @@ -4558,7 +4960,7 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. message-description sent: - + You sent an audio clip Lähetit äänileikkeen @@ -4619,16 +5021,28 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. + You: %1 Sinä: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Lähetit salatun viestin @@ -4667,6 +5081,16 @@ Tämä asetus tulee voimaan uudelleenkäynnistyksen jälkeen. %1 ended a call %1 lopetti puhelun + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index 05b3140b..840e417b 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Ajouter @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 et %n autre @@ -208,7 +208,7 @@ CallManager - + Entire screen Tout l'écran @@ -222,22 +222,34 @@ - + Invited user: %1 Utilisateur %1 invité(e) - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Le cache sur votre disque a été créé avec une version de Nheko plus récente que la vôtre. Veuillez mettre Nheko à jour ou vider votre cache. - + Failed to open database, logging out! - Impossible d'ouvrir la base de données, déconnexion ! + Impossible d'ouvrir la base de données, déconnexion ! - + Knock on room Frapper à la porte @@ -263,14 +275,14 @@ - + Confirm invite Confirmer l'invitation - + Do you really want to invite %1 (%2)? - Voulez-vous vraiment inviter %1 (%2) ? + Voulez-vous vraiment inviter %1 (%2) ? @@ -300,7 +312,7 @@ Do you really want to unban %1 (%2)? - Voulez-vous vraiment annuler le bannissement de %1 (%2) ? + Voulez-vous vraiment annuler le bannissement de %1 (%2) ? @@ -313,14 +325,14 @@ %1 n'est plus banni(e) - + Do you really want to start a private chat with %1? Voulez-vous vraiment commencer une discussion privée avec %1 ? - + Cache migration failed! - Échec de la migration du cache ! + Échec de la migration du cache ! @@ -333,7 +345,7 @@ Version du cache incompatible - + Failed to restore OLM account. Please login again. Échec de la restauration du compte OLM. Veuillez vous reconnecter. @@ -345,13 +357,13 @@ Échec de la restauration des données sauvegardées. Veuillez vous reconnecter. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Échec de la configuration des clés de chiffrement. Réponse du serveur : %1 %2. Veuillez réessayer plus tard. - + Please try to login again: %1 Veuillez re-tenter vous reconnecter : %1 @@ -369,7 +381,7 @@ You may optionally provide a reason for others to accept your knock: Failed to remove invite: %1 - Impossible de supprimer l'invitation : %1 + Impossible de supprimer l'invitation : %1 @@ -394,7 +406,7 @@ You may optionally provide a reason for others to accept your knock: Failed to kick %1 from %2: %3 - Échec de l'expulsion de %1 de %2  : %3 + Échec de l'expulsion de %1 de %2  : %3 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: Pas de connexion réseau + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Montrer les messages privés. - + Favourites Favoris @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Déchiffrer les secrets @@ -683,17 +994,17 @@ You may optionally provide a reason for others to accept your knock: Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification! - Veuillez vérifier les chiffres suivants. Vous devriez voir les mêmes chiffres des deux côtés. Si ceux-ci diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! + Veuillez vérifier les chiffres suivants. Vous devriez voir les mêmes chiffres des deux côtés. Si ceux-ci diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! They do not match! - Ils sont différents ! + Ils sont différents ! They match! - Ils sont identiques ! + Ils sont identiques ! @@ -754,7 +1065,7 @@ You may optionally provide a reason for others to accept your knock: Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification! - Veuillez vérifier les émoji suivants. Vous devriez voir les mêmes émoji des deux côtés. S'ils diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! + Veuillez vérifier les émoji suivants. Vous devriez voir les mêmes émoji des deux côtés. S'ils diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification ! @@ -764,12 +1075,12 @@ You may optionally provide a reason for others to accept your knock: They do not match! - Ils sont différents ! + Ils sont différents ! They match! - Ils sont identiques ! + Ils sont identiques ! @@ -820,7 +1131,7 @@ You may optionally provide a reason for others to accept your knock: This message is not encrypted! - Ce message n'est pas chiffré ! + Ce message n'est pas chiffré ! @@ -853,7 +1164,7 @@ You may optionally provide a reason for others to accept your knock: Key mismatch detected! - Clés non correspondantes détectées ! + Clés non correspondantes détectées ! @@ -868,7 +1179,7 @@ You may optionally provide a reason for others to accept your knock: Verification messages received out of order! - Messages de vérification reçus dans le désordre ! + Messages de vérification reçus dans le désordre ! @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Impossible de modifier les évènements cachés : %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Tous les types de fichiers (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Quitter le salon @@ -1246,10 +1557,10 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org - Vous avez entré un identifiant Matrix invalide exemple correct : @moi:monserveur.example.com) + Vous avez entré un identifiant Matrix invalide exemple correct : @moi:monserveur.example.com) @@ -1332,12 +1643,12 @@ Example: https://server.my:8787 A call is in progress. Log out? - Un appel est en cours. Se déconnecter ? + Un appel est en cours. Se déconnecter ? Are you sure you want to log out? - Êtes-vous certain de vouloir vous déconnecter ? + Êtes-vous certain de vouloir vous déconnecter ? @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 a effacé un message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. %1 a répondu à l'appel. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 a terminé l'appel. + %1 is negotiating the call... %1 est en train de négocier l'appel... - + Allow them in Les laisser entrer @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Appeler - + + Already on a call + + + + Send a file Envoyer un fichier @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Écrivez un message… - + Stickers Autocollants @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Modifier @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Options - + Reason for removal Raison de la suppression @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 a envoyé un message chiffré @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 a répondu avec un message chiffré - + %1 replied to a message %1 a répondu à un message @@ -1726,7 +2063,7 @@ Example: https://server.my:8787 Place a call to %1? - Appeler %1 ? + Appeler %1 ? @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Envoyer + + + + Write a message... + Écrivez un message… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Hier, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 S'ENREGISTRER - + Autodiscovery failed. Received malformed response. Échec de la découverte automatique. Réponse mal formée reçue. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored pas de version enregistrée @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Quitter le salon @@ -2752,7 +3114,7 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite.montrer plus - + Failed to enable encryption: %1 Échec de l'activation du chiffrement : %1 @@ -2834,17 +3196,17 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. Share desktop with %1? - Partager le bureau avec %1  ? + Partager le bureau avec %1  ? Window: - Fenêtre : + Fenêtre : Frame rate: - Fréquence d'images : + Fréquence d'images : @@ -2886,14 +3248,14 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. SecretStorage - + Failed to connect to secret storage Échec de la connexion au stockage des secrets Nheko could not connect to the secure storage to save encryption secrets to. This can have multiple reasons. Check if your D-Bus service is running and you have configured a service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If you are having trouble, feel free to open an issue here: https://github.com/Nheko-Reborn/nheko/issues - Nheko n'a pas pu se connecter au stockage sécurisé afin d'y sauvegarder les clés de chiffrement. Cela peut avoir différentes causes. Vérifiez si votre service D-Bus est lancé, et si vous avez configuré un service tel que KWallet ; Gnome Keyring ; KeePassXC ou l'équivalent pour votre système. Si vous n'arrivez pas à résoudre le problème, n'hésitez pas à nous en faire part ici : https ://github.com/Nheko-Reborn/nheko/issues + Nheko n'a pas pu se connecter au stockage sécurisé afin d'y sauvegarder les clés de chiffrement. Cela peut avoir différentes causes. Vérifiez si votre service D-Bus est lancé, et si vous avez configuré un service tel que KWallet ; Gnome Keyring ; KeePassXC ou l'équivalent pour votre système. Si vous n'arrivez pas à résoudre le problème, n'hésitez pas à nous en faire part ici : https ://github.com/Nheko-Reborn/nheko/issues @@ -2901,7 +3263,7 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. This is your recovery key. You will need it to restore access to your encrypted messages and verification keys. Keep this safe. Don't share it with anyone and don't lose it! Do not pass go! Do not collect $200! - Ceci est votre clé de récupération. Vous en aurez besoin afin de restaurer l'accès à vos messages chiffrés et à vos clés de vérification. Gardez cette clé en sûreté. Ne la partagez pas avec qui que ce soit et ne la perdez pas ! Ne passez pas par la case départ et ne recevez pas 20 000 francs ! + Ceci est votre clé de récupération. Vous en aurez besoin afin de restaurer l'accès à vos messages chiffrés et à vos clés de vérification. Gardez cette clé en sûreté. Ne la partagez pas avec qui que ce soit et ne la perdez pas ! Ne passez pas par la case départ et ne recevez pas 20 000 francs ! @@ -2922,8 +3284,8 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. Hello and welcome to Matrix! It seems like you are new. Before you can securely encrypt your messages, we need to setup a few small things. You can either press accept immediately or adjust a few basic options. We also try to explain a few of the basics. You can skip those parts, but they might prove to be helpful! - Bonjour et bienvenue sur le réseau Matrix ! -Il semblerait que ce soit votre première fois ici. Avant de pouvoir chiffrer vos messages de manière sécurisée, nous devons configurer quelques détails. Vous pouvez soit accepter immédiatement, soit ajuster quelques options basiques. Nous essayons également d'expliquer le fonctionnement de certains mécanismes. Vous pouvez sauter ces étapes, mais celles-ci pourraient se montrer utiles par la suite ! + Bonjour et bienvenue sur le réseau Matrix ! +Il semblerait que ce soit votre première fois ici. Avant de pouvoir chiffrer vos messages de manière sécurisée, nous devons configurer quelques détails. Vous pouvez soit accepter immédiatement, soit ajuster quelques options basiques. Nous essayons également d'expliquer le fonctionnement de certains mécanismes. Vous pouvez sauter ces étapes, mais celles-ci pourraient se montrer utiles par la suite ! @@ -2953,17 +3315,17 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Failed to create keys for cross-signing! - Échec de la création des clés pour l'auto-vérification (cross-signing) ! + Échec de la création des clés pour l'auto-vérification (cross-signing) ! Failed to create keys for online key backup! - Échec de la création de clés pour la sauvegarde en ligne ! + Échec de la création de clés pour la sauvegarde en ligne ! Failed to create keys for secure server side secret storage! - Échec de la création des clés pour le stockage sécurisé côté serveur ! + Échec de la création des clés pour le stockage sécurisé côté serveur ! @@ -2973,7 +3335,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Encryption setup failed: %1 - Échec de la configuration du chiffrement : %1 + Échec de la configuration du chiffrement : %1 @@ -2984,7 +3346,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si SingleImagePackModel - + Failed to update image pack: %1 Échec de la mise à jour du paquet d'images : %1 @@ -3086,7 +3448,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si Verification successful! Both sides verified their devices! - Vérification réussie ! Les deux côtés ont vérifié leur appareil ! + Vérification réussie ! Les deux côtés ont vérifié leur appareil ! @@ -3097,19 +3459,19 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si TimelineModel - + Message redaction failed: %1 Échec de la suppression du message : %1 - + Failed to encrypt event, sending aborted! - Échec du chiffrement de l'évènement, envoi abandonné ! + Échec du chiffrement de l'évènement, envoi abandonné ! - + Save image Enregistrer l'image @@ -3129,7 +3491,7 @@ Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si 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.) @@ -3398,7 +3760,7 @@ Reason: %4 Raison : %4 - + %2 revoked the invite to %1. %2 a révoqué l'invitation à %1. @@ -3458,17 +3820,17 @@ Raison : %4 %1 a arrêté de toquer. - + You joined this room. Vous avez rejoint ce salon. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 a invité %2. @@ -3486,7 +3848,7 @@ Raison : %4 %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 a quitté le salon après l'avoir déjà quitté ! + %1 a quitté le salon après l'avoir déjà quitté ! @@ -3502,7 +3864,7 @@ Raison : %4 TimelineRow - + Edited Modifié @@ -3515,12 +3877,12 @@ Raison : %4 TimelineView - + No room open Aucun salon ouvert - + No preview available Aucune prévisualisation disponible @@ -3566,22 +3928,22 @@ Raison : %4 TopBar - + Back to room list Revenir à la liste des salons - + No room selected Pas de salon sélectionné - + In %1 - + Show room members. @@ -3601,12 +3963,17 @@ Raison : %4 Ce salon contient des appareils non vérifiés ! - + Show or hide pinned messages Montrer ou cacher les messages épinglés - + + Search this room + + + + Room options Options du salon @@ -3635,6 +4002,11 @@ Raison : %4 Unpin Désépingler + + + Enter search query + + TrayIcon @@ -3677,7 +4049,7 @@ Raison : %4 UploadBox - + Upload %n file(s) Mettre en ligne un fichier @@ -3812,8 +4184,8 @@ Raison : %4 UserSettings - - + + Default Défaut @@ -3821,7 +4193,7 @@ Raison : %4 UserSettingsModel - + Theme Thème @@ -3855,6 +4227,11 @@ Raison : %4 Send messages as Markdown Composer les messages au format Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3930,8 +4307,18 @@ Raison : %4 Decrypt messages in sidebar Déchiffrer les messages dans la liste des salons + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Protection anti-indiscrétion @@ -4121,7 +4508,7 @@ Raison : %4 - + Default Défaut @@ -4165,6 +4552,11 @@ When disabled, all messages are sent as a plain text. Permet l'utilisation de Markdown dans les messages. Si désactivé, tous les messages sont envoyés comme texte brut. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4206,9 +4598,19 @@ OFF - carré, ON - circulaire. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4220,24 +4622,24 @@ OFF - carré, ON - circulaire. La clef pour vérifier vos propres appareils. Si elle est en cache, vérifier un de vos appareils le marquera comme vérifié pour tous vos autres appareils et pour les utilisateurs qui vous ont vérifié. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Alerte lorsqu'un message est reçu. Typiquement, l'icône de l'application est mise en évidence dans la barre des tâches. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4247,7 +4649,7 @@ Typiquement, l'icône de l'application est mise en évidence dans la b - + 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. @@ -4287,7 +4689,7 @@ Only affects messages in encrypted chats. Cela n'affecte que les messages des salons chiffrés. - + When the window loses focus, the timeline will be blurred. Lorsque la fenêtre devient inactive, la discussion devient floutée. @@ -4340,7 +4742,7 @@ This setting will take effect upon restart. - + Select a file Sélectionnez un fichier @@ -4492,7 +4894,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Hier @@ -4546,7 +4948,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Vous avez envoyé un message audio @@ -4607,16 +5009,28 @@ This setting will take effect upon restart. + You: %1 Vous : %1 - + + %1: %2 %1 : %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Vous avez envoyé un message chiffré @@ -4655,6 +5069,16 @@ This setting will take effect upon restart. %1 ended a call %1 a terminé un appel + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index eef785d0..3cd297f8 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -207,7 +207,7 @@ CallManager - + Entire screen Az egész képernyő @@ -221,22 +221,34 @@ - + Invited user: %1 A felhasználó meg lett hívva: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -262,12 +274,12 @@ - + Confirm invite Meghívás megerősítése - + Do you really want to invite %1 (%2)? Biztos, hogy meg akarod hívni a következő felhasználót: %1 (%2)? @@ -312,12 +324,12 @@ Kitiltás feloldva a felhasználónak: %1 - + Do you really want to start a private chat with %1? Biztosan privát csevegést akarsz indítani %1 felhasználóval? - + Cache migration failed! Gyorsítótár migráció nem sikerült! @@ -332,7 +344,7 @@ Inkompatibilis gyorsítótár-verzió - + Failed to restore OLM account. Please login again. Nem sikerült visszaállítani az OLM fiókot. Kérlek, jelentkezz be ismét! @@ -344,13 +356,13 @@ Nem sikerült visszaállítani a mentési adatot. Kérlek, jelentkezz be ismét! - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Nem sikerült beállítani a titkosítási kulcsokat. Válasz a szervertől: %1 %2. Kérlek, próbáld újra később! - + Please try to login again: %1 Kérlek, próbálj meg bejelentkezni újra: %1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Titkos tároló feloldása @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: Minden fájl (*) - + Upload of '%1' failed @@ -1165,7 +1476,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Szoba elhagyása @@ -1244,7 +1555,7 @@ Example: https://server.my: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 @@ -1350,7 +1661,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1415,27 +1726,48 @@ Example: https://server.my:8787 %1 hívást kezdeményezett. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. %1 fogadta a hívást. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 befejezte a hívást. @@ -1453,7 +1785,12 @@ Example: https://server.my:8787 Hívás kezdeményezése - + + Already on a call + + + + Send a file Fájl küldése @@ -1463,7 +1800,7 @@ Example: https://server.my:8787 Írj egy üzenetet… - + Stickers @@ -1486,7 +1823,7 @@ Example: https://server.my:8787 MessageView - + Edit Szerkesztés @@ -1516,7 +1853,7 @@ Example: https://server.my:8787 Műveletek - + Reason for removal @@ -1692,8 +2029,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 küldött egy titkosított üzenetet @@ -1709,7 +2046,7 @@ Example: https://server.my:8787 %1 egy titkosított üzenettel válaszolt - + %1 replied to a message %1 válaszolt egy üzenetre @@ -1892,7 +2229,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1908,7 +2245,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2077,6 +2414,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2094,7 +2436,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. @@ -2136,6 +2478,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Küldés + + + + Write a message... + Írj egy üzenetet… + ReadReceipts @@ -2148,7 +2505,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2222,7 +2579,7 @@ Example: https://server.my:8787 REGISZTRÁCIÓ - + Autodiscovery failed. Received malformed response. Az automatikus felderítés nem sikerült. Helytelen válasz érkezett. @@ -2316,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nincs tárolva verzió @@ -2340,6 +2697,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Szoba elhagyása @@ -2747,7 +3109,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Nem sikerült a titkosítás aktiválása: %1 @@ -2881,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2977,7 +3339,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3090,19 +3452,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Az üzenet visszavonása nem sikerült: %1 - + Failed to encrypt event, sending aborted! Nem sikerült titkosítani az eseményt, küldés megszakítva! - + Save image Kép mentése @@ -3122,7 +3484,7 @@ If you choose verify, you need to have the other device available. If you choose 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.) @@ -3385,7 +3747,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3445,17 +3807,17 @@ Reason: %4 %1 visszavonta a kopogását. - + You joined this room. Csatlakoztál ehhez a szobához. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3489,7 +3851,7 @@ Reason: %4 TimelineRow - + Edited Szerkesztve @@ -3502,12 +3864,12 @@ Reason: %4 TimelineView - + No room open Nincs nyitott szoba - + No preview available @@ -3552,22 +3914,22 @@ Reason: %4 TopBar - + Back to room list Vissza a szobák listájára - + No room selected Nincs kiválasztva szoba - + In %1 - + Show room members. @@ -3587,12 +3949,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Szoba beállításai @@ -3621,6 +3988,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3663,7 +4035,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3797,8 +4169,8 @@ Reason: %4 UserSettings - - + + Default Alapértelmezett @@ -3806,7 +4178,7 @@ Reason: %4 UserSettingsModel - + Theme Téma @@ -3840,6 +4212,11 @@ Reason: %4 Send messages as Markdown Üzenetek küldése Markdownként + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3915,8 +4292,18 @@ Reason: %4 Decrypt messages in sidebar Titkosított üzenetek mutatása az oldalsávban + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Idővonal automatikus kitakarása @@ -4106,7 +4493,7 @@ Reason: %4 - + Default Alapértelmezett @@ -4152,6 +4539,11 @@ 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. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4192,9 +4584,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4206,24 +4608,24 @@ OFF - square, ON - circle. - + 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. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4233,7 +4635,7 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő - + 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. @@ -4271,7 +4673,7 @@ Only affects messages in encrypted chats. Csak a titkosított csevegések üzeneteire vonatkozik. - + When the window loses focus, the timeline will be blurred. Amikor az ablak elveszíti a fókuszt, @@ -4325,7 +4727,7 @@ This setting will take effect upon restart. - + Select a file Fájl kiválasztása @@ -4477,7 +4879,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Tegnap @@ -4531,7 +4933,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Küldtél egy hangfájlt @@ -4592,16 +4994,28 @@ This setting will take effect upon restart. + You: %1 Te: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Küldtél egy titkosított üzenetet @@ -4640,6 +5054,16 @@ This setting will take effect upon restart. %1 ended a call %1 befejezett egy hívást + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_id.ts b/resources/langs/nheko_id.ts index bef83d1d..221de332 100644 --- a/resources/langs/nheko_id.ts +++ b/resources/langs/nheko_id.ts @@ -89,12 +89,12 @@ Hapus alias ini - + #new-alias:server.tld #alias-baru:server.tld - + Add Tambahkan @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 dan %n lainnya @@ -207,7 +207,7 @@ CallManager - + Entire screen Semua layar @@ -221,22 +221,34 @@ - + Invited user: %1 Pengguna yang diundang: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Tembolok pada diskmu lebih baru daripada versi yang didukung Nheko ini. Harap perbarui Nheko atau bersihkan tembolokmu. - + Failed to open database, logging out! Gagal untuk membuka basisdata, kamu telah dikeluarkan! - + Knock on room Ketuk pada ruangan @@ -262,12 +274,12 @@ - + Confirm invite Konfirmasi undangan - + Do you really want to invite %1 (%2)? Apakah kamu ingin mengundang %1 (%2)? @@ -312,12 +324,12 @@ Menghilangkan cekalan pengguna: %1 - + Do you really want to start a private chat with %1? Apakah kamu ingin memulai chat privat dengan %1? - + Cache migration failed! Migrasi tembolok gagal! @@ -332,7 +344,7 @@ Versi tembolok tidak kompatibel - + Failed to restore OLM account. Please login again. Gagal memulihkan akun OLM. Mohon masuk lagi. @@ -344,13 +356,13 @@ Gagal memulihkan data yang tersimpan. Mohon masuk lagi. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Gagal menyiapkan kunci enkripsi. Respons server: %1 %2. Silakan coba lagi nanti. - + Please try to login again: %1 Mohon mencoba masuk lagi: %1 @@ -412,6 +424,305 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:Tidak ada koneksi jaringan + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:Tampilkan pesan langsung. - + Favourites Favorit @@ -647,7 +958,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu: CrossSigningSecrets - + Decrypt secrets Dekripsi rahasia @@ -891,7 +1202,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu: HiddenEvents - + Failed to set hidden events: %1 Gagal menetapkan peristiwa tersembunyi: %1 @@ -1106,7 +1417,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu:Semua File (*) - + Upload of '%1' failed Pengunggahan '%1' gagal @@ -1166,7 +1477,7 @@ Kamu dapat memberikan alasan untuk orang lain untuk menerima ketukanmu: LeaveRoomDialog - + Leave room Tinggalkan ruangan @@ -1249,7 +1560,7 @@ Contoh: https://server.saya:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Kamu telah memasukkan ID Matrix yang tidak valid mis. @joe:matrix.org @@ -1355,7 +1666,7 @@ Contoh: https://server.saya:8787 MessageDelegate - + %1 removed a message %1 menghapus sebuah pesan @@ -1420,27 +1731,48 @@ Contoh: https://server.saya:8787 %1 melakukan panggilan. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... %1 sedang melakukan panggilan... - + Allow them in Izinkan mereka untuk masuk - + %1 answered the call. %1 menjawab panggilan. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. %1 mengubah komunitas induk untuk ruangan. - + %1 ended the call. %1 mengakhir panggilan. @@ -1458,7 +1790,12 @@ Contoh: https://server.saya:8787 Lakukan panggilan - + + Already on a call + + + + Send a file Kirim sebuah file @@ -1468,7 +1805,7 @@ Contoh: https://server.saya:8787 Ketik pesan… - + Stickers Stiker @@ -1491,7 +1828,7 @@ Contoh: https://server.saya:8787 MessageView - + Edit Edit @@ -1521,7 +1858,7 @@ Contoh: https://server.saya:8787 Opsi - + Reason for removal Alasan untuk menghapus @@ -1697,8 +2034,8 @@ Contoh: https://server.saya:8787 NotificationsManager - - + + %1 sent an encrypted message %1 mengirim pesan terenkripsi @@ -1714,7 +2051,7 @@ Contoh: https://server.saya:8787 %1 membalas dengan pesan terenkripsi - + %1 replied to a message %1 membalas pesan @@ -1897,7 +2234,7 @@ Contoh: https://server.saya:8787 PowerLevels - + Failed to update powerlevel: %1 Gagal memperbarui tingkat daya: %1 @@ -1913,7 +2250,7 @@ Contoh: https://server.saya:8787 PowerlevelsTypeListModel - + Other events Peristiwa lainnya @@ -2082,6 +2419,11 @@ Contoh: https://server.saya:8787 Hang up a call Mengakhiri sebuah panggilan + + + Reject a call + + Change the room emotes @@ -2099,7 +2441,7 @@ Contoh: https://server.saya:8787 QCoreApplication - + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. Buat sebuah profil unik yang memungkinkan kamu untuk masuk ke beberapa akun secara bersamaan dan mulai beberapa instansi Nheko. @@ -2141,6 +2483,21 @@ Contoh: https://server.saya:8787 type jenis + + + Respond + + + + + Send + Kirim + + + + Write a message... + Ketik pesan… + ReadReceipts @@ -2153,7 +2510,7 @@ Contoh: https://server.saya:8787 ReadReceiptsModel - + Yesterday, %1 Kemarin, %1 @@ -2227,7 +2584,7 @@ Contoh: https://server.saya:8787 DAFTAR - + Autodiscovery failed. Received malformed response. Penemuan otomatis gagal. Menerima respons cacat. @@ -2321,7 +2678,7 @@ Contoh: https://server.saya:8787 RoomInfo - + no version stored tidak ada versi yang disimpan @@ -2345,6 +2702,11 @@ Contoh: https://server.saya:8787 + Room settings + + + + Leave room Tinggalkan ruangan @@ -2753,7 +3115,7 @@ Dicatat bahwa ini tidak dapat dinonaktifkan setelah ini. tampilkan - + Failed to enable encryption: %1 Gagal mengaktifkan enkripsi: %1 @@ -2887,7 +3249,7 @@ Dicatat bahwa ini tidak dapat dinonaktifkan setelah ini. SecretStorage - + Failed to connect to secret storage Gagal menghubungkan ke penyimpanan rahasia @@ -2985,7 +3347,7 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia. SingleImagePackModel - + Failed to update image pack: %1 Gagal memperbarui paket gambar: %1 @@ -3098,19 +3460,19 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia. TimelineModel - + Message redaction failed: %1 Reaksi pesan gagal: %1 - + Failed to encrypt event, sending aborted! Gagal mendekripsikan peristiwa, pengiriman dihentikan! - + Save image Simpan gambar @@ -3130,7 +3492,7 @@ Jika kamu memilih verifikasi, kamu harus memiliki perangkat lain yang tersedia. Simpan 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.) @@ -3394,7 +3756,7 @@ Reason: %4 Alasan: %4 - + %2 revoked the invite to %1. %2 membatalkan undangan ke %1. @@ -3454,17 +3816,17 @@ Alasan: %4 %1 menolak ketukannya. - + You joined this room. Kamu bergabung ruangan ini. - + %1 made this room require an invitation to join. %1 membuat ruangan ini membutuhkan undangan untuk bergabung. - + %1 invited %2. %1 mengundang %2. @@ -3498,7 +3860,7 @@ Alasan: %4 TimelineRow - + Edited Diedit @@ -3511,12 +3873,12 @@ Alasan: %4 TimelineView - + No room open Tidak ada ruangan yang dibuka - + No preview available Tidak ada tampilan yang tersedia @@ -3561,22 +3923,22 @@ Alasan: %4 TopBar - + Back to room list Kembali ke daftar ruangan - + No room selected Tidak ada ruangan yang dipilih - + In %1 Dalam %1 - + Show room members. Tampilkan anggota ruangan. @@ -3596,12 +3958,17 @@ Alasan: %4 Ruangan ini berisi perangkat yang belum diverifikasi! - + Show or hide pinned messages Tampilkan atau sembunyikan pesan yang dipasangi pin - + + Search this room + + + + Room options Opsi ruangan @@ -3630,6 +3997,11 @@ Alasan: %4 Unpin Lepaskan pin + + + Enter search query + + TrayIcon @@ -3672,7 +4044,7 @@ Alasan: %4 UploadBox - + Upload %n file(s) Unggah %n file @@ -3806,8 +4178,8 @@ Alasan: %4 UserSettings - - + + Default Default @@ -3815,7 +4187,7 @@ Alasan: %4 UserSettingsModel - + Theme Tema @@ -3849,6 +4221,11 @@ Alasan: %4 Send messages as Markdown Kirim pesan sebagai Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3924,8 +4301,18 @@ Alasan: %4 Decrypt messages in sidebar Dekripsikan pesan di bilah samping + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Layar Privasi @@ -4115,7 +4502,7 @@ Alasan: %4 Ekspos informasi ruangan via D-Bus - + Default Default @@ -4160,6 +4547,11 @@ When disabled, all messages are sent as a plain text. Memperbolehkan menggunakan Markdown di pesan. Ketika dinonaktifkan, semua pesan akan dikirim sebagai teks biasa. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4201,9 +4593,19 @@ MATI - kotak, NYALA - bulat. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. Pilih di mana untuk menampilkan jumlah notifikasi di dalam sebuah komunitas atau tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4215,24 +4617,24 @@ MATI - kotak, NYALA - bulat. Kunci untuk memverifikasi perangkatmu. Jika disimpan, memverifikasi salah satu perangkatmu akan menandainya sebagai terverifikasi untuk perangkatmu yang lain dan untuk pengguna yang telah memverifikasimu. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Menampilkan pemberitahuan saat sebuah pesan diterima. Ini biasanya menyebabkan ikon aplikasi di bilah tugas untuk beranimasi. - + Communities sidebar Bilah samping komunitas - + Show message counts for communities and tags Tampilkan hitungan pesan untuk komunitas dan tag - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized Tetapkan lebar pesan di linimasa (dalam pixel). Ini dapat membantu keterbacaan di layar lebar ketika Nheko dimaksimalkan @@ -4242,7 +4644,7 @@ Ini biasanya menyebabkan ikon aplikasi di bilah tugas untuk beranimasi.Tampilkan sebuah kolom berisi komunitas dan tag di samping daftar ruangan. - + 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. @@ -4286,7 +4688,7 @@ Only affects messages in encrypted chats. Hanya mempengaruhi pesan di chat terenkripsi. - + When the window loses focus, the timeline will be blurred. Ketika jendela kehilangan fokus, linimasanya @@ -4342,7 +4744,7 @@ This setting will take effect upon restart. Pengaturan ini akan ditetapkan saat dimulai ulang. - + Select a file Pilih sebuah file @@ -4494,7 +4896,7 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. descriptiveTime - + Yesterday Kemarin @@ -4548,7 +4950,7 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. message-description sent: - + You sent an audio clip Kamu mengirim klip audio @@ -4609,16 +5011,28 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. + You: %1 Kamu: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Kamu mengirim sebuah pesan terenkripsi @@ -4657,6 +5071,16 @@ Pengaturan ini akan ditetapkan saat dimulai ulang. %1 ended a call %1 mengakhiri panggilan + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ie.ts b/resources/langs/nheko_ie.ts index bc1aceec..0781951e 100644 --- a/resources/langs/nheko_ie.ts +++ b/resources/langs/nheko_ie.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,34 @@ - + Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,12 +325,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4159,6 +4546,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4590,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4614,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4275,7 +4677,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4730,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4882,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4936,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +4997,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5057,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts index ad3c7793..0173bccd 100644 --- a/resources/langs/nheko_it.ts +++ b/resources/langs/nheko_it.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen Schermo completo @@ -222,22 +222,34 @@ - + Invited user: %1 Invitato utente: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite Conferma Invito - + Do you really want to invite %1 (%2)? Vuoi davvero inviare %1 (%2)? @@ -313,12 +325,12 @@ Rimosso il ban dall'utente: %1 - + Do you really want to start a private chat with %1? Sei sicuro di voler avviare una chat privata con %1? - + Cache migration failed! Migrazione della cache fallita! @@ -333,7 +345,7 @@ Versione della cache incompatibile - + Failed to restore OLM account. Please login again. Impossibile ripristinare l'account OLM. Per favore accedi nuovamente. @@ -345,13 +357,13 @@ Impossibile ripristinare i dati salvati. Per favore accedi nuovamente. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Impossibile configurare le chiavi crittografiche. Risposta del server: %1 %2. Per favore riprova in seguito. - + Please try to login again: %1 Per favore prova ad accedere nuovamente: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Decifra i segreti @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Tutti i File (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Lascia la stanza @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Hai inserito un ID Matrix non valido, es @joe:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. %1 ha risposto alla chiamata. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 ha terminato la chiamata. + %1 is negotiating the call... - + Allow them in @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Avvia una chiamata - + + Already on a call + + + + Send a file Invia un file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Scrivi un messaggio… - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Modifica @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Opzioni - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 ha inviato un messaggio criptato @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 ha risposto con un messaggio criptato - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Invia + + + + Write a message... + Scrivi un messaggio… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTRATI - + Autodiscovery failed. Received malformed response. Ricerca automatica fallita. Ricevuta risposta malformata. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nessuna versione memorizzata @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Lascia la stanza @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Impossibile abilitare la crittografia: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Oscuramento del messaggio fallito: %1 - + Failed to encrypt event, sending aborted! - + Save image Salva immagine @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose 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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 %1 ha oscurato la sua bussata. - + You joined this room. Sei entrato in questa stanza. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open Nessuna stanza aperta - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Opzioni della stanza @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme Tema @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown Invia messaggi come Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar Decripta messaggi nella barra laterale + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4159,6 +4546,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4590,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4614,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4275,7 +4677,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4730,7 @@ This setting will take effect upon restart. - + Select a file Seleziona un file @@ -4480,7 +4882,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ieri @@ -4534,7 +4936,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Hai inviato una clip audio @@ -4595,16 +4997,28 @@ This setting will take effect upon restart. + You: %1 Tu: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Hai inviato un messaggio criptato @@ -4643,6 +5057,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index d91bb0f5..087e636f 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -207,7 +207,7 @@ CallManager - + Entire screen @@ -221,22 +221,34 @@ - + Invited user: %1 招待されたユーザー: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -262,12 +274,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -312,12 +324,12 @@ 永久追放を解除されたユーザー: %1 - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -332,7 +344,7 @@ - + Failed to restore OLM account. Please login again. OLMアカウントを復元できませんでした。もう一度ログインして下さい。 @@ -344,13 +356,13 @@ セーブデータを復元できませんでした。もう一度ログインして下さい。 - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. 暗号化鍵を設定できませんでした。サーバーの応答: %1 %2. 後でやり直して下さい。 - + Please try to login again: %1 もう一度ログインしてみて下さい: %1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: 全てのファイル (*) - + Upload of '%1' failed @@ -1165,7 +1476,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room 部屋を出る @@ -1244,7 +1555,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1350,7 +1661,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1424,18 +1745,29 @@ Example: https://server.my:8787 %1 answered the call. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. + %1 is negotiating the call... - + Allow them in @@ -1453,7 +1785,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file ファイルを送信 @@ -1463,7 +1800,7 @@ Example: https://server.my:8787 メッセージを書く... - + Stickers @@ -1486,7 +1823,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1516,7 +1853,7 @@ Example: https://server.my:8787 オプション - + Reason for removal @@ -1692,8 +2029,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1が暗号化されたメッセージを送信しました @@ -1709,7 +2046,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1892,7 +2229,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1908,7 +2245,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2077,6 +2414,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2094,7 +2436,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. @@ -2136,6 +2478,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + メッセージを書く... + ReadReceipts @@ -2148,7 +2505,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2222,7 +2579,7 @@ Example: https://server.my:8787 登録 - + Autodiscovery failed. Received malformed response. 自動検出できませんでした。不正な形式の応答を受信しました。 @@ -2316,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored バージョンが保存されていません @@ -2340,6 +2697,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room 部屋を出る @@ -2747,7 +3109,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 暗号化を有効にできませんでした: %1 @@ -2881,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2977,7 +3339,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3090,19 +3452,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 メッセージを編集できませんでした: %1 - + Failed to encrypt event, sending aborted! - + Save image 画像を保存 @@ -3122,7 +3484,7 @@ If you choose verify, you need to have the other device available. If you choose ファイルを保存 - + %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.) @@ -3385,7 +3747,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3445,17 +3807,17 @@ Reason: %4 %1がノックを編集しました。 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3489,7 +3851,7 @@ Reason: %4 TimelineRow - + Edited @@ -3502,12 +3864,12 @@ Reason: %4 TimelineView - + No room open 部屋が開いていません - + No preview available @@ -3552,22 +3914,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3587,12 +3949,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options 部屋のオプション @@ -3621,6 +3988,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3663,7 +4035,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3797,8 +4169,8 @@ Reason: %4 UserSettings - - + + Default @@ -3806,7 +4178,7 @@ Reason: %4 UserSettingsModel - + Theme テーマ @@ -3840,6 +4212,11 @@ Reason: %4 Send messages as Markdown メッセージをMarkdownとして送信 + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3915,8 +4292,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4106,7 +4493,7 @@ Reason: %4 - + Default @@ -4148,6 +4535,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4187,9 +4579,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4201,23 +4603,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4227,7 +4629,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4264,7 +4666,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4317,7 +4719,7 @@ This setting will take effect upon restart. - + Select a file ファイルを選択 @@ -4469,7 +4871,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday 昨日 @@ -4523,7 +4925,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip 音声データを送信しました @@ -4584,16 +4986,28 @@ This setting will take effect upon restart. + You: %1 あなた: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message 暗号化されたメッセージを送信しました @@ -4632,6 +5046,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts index fc4478ee..f239fee7 100644 --- a/resources/langs/nheko_ml.ts +++ b/resources/langs/nheko_ml.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add ചേർക്കുക @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen മുഴുവൻ സ്ക്രീൻ @@ -222,22 +222,34 @@ - + Invited user: %1 ക്ഷണിച്ച ഉപയോക്താവ്:% 1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite ക്ഷണം ഉറപ്പാക്കു - + Do you really want to invite %1 (%2)? @@ -313,12 +325,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 ദയവായി വീണ്ടും ലോഗിൻ ചെയ്യാൻ നോക്കുക: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites പ്രിയപ്പെട്ടവ @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: എല്ലാ ഫയലുകളും (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in ഇവരെ അനുവദിക്കുക - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file ഒരു ഫയൽ അയയ്ക്കുക @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 ഒരു സന്ദേശം എഴുതുക…. - + Stickers സ്റ്റിക്കറുകൾ @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit തിരുത്തുക @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + അയക്കുക + + + + Write a message... + ഒരു സന്ദേശം എഴുതുക…. + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. നിങ്ങൾ ഈ മുറിയിൽ ചേർന്നു. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4159,6 +4546,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4590,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4614,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4275,7 +4677,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4730,7 @@ This setting will take effect upon restart. - + Select a file ഒരു ഫയൽ തിരഞ്ഞെടുക്കുക @@ -4480,7 +4882,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4936,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +4997,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5057,16 @@ This setting will take effect upon restart. %1 ended a call %1 ഒരു കോൾ അവസാനിപ്പിച്ചു + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index 19a58166..64508109 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -89,12 +89,12 @@ Verwijder deze alias - + #new-alias:server.tld #nieuwe-alias:server.domein - + Add Toevoegen @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 en %n ander @@ -208,7 +208,7 @@ CallManager - + Entire screen Gehele scherm @@ -222,22 +222,34 @@ - + Invited user: %1 Gebruiker uitgenodigd: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. De opgeslagen gegevens van Nheko zijn nieuwer dan de versie die je nu draait. Update Nheko of verwijder de gegevens. - + Failed to open database, logging out! Kon database niet openen, je wordt uitgelogd! - + Knock on room Aankloppen @@ -263,12 +275,12 @@ - + Confirm invite Bevestig uitnodiging - + Do you really want to invite %1 (%2)? Weet je zeker dat je %1 (%2) wil uitnodigen? @@ -313,12 +325,12 @@ Toegelaten gebruiker: %1 - + Do you really want to start a private chat with %1? Weet je zeker dat je een privé chat wil beginnen met %1? - + Cache migration failed! Migreren van de cache is mislukt! @@ -333,7 +345,7 @@ Incompatibele cacheversie - + Failed to restore OLM account. Please login again. Herstellen van OLM account mislukt. Log a.u.b. opnieuw in. @@ -345,13 +357,13 @@ Opgeslagen gegevens herstellen mislukt. Log a.u.b. opnieuw in. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Instellen van de versleuteling is mislukt. Bericht van server: %1 %2. Probeer het a.u.b. later nog eens. - + Please try to login again: %1 Probeer a.u.b. opnieuw in te loggen: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: Geen netwerkverbinding + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: Laat één op één gesprekken zien. - + Favourites Favorieten @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Ontsleutel geheimen @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Kon verborgen gebeurtenissen niet instellen: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Alle bestanden (*) - + Upload of '%1' failed Versturen van '%1' misluk @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Kamer verlaten @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Je hebt een ongeldige Matrix ID ingevuld. Correct voorbeeld: @jan:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 heeft een bericht verwijderd @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. %1 beantwoordde de oproep. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 beëindigde de oproep. + %1 is negotiating the call... %1 is het gesprek aan het opzetten... - + Allow them in Binnenlaten @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Plaats een oproep - + + Already on a call + + + + Send a file Verstuur een bestand @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Typ een bericht… - + Stickers Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Bewerken @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Opties - + Reason for removal Reden voor verwijdering @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 stuurde een versleuteld bericht @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 antwoordde met een versleuteld bericht - + %1 replied to a message %1 antwoordde op een bericht @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Kon machtsniveau niet bewerken: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Andere evenementen @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call Een beeld- of geluidsgesprek ophangen + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Verstuur + + + + Write a message... + Typ een bericht… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Gisteren, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTREREN - + Autodiscovery failed. Received malformed response. Automatische herkenning mislukt. Onjuist gevormd antwoord ontvangen. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored geen versie opgeslagen @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Kamer verlaten @@ -2752,7 +3114,7 @@ Wees ervan bewust dat het achteraf niet meer uitgeschakeld kan worden.meer tonen - + Failed to enable encryption: %1 Versleuteling kon niet worden ingeschakeld: %1 @@ -2886,7 +3248,7 @@ Wees ervan bewust dat het achteraf niet meer uitgeschakeld kan worden. SecretStorage - + Failed to connect to secret storage Verbinden met geheimopslag mislukt @@ -2984,7 +3346,7 @@ Als je "verifieer" kiest, moet je het andere apparaat bij de hand hebb SingleImagePackModel - + Failed to update image pack: %1 Kon afbeeldingspakket niet updaten: %1 @@ -3097,19 +3459,19 @@ Als je "verifieer" kiest, moet je het andere apparaat bij de hand hebb TimelineModel - + Message redaction failed: %1 Bericht intrekken mislukt: %1 - + Failed to encrypt event, sending aborted! Kon evenement niet versleutelen, versturen geannuleerd! - + Save image Afbeelding opslaan @@ -3129,7 +3491,7 @@ Als je "verifieer" kiest, moet je het andere apparaat bij de hand hebb Bestand opslaan - + %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.) @@ -3398,7 +3760,7 @@ Reason: %4 Reden: %4 - + %2 revoked the invite to %1. %2 heeft de uitnodiging voor %1 ingetrokken. @@ -3458,17 +3820,17 @@ Reden: %4 %1 heeft het aankloppen ingetrokken. - + You joined this room. Je neemt nu deel aan deze kamer. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 heeft %2 uitgenodigd. @@ -3502,7 +3864,7 @@ Reden: %4 TimelineRow - + Edited Bewerkt @@ -3515,12 +3877,12 @@ Reden: %4 TimelineView - + No room open Geen kamer open - + No preview available Geen voorbeeld beschikbaar @@ -3566,22 +3928,22 @@ Reden: %4 TopBar - + Back to room list Terug naar kamerlijst - + No room selected Geen kamer geselecteerd - + In %1 - + Show room members. Laat kamerdeelnemers zien. @@ -3601,12 +3963,17 @@ Reden: %4 Deze kamer bevat ongeverifieerde apparaten! - + Show or hide pinned messages Toon of verberg vastgeprikte berichten - + + Search this room + + + + Room options Kameropties @@ -3635,6 +4002,11 @@ Reden: %4 Unpin Vastprikken ongedaan maken + + + Enter search query + + TrayIcon @@ -3677,7 +4049,7 @@ Reden: %4 UploadBox - + Upload %n file(s) Bestand versturen @@ -3812,8 +4184,8 @@ Reden: %4 UserSettings - - + + Default Standaard @@ -3821,7 +4193,7 @@ Reden: %4 UserSettingsModel - + Theme Thema @@ -3855,6 +4227,11 @@ Reden: %4 Send messages as Markdown Verstuur berichten in Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3930,8 +4307,18 @@ Reden: %4 Decrypt messages in sidebar Ontsleutel berichten in de zijbalk + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Privacy scherm @@ -4121,7 +4508,7 @@ Reden: %4 Maak kamerinformatie beschikbaar over D-Bus - + Default Standaard @@ -4166,6 +4553,11 @@ When disabled, all messages are sent as a plain text. Sta het gebruik van Markdown in berichten toe. Indien uitgeschakeld worden alle berichten als platte tekst verstuurd. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4207,9 +4599,19 @@ UIT - vierkant, AAN - cirkel. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4221,24 +4623,24 @@ UIT - vierkant, AAN - cirkel. De sleutel om je eigen apparaten te verifiëren. Indien gecached zal het verifiëren van één van je apparaten die ook als geverifieerd markeren voor je anderen apparaten en gebruikers die jou geverifieerd hebben. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Activeer een melding als een bericht binnen komt. Meestal zorgt dit dat het icoon in de taakbalk op een manier animeert of iets dergelijks. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4248,7 +4650,7 @@ Meestal zorgt dit dat het icoon in de taakbalk op een manier animeert of iets de - + 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. @@ -4290,7 +4692,7 @@ Only affects messages in encrypted chats. Heeft alleen effect op versleutelde chats. - + When the window loses focus, the timeline will be blurred. Als het scherm focus verliest, zal de tijdlijn @@ -4346,7 +4748,7 @@ This setting will take effect upon restart. Deze instelling wordt toegepast na opnieuw starten van de applicatie. - + Select a file Selecteer een bestand @@ -4498,7 +4900,7 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie. descriptiveTime - + Yesterday Gisteren @@ -4552,7 +4954,7 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie. message-description sent: - + You sent an audio clip Je verstuurde een audio clip @@ -4613,16 +5015,28 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie. + You: %1 Jij: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Je hebt een versleuteld bericht verstuurd @@ -4661,6 +5075,16 @@ Deze instelling wordt toegepast na opnieuw starten van de applicatie.%1 ended a call %1 hing op + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 1d0208f4..0ec4edf9 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -89,12 +89,12 @@ Usuń ten alias - + #new-alias:server.tld #nowy-alias:serwer.tld - + Add Dodaj @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 i jeszcze %n inny @@ -209,7 +209,7 @@ CallManager - + Entire screen Cały ekran @@ -223,22 +223,34 @@ - + Invited user: %1 Zaproszono użytkownika: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Pamięć podręczna na twoim dysku jest nowsza niż wspierana przez tę wersję Nheko. Zaktualizuj Nheko lub wyczyść pamięć podręczną. - + Failed to open database, logging out! Nie udało się otworzyć bazy danych, następuje wylogowanie! - + Knock on room Zapukaj do pokoju @@ -264,12 +276,12 @@ - + Confirm invite Potwierdź zaproszenie - + Do you really want to invite %1 (%2)? Czy na pewno chcesz zaprosić %1 (%2)? @@ -314,12 +326,12 @@ Odblokowano użytkownika: %1 - + Do you really want to start a private chat with %1? Czy na pewno chcesz rozpocząć prywatny czat z %1? - + Cache migration failed! Nie udało się przenieść pamięci podręcznej! @@ -334,7 +346,7 @@ Niekompatybilna wersja pamięci podręcznej - + Failed to restore OLM account. Please login again. Nie udało się przywrócić konta OLM. Spróbuj zalogować się ponownie. @@ -346,13 +358,13 @@ Nie udało się przywrócić zapisanych danych. Spróbuj zalogować się ponownie. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Nie udało się ustawić kluczy szyfrujących. Odpowiedź serwera: %1 %2. Spróbuj ponownie później. - + Please try to login again: %1 Spróbuj zalogować się ponownie: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: Brak połączenia z siecią + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: Pokaż czaty bezpośrednie. - + Favourites Ulubione @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Odszyfruj sekrety @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 Nie udało się ustawić ukrytych zdarzeń: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Wszystkie pliki (*) - + Upload of '%1' failed Wysyłanie '%1' nie powiodło się @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Opuść pokój @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Wprowadzono nieprawidłowe Matrix ID. Przykład prawidłowego ID: @ania:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 usunął/ęła wiadomość @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 odebrał(a) połączenie. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 zakończył(a) połączenie. + %1 is negotiating the call... %1 negocjuje połączenie... - + Allow them in Wpuść @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Zadzwoń - + + Already on a call + + + + Send a file Wyślij plik @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Napisz wiadomość… - + Stickers Naklejki @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Edytuj @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Opcje - + Reason for removal Powód usunięcia @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 wysłał(a) zaszyfrowaną wiadomość @@ -1714,7 +2051,7 @@ Example: https://server.my:8787 %1 odpisał(a) zaszyfrowaną wiadomością - + %1 replied to a message %1 odpisał(a) na wiadomość @@ -1897,7 +2234,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 Nie udało się zaktualizować poziomu mocy: %1 @@ -1913,7 +2250,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events Inne zdarzenia @@ -2082,6 +2419,11 @@ Example: https://server.my:8787 Hang up a call Kończenie rozmowy + + + Reject a call + + Change the room emotes @@ -2099,7 +2441,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. @@ -2141,6 +2483,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Wyślij + + + + Write a message... + Napisz wiadomość… + ReadReceipts @@ -2153,7 +2510,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Wczoraj, %1 @@ -2227,7 +2584,7 @@ Example: https://server.my:8787 ZAREJESTRUJ - + Autodiscovery failed. Received malformed response. Automatyczne wykrywanie zakończone niepowodzeniem. Otrzymano nieprawidłową odpowiedź. @@ -2321,7 +2678,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored brak zapisanej wersji @@ -2345,6 +2702,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Opuść pokój @@ -2757,7 +3119,7 @@ Zwróć uwagę, iż nie będzie ono mogło zostać wyłączone. pokaż więcej - + Failed to enable encryption: %1 Nie udało się włączyć szyfrowania: %1 @@ -2891,7 +3253,7 @@ Zwróć uwagę, iż nie będzie ono mogło zostać wyłączone. SecretStorage - + Failed to connect to secret storage Błąd połączenia do menadżera sekretów @@ -2989,7 +3351,7 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego SingleImagePackModel - + Failed to update image pack: %1 Nie udało się uaktualnić paczki obrazów: %1 @@ -3102,19 +3464,19 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego TimelineModel - + Message redaction failed: %1 Cenzurowanie wiadomości nie powiodło się: %1 - + Failed to encrypt event, sending aborted! Szyfrowanie event-u nie powiodło się, wysyłanie anulowane! - + Save image Zapisz obraz @@ -3134,7 +3496,7 @@ Jeśli zdecydujesz się na weryfikację, będziesz potrzebować innego zaufanego Zapisz plik - + %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.) @@ -3408,7 +3770,7 @@ Reason: %4 Powód: %4 - + %2 revoked the invite to %1. %2 anulował(a) zaproszenie do %1. @@ -3468,17 +3830,17 @@ Powód: %4 Użytkownik %1 ocenzurował własne pukanie. - + You joined this room. Dołączyłeś(-aś) do tego pokoju. - + %1 made this room require an invitation to join. - + %1 invited %2. %1 zaprosił(a) %2. @@ -3512,7 +3874,7 @@ Powód: %4 TimelineRow - + Edited Edytowane @@ -3525,12 +3887,12 @@ Powód: %4 TimelineView - + No room open Brak otwartych pokojów - + No preview available Podgląd niedostępny @@ -3577,22 +3939,22 @@ Powód: %4 TopBar - + Back to room list Wróć do listy pokoi - + No room selected Nie wybrano pokoju - + In %1 - + Show room members. Pokaż członków pokoju. @@ -3612,12 +3974,17 @@ Powód: %4 Ten pokój zawiera niezweryfikowane urządzenia! - + Show or hide pinned messages Pokaż lub ukryj przypięte wiadomości - + + Search this room + + + + Room options Ustawienia pokoju @@ -3646,6 +4013,11 @@ Powód: %4 Unpin Odepnij + + + Enter search query + + TrayIcon @@ -3688,7 +4060,7 @@ Powód: %4 UploadBox - + Upload %n file(s) Wyślij plik @@ -3824,8 +4196,8 @@ Powód: %4 UserSettings - - + + Default Domyślne @@ -3833,7 +4205,7 @@ Powód: %4 UserSettingsModel - + Theme Motyw @@ -3867,6 +4239,11 @@ Powód: %4 Send messages as Markdown Wysyłaj wiadomości używając Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3942,8 +4319,18 @@ Powód: %4 Decrypt messages in sidebar Pokaż odszyfrowane wiadomości na pasku bocznym + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Ochrona prywatności @@ -4133,7 +4520,7 @@ Powód: %4 Udostępnij informacje o pokojach poprzez D-Bus - + Default Domyślne @@ -4177,6 +4564,11 @@ When disabled, all messages are sent as a plain text. Pozwól na używanie Markdown w wiadomościach. Gdy ta opcja jest wyłączona, wszystkie wiadomości będą wysyłane jako zwykły tekst. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4218,9 +4610,19 @@ Wyłączone - kwadratowe, włączone - okrągłe. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4232,24 +4634,24 @@ Wyłączone - kwadratowe, włączone - okrągłe. Klucz używany do weryfikacji twoich własnych urządzeń. Jeśli jest on w pamięci podręcznej, zweryfikowanie jednego z twoich urządzeń oznaczy je w ten sam sposób dla wszystkich pozostałych twoich urządzeń oraz dla użytkowników którzy uprzednio ciebie zweryfikowali. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Pokazuj alert po otrzymaniu wiadomości. To zwykle sprawia, że ikona aplikacji na pasku zadań jest animowana. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4259,7 +4661,7 @@ To zwykle sprawia, że ikona aplikacji na pasku zadań jest animowana. - + 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. @@ -4301,7 +4703,7 @@ Only affects messages in encrypted chats. Dotyczy wyłącznie czatów z włączonym szyfrowaniem. - + When the window loses focus, the timeline will be blurred. Kiedy okno przejdzie na drugi plan, oś czasu zostanie rozmyta. @@ -4356,7 +4758,7 @@ This setting will take effect upon restart. To ustawienie wejdzie w życie po restarcie aplikacji. - + Select a file Wybierz plik @@ -4508,7 +4910,7 @@ To ustawienie wejdzie w życie po restarcie aplikacji. descriptiveTime - + Yesterday Wczoraj @@ -4562,7 +4964,7 @@ To ustawienie wejdzie w życie po restarcie aplikacji. message-description sent: - + You sent an audio clip Wysłałeś(aś) klip audio @@ -4623,16 +5025,28 @@ To ustawienie wejdzie w życie po restarcie aplikacji. + You: %1 Ty: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Wysłałeś(aś) zaszyfrowaną wiadomość @@ -4671,6 +5085,16 @@ To ustawienie wejdzie w życie po restarcie aplikacji. %1 ended a call %1 zakończył(a) połączenie + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_pt_BR.ts b/resources/langs/nheko_pt_BR.ts index 7ac98016..219454ef 100644 --- a/resources/langs/nheko_pt_BR.ts +++ b/resources/langs/nheko_pt_BR.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen Tela Inteira @@ -222,22 +222,34 @@ - + Invited user: %1 Usuário convidado: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite Confirmar convite - + Do you really want to invite %1 (%2)? Deseja realmente convidar %1 (%2)? @@ -313,12 +325,12 @@ Usuário desbanido: %1 - + Do you really want to start a private chat with %1? Deseja realmente iniciar uma conversa privada com %1? - + Cache migration failed! Migração do cache falhou! @@ -333,7 +345,7 @@ Versão de cache incompatível - + Failed to restore OLM account. Please login again. Falha ao restaurar conta OLM. Por favor faça login novamente. @@ -345,13 +357,13 @@ Falha ao restaurar dados salvos. Por favor faça login novamente. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Falha ao configurar chaves de criptografia. Resposta do servidor: %1 %2. Por favor tente novamente mais tarde. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. Você entrou nessa sala. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4159,6 +4546,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4590,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4614,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4275,7 +4677,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4730,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4882,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4936,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +4997,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5057,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts index 9e2e44be..2aee5f15 100644 --- a/resources/langs/nheko_pt_PT.ts +++ b/resources/langs/nheko_pt_PT.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add Adicionar @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 e outro %n @@ -208,7 +208,7 @@ CallManager - + Entire screen Ecrã inteiro @@ -222,22 +222,34 @@ - + Invited user: %1 Utilizador convidado: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. A cache no seu disco é mais recente do que aquela que esta versão do Nheko suporta. Por favor atualize o Nheko ou limpe a sua cache. - + Failed to open database, logging out! Falha ao abrir base de dados. A terminar sessão! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite Confirmar convite - + Do you really want to invite %1 (%2)? Tem a certeza que quer convidar %1 (%2)? @@ -313,12 +325,12 @@ Utilizador perdoado: %1 - + Do you really want to start a private chat with %1? Tem a certeza que quer começar uma conversa privada com %1? - + Cache migration failed! Falha ao migrar a cache! @@ -333,7 +345,7 @@ Versão da cache incompatível - + Failed to restore OLM account. Please login again. Falha ao restaurar a sua conta OLM. Por favor autentique-se novamente. @@ -345,13 +357,13 @@ Falha ao restaurar dados guardados. Por favor, autentique-se novamente. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Falha ao estabelecer chaves encriptadas. Resposta do servidor: %1 %2. Tente novamente mais tarde. - + Please try to login again: %1 Por favor, tente autenticar-se novamente: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites Favoritos @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Desencriptar segredos @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Todos os ficheiros (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Sair da sala @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Inseriu um ID Matrix inválido p. ex. @ze:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 %1 iniciou uma chamada. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in Permitir a entrada - + %1 answered the call. %1 atendeu a chamada. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 terminou a chamada. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Iniciar chamada - + + Already on a call + + + + Send a file Enviar um ficheiro @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Escreva uma mensagem… - + Stickers Autocolantes @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit Editar @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Opções - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 enviou uma mensagem encriptada @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 %1 respondeu com uma mensagem encriptada - + %1 replied to a message %1 respondeu a uma mensagem @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Enviar + + + + Write a message... + Escreva uma mensagem… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 Ontem, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTAR - + Autodiscovery failed. Received malformed response. Falha na descoberta automática. Resposta mal formada recebida. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nenhuma versão guardada @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Sair da sala @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Falha ao ativar encriptação: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Falha ao ligar ao armazenamento secreto @@ -2983,7 +3345,7 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e SingleImagePackModel - + Failed to update image pack: %1 Falha ao atualizar pacote de imagem: %1 @@ -3096,19 +3458,19 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e TimelineModel - + Message redaction failed: %1 Falha ao eliminar mensagem: %1 - + Failed to encrypt event, sending aborted! Falha ao encriptar evento, envio abortado! - + Save image Guardar imagem @@ -3128,7 +3490,7 @@ Se escolher a verificação, terá que ter o outro dispositivo disponível. Se e Guardar ficheiro - + %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.) @@ -3396,7 +3758,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3456,17 +3818,17 @@ Reason: %4 %1 eliminou a sua "batida à porta". - + You joined this room. Entrou na sala. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3500,7 +3862,7 @@ Reason: %4 TimelineRow - + Edited Editada @@ -3513,12 +3875,12 @@ Reason: %4 TimelineView - + No room open Nenhuma sala aberta - + No preview available Pré-visualização não disponível @@ -3564,22 +3926,22 @@ Reason: %4 TopBar - + Back to room list Voltar à lista de salas - + No room selected Nenhuma sala selecionada - + In %1 - + Show room members. @@ -3599,12 +3961,17 @@ Reason: %4 Esta sala contém dispositivos não verificados! - + Show or hide pinned messages - + + Search this room + + + + Room options Opções da sala @@ -3633,6 +4000,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3675,7 +4047,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3810,8 +4182,8 @@ Reason: %4 UserSettings - - + + Default Predefinido @@ -3819,7 +4191,7 @@ Reason: %4 UserSettingsModel - + Theme Tema @@ -3853,6 +4225,11 @@ Reason: %4 Send messages as Markdown Enviar mensagens como Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3928,8 +4305,18 @@ Reason: %4 Decrypt messages in sidebar Desencriptar mensagens na barra lateral + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Ecrã de privacidade @@ -4119,7 +4506,7 @@ Reason: %4 - + Default Predefinido @@ -4164,6 +4551,11 @@ When disabled, all messages are sent as a plain text. Permitir Markdown em mensagens. Quando desativada, todas as mensagens serão enviadas em texto simples. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4204,9 +4596,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4218,23 +4620,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Mostrar alerta quando é recebida uma mensagem. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4244,7 +4646,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4282,7 +4684,7 @@ Only affects messages in encrypted chats. Apenas afeta mensagens em conversas encriptadas. - + When the window loses focus, the timeline will be blurred. Quando a janela perde a atenção, a cronologia @@ -4336,7 +4738,7 @@ This setting will take effect upon restart. - + Select a file Selecionar um ficheiro @@ -4488,7 +4890,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ontem @@ -4542,7 +4944,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Enviou uma mensagem áudio @@ -4603,16 +5005,28 @@ This setting will take effect upon restart. + You: %1 Você: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Enviou uma mensagem encriptada @@ -4651,6 +5065,16 @@ This setting will take effect upon restart. %1 ended a call %1 terminou uma chamada + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts index a973a071..df76a7c0 100644 --- a/resources/langs/nheko_ro.ts +++ b/resources/langs/nheko_ro.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -209,7 +209,7 @@ CallManager - + Entire screen @@ -223,22 +223,34 @@ - + Invited user: %1 Utilizator invitat: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -264,12 +276,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -314,12 +326,12 @@ Utilizator dezinterzis: %1 - + Do you really want to start a private chat with %1? - + Cache migration failed! Nu s-a putut migra cache-ul! @@ -334,7 +346,7 @@ Versiune cache incompatibilă - + Failed to restore OLM account. Please login again. Nu s-a putut restabili contul OLM. Vă rugăm să vă reconectați. @@ -346,13 +358,13 @@ Nu s-au putut restabili datele salvate. Vă rugăm să vă reconectați. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Nu s-au putut stabili cheile. Răspunsul serverului: %1 %2. Vă rugăm încercați mai târziu. - + Please try to login again: %1 Vă rugăm să vă reconectați: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Toate fișierele (*) - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Părăsește camera @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 a răspuns apelului. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 a închis apelul. + %1 is negotiating the call... - + Allow them in @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Opțiuni - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 a trimis un mesaj criptat @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,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. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 ÎNREGISTRARE - + Autodiscovery failed. Received malformed response. Autodescoperirea a eșuat. Răspunsul primit este defectuos. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nicio versiune stocată @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Părăsește camera @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Nu s-a putut activa criptarea: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Redactare mesaj eșuată: %1 - + Failed to encrypt event, sending aborted! - + Save image Salvați imaginea @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose 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.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 %1 și-a redactat ciocănitul. - + You joined this room. Te-ai alăturat camerei. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open Nicio cameră deschisă - + No preview available @@ -3572,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3607,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3641,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4191,8 @@ Reason: %4 UserSettings - - + + Default @@ -3828,7 +4200,7 @@ Reason: %4 UserSettingsModel - + Theme Temă @@ -3862,6 +4234,11 @@ Reason: %4 Send messages as Markdown Trimite mesaje ca Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4314,18 @@ Reason: %4 Decrypt messages in sidebar Decriptează mesajele din bara laterală + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4128,7 +4515,7 @@ Reason: %4 - + Default @@ -4170,6 +4557,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. Permite folosirea markdown în mesaje. Când este dezactivată, mesajele sunt trimise ca text simplu. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4209,9 +4601,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4223,23 +4625,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Arată o alertă când primiți un mesaj. Deobicei pictograma aplicației se animează în taskbar. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4651,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4286,7 +4688,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4339,7 +4741,7 @@ This setting will take effect upon restart. - + Select a file @@ -4491,7 +4893,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Ieri @@ -4545,7 +4947,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Ai trimis un clip audio @@ -4606,16 +5008,28 @@ This setting will take effect upon restart. + You: %1 Tu: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Ai trimis un mesaj criptat @@ -4654,6 +5068,16 @@ This setting will take effect upon restart. %1 ended a call %1 a încheiat un apel + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index 2db11a39..b29a6bec 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -89,12 +89,12 @@ Удалить псевдоним - + #new-alias:server.tld - + Add Добавить @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 и ещё %n @@ -209,7 +209,7 @@ CallManager - + Entire screen Весь экран @@ -223,22 +223,34 @@ - + Invited user: %1 Приглашенный пользователь: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Версия кэша на вашем диске новее той, что поддерживается текущей версией Nheko. Пожалуйста, обновите Nheko или очистите кэш. - + Failed to open database, logging out! Ошибка при попытке открыть базу данных, выходим из аккаунта! - + Knock on room Попросить приглашение @@ -264,12 +276,12 @@ - + Confirm invite Подтвердите приглашение - + Do you really want to invite %1 (%2)? Вы точно хотите пригласить %1 (%2)? @@ -314,12 +326,12 @@ Разблокированный пользователь: %1 - + Do you really want to start a private chat with %1? Вы действительно хотите начать личную переписку с %1? - + Cache migration failed! Миграция кэша не удалась! @@ -334,7 +346,7 @@ Несовместимая версия кэша - + Failed to restore OLM account. Please login again. Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова. @@ -346,13 +358,13 @@ Не удалось восстановить сохраненные данные. Пожалуйста, войдите снова. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Не удалось настроить ключи шифрования. Ответ сервера:%1 %2. Пожалуйста, попробуйте позже. - + Please try to login again: %1 Повторите попытку входа: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: Отсутствует подключение к сети + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: Показать личные чаты. - + Favourites Избранное @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Расшифровать ключи @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: Все файлы (*) - + Upload of '%1' failed @@ -1135,7 +1446,7 @@ You may optionally provide a reason for others to accept your knock: Add - + Добавить @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Покинуть комнату @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org Вы ввели не правильный Matrix ID, @joe:matrix.org @@ -1354,7 +1665,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1428,18 +1749,29 @@ Example: https://server.my:8787 %1 answered the call. %1 ответил на звонок. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 завершил вызов. + %1 is negotiating the call... - + Allow them in @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 Позвонить - + + Already on a call + + + + Send a file Отправить файл @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 Написать сообщение… - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit Редактировать @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 Опции - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 отправил зашифрованное сообщение @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 %1 ответил зашифрованным сообщением - + %1 replied to a message %1 ответил на сообщение @@ -1832,7 +2169,7 @@ Example: https://server.my:8787 Add - + Добавить @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,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. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Отправить + + + + Write a message... + Написать сообщение… + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 РЕГИСТРАЦИЯ - + Autodiscovery failed. Received malformed response. Автообноружение не удалось. Получен поврежденный ответ. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored нет сохраненной версии @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Покинуть комнату @@ -2575,9 +2937,9 @@ Example: https://server.my:8787 %n member(s) - - - + %n участник + %n участника + %n участников @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Не удалось включить шифрование: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Ошибка редактирования сообщения: %1 - + Failed to encrypt event, sending aborted! Не удалось зашифровать сообщение, отправка отменена! - + Save image Сохранить изображение @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose Сохранить файл - + %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.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 %1 отредактировал его "стук". - + You joined this room. Вы присоединились к комнате. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited Изменено @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open Комната не выбрана - + No preview available @@ -3538,9 +3900,9 @@ Reason: %4 %n member(s) - - - + %n участник + %n участника + %n участников @@ -3572,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list Вернуться к списку комнат - + No room selected Комнаты не выбраны - + In %1 - + Show room members. @@ -3607,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Настройки комнаты @@ -3641,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4191,8 @@ Reason: %4 UserSettings - - + + Default По умолчанию @@ -3828,7 +4200,7 @@ Reason: %4 UserSettingsModel - + Theme Тема @@ -3862,6 +4234,11 @@ Reason: %4 Send messages as Markdown Посылать сообщение в формате Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4314,18 @@ Reason: %4 Decrypt messages in sidebar Дешифровывать сообщение в сайдбаре + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen Приватное Окно @@ -4128,7 +4515,7 @@ Reason: %4 - + Default По умолчанию @@ -4171,6 +4558,11 @@ When disabled, all messages are sent as a plain text. Разрешить использовать markdown в сообщениях. Когда выключено, все сообщения посылаются как обычный текст. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4211,9 +4603,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4225,24 +4627,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Показывать предупреждение, когда получено сообщеение. На это обычно реагирует иконка приложения в таскбаре. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4252,7 +4654,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4290,7 +4692,7 @@ Only affects messages in encrypted chats. Актуально только для комнат, в которых включено шифрование. - + When the window loses focus, the timeline will be blurred. @@ -4343,7 +4745,7 @@ This setting will take effect upon restart. - + Select a file Выберите файл @@ -4495,7 +4897,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Вчера @@ -4549,7 +4951,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Вы отправили аудиозапись @@ -4610,16 +5012,28 @@ This setting will take effect upon restart. + You: %1 Вы: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Вы отправили зашифрованное сообщение @@ -4658,6 +5072,16 @@ This setting will take effect upon restart. %1 ended a call %1 Закончил разговор + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts index 9718a9aa..99c6d645 100644 --- a/resources/langs/nheko_si.ts +++ b/resources/langs/nheko_si.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,34 @@ - + Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -313,12 +325,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -333,7 +345,7 @@ - + Failed to restore OLM account. Please login again. @@ -345,13 +357,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message @@ -1426,18 +1747,29 @@ Example: https://server.my:8787 %1 answered the call. + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. + %1 is negotiating the call... - + Allow them in @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4159,6 +4546,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4198,9 +4590,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4212,23 +4614,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4275,7 +4677,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4328,7 +4730,7 @@ This setting will take effect upon restart. - + Select a file @@ -4480,7 +4882,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4534,7 +4936,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4595,16 +4997,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4643,6 +5057,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_sr_Latn.ts b/resources/langs/nheko_sr_Latn.ts index 16701bb6..ebd079d2 100644 --- a/resources/langs/nheko_sr_Latn.ts +++ b/resources/langs/nheko_sr_Latn.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -209,7 +209,7 @@ CallManager - + Entire screen @@ -223,22 +223,34 @@ - + Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -264,12 +276,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -314,12 +326,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -334,7 +346,7 @@ - + Failed to restore OLM account. Please login again. @@ -346,13 +358,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -413,6 +425,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -459,7 +770,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -650,7 +961,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -894,7 +1205,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1109,7 +1420,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1169,7 +1480,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1248,7 +1559,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1354,7 +1665,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1419,27 +1730,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1457,7 +1789,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1467,7 +1804,7 @@ Example: https://server.my:8787 - + Stickers @@ -1490,7 +1827,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1520,7 +1857,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1696,8 +2033,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1713,7 +2050,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1896,7 +2233,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1912,7 +2249,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2081,6 +2418,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2098,7 +2440,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. @@ -2140,6 +2482,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2152,7 +2509,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2226,7 +2583,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2320,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2344,6 +2701,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2755,7 +3117,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2889,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2985,7 +3347,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3098,19 +3460,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3130,7 +3492,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3403,7 +3765,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3463,17 +3825,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3507,7 +3869,7 @@ Reason: %4 TimelineRow - + Edited @@ -3520,12 +3882,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3572,22 +3934,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3607,12 +3969,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3641,6 +4008,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3683,7 +4055,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3819,8 +4191,8 @@ Reason: %4 UserSettings - - + + Default @@ -3828,7 +4200,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3862,6 +4234,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3937,8 +4314,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4128,7 +4515,7 @@ Reason: %4 - + Default @@ -4170,6 +4557,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4209,9 +4601,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4223,23 +4625,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4249,7 +4651,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4286,7 +4688,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4339,7 +4741,7 @@ This setting will take effect upon restart. - + Select a file @@ -4491,7 +4893,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4545,7 +4947,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4606,16 +5008,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4654,6 +5068,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts index b86aae9e..6fb14a89 100644 --- a/resources/langs/nheko_sv.ts +++ b/resources/langs/nheko_sv.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -208,7 +208,7 @@ CallManager - + Entire screen @@ -222,22 +222,34 @@ - + Invited user: %1 Bjöd in användare: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -263,12 +275,12 @@ - + Confirm invite Bekräfta inbjudan - + Do you really want to invite %1 (%2)? Är du säker på att du vill bjuda in %1 (%2)? @@ -313,12 +325,12 @@ Hävde bannlysningen av användare: %1 - + Do you really want to start a private chat with %1? - + Cache migration failed! Cache-migration misslyckades! @@ -333,7 +345,7 @@ Inkompatibel cache-version - + Failed to restore OLM account. Please login again. Kunde inte återställa OLM-konto. Vänligen logga in på nytt. @@ -345,13 +357,13 @@ Kunde inte återställa sparad data. Vänligen logga in på nytt. - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. Kunde inte sätta upp krypteringsnycklar. Svar från servern: %1 %2. Vänligen försök igen senare. - + Please try to login again: %1 Vänligen försök logga in på nytt: %1 @@ -412,6 +424,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -458,7 +769,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -648,7 +959,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets Dekryptera hemliga nycklar @@ -892,7 +1203,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1107,7 +1418,7 @@ You may optionally provide a reason for others to accept your knock: Alla Filer (*) - + Upload of '%1' failed @@ -1167,7 +1478,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room Lämna rum @@ -1246,7 +1557,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1352,7 +1663,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1417,27 +1728,48 @@ Example: https://server.my:8787 %1 påbörjade ett samtal. - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. %1 besvarade samtalet. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. %1 avslutade samtalet. @@ -1455,7 +1787,12 @@ Example: https://server.my:8787 Ring upp - + + Already on a call + + + + Send a file Skicka en fil @@ -1465,7 +1802,7 @@ Example: https://server.my:8787 Skriv ett meddelande… - + Stickers @@ -1488,7 +1825,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1518,7 +1855,7 @@ Example: https://server.my:8787 Alternativ - + Reason for removal @@ -1694,8 +2031,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 skickade ett krypterat meddelande @@ -1711,7 +2048,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1894,7 +2231,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1910,7 +2247,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2079,6 +2416,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2096,7 +2438,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. @@ -2138,6 +2480,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + Skicka + + + + Write a message... + Skriv ett meddelande… + ReadReceipts @@ -2150,7 +2507,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2224,7 +2581,7 @@ Example: https://server.my:8787 REGISTRERA - + Autodiscovery failed. Received malformed response. Autouppslag misslyckades. Mottog felkonstruerat svar. @@ -2318,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored ingen version lagrad @@ -2342,6 +2699,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room Lämna rum @@ -2751,7 +3113,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 Kunde inte aktivera kryptering: %1 @@ -2885,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 Kunde inte maskera meddelande: %1 - + Failed to encrypt event, sending aborted! Kunde inte kryptera event, sändning avbruten! - + Save image Spara bild @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose 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.) @@ -3394,7 +3756,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3454,17 +3816,17 @@ Reason: %4 %1 maskerade sin knackning. - + You joined this room. Du gick med i detta rum. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3498,7 +3860,7 @@ Reason: %4 TimelineRow - + Edited @@ -3511,12 +3873,12 @@ Reason: %4 TimelineView - + No room open Inget rum öppet - + No preview available @@ -3562,22 +3924,22 @@ Reason: %4 TopBar - + Back to room list Tillbaka till rumlista - + No room selected Inget rum markerat - + In %1 - + Show room members. @@ -3597,12 +3959,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options Alternativ för rum @@ -3631,6 +3998,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3673,7 +4045,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3808,8 +4180,8 @@ Reason: %4 UserSettings - - + + Default @@ -3817,7 +4189,7 @@ Reason: %4 UserSettingsModel - + Theme Tema @@ -3851,6 +4223,11 @@ Reason: %4 Send messages as Markdown Skicka meddelanden som Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3926,8 +4303,18 @@ Reason: %4 Decrypt messages in sidebar Dekryptera meddelanden i sidofält + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4117,7 +4504,7 @@ Reason: %4 - + Default @@ -4160,6 +4547,11 @@ When disabled, all messages are sent as a plain text. Tillåt användning av Markdown i meddelanden. Om denna inställning är av kommer alla meddelanden skickas som oformatterad text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4200,9 +4592,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4214,24 +4616,24 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. Visar en notis när ett meddelande mottags. Detta gör vanligtvis att ikonen i aktivitetsfältet animeras på något sätt. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4241,7 +4643,7 @@ Detta gör vanligtvis att ikonen i aktivitetsfältet animeras på något sätt.< - + 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. @@ -4279,7 +4681,7 @@ Only affects messages in encrypted chats. Påverkar endast krypterade chattar. - + When the window loses focus, the timeline will be blurred. @@ -4332,7 +4734,7 @@ This setting will take effect upon restart. - + Select a file Välj en fil @@ -4484,7 +4886,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday Igår @@ -4538,7 +4940,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip Du skickade ett ljudklipp @@ -4599,16 +5001,28 @@ This setting will take effect upon restart. + You: %1 Du: %1 - + + %1: %2 %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message Du skickade ett krypterat meddelande @@ -4647,6 +5061,16 @@ This setting will take effect upon restart. %1 ended a call %1 lade på + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_vi.ts b/resources/langs/nheko_vi.ts index a0cc6b59..6dd6027e 100644 --- a/resources/langs/nheko_vi.ts +++ b/resources/langs/nheko_vi.ts @@ -89,12 +89,12 @@ - + #new-alias:server.tld - + Add @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -207,7 +207,7 @@ CallManager - + Entire screen @@ -221,22 +221,34 @@ - + Invited user: %1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. - + Failed to open database, logging out! - + Knock on room @@ -262,12 +274,12 @@ - + Confirm invite - + Do you really want to invite %1 (%2)? @@ -312,12 +324,12 @@ - + Do you really want to start a private chat with %1? - + Cache migration failed! @@ -332,7 +344,7 @@ - + Failed to restore OLM account. Please login again. @@ -344,13 +356,13 @@ - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. - + Please try to login again: %1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: - + Favourites @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: - + Upload of '%1' failed @@ -1165,7 +1476,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room @@ -1244,7 +1555,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org @@ -1350,7 +1661,7 @@ Example: https://server.my:8787 MessageDelegate - + %1 removed a message @@ -1415,27 +1726,48 @@ Example: https://server.my:8787 - + + %1 rejected the call. + + + + + %1 select answer + + + + + %1 is negotiating the call... - + Allow them in - + %1 answered the call. - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 changed the parent communities for this room. - + %1 ended the call. @@ -1453,7 +1785,12 @@ Example: https://server.my:8787 - + + Already on a call + + + + Send a file @@ -1463,7 +1800,7 @@ Example: https://server.my:8787 - + Stickers @@ -1486,7 +1823,7 @@ Example: https://server.my:8787 MessageView - + Edit @@ -1516,7 +1853,7 @@ Example: https://server.my:8787 - + Reason for removal @@ -1692,8 +2029,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message @@ -1709,7 +2046,7 @@ Example: https://server.my:8787 - + %1 replied to a message @@ -1892,7 +2229,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 @@ -1908,7 +2245,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events @@ -2077,6 +2414,11 @@ Example: https://server.my:8787 Hang up a call + + + Reject a call + + Change the room emotes @@ -2094,7 +2436,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. @@ -2136,6 +2478,21 @@ Example: https://server.my:8787 type + + + Respond + + + + + Send + + + + + Write a message... + + ReadReceipts @@ -2148,7 +2505,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 @@ -2222,7 +2579,7 @@ Example: https://server.my:8787 - + Autodiscovery failed. Received malformed response. @@ -2316,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -2340,6 +2697,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room @@ -2747,7 +3109,7 @@ Example: https://server.my:8787 - + Failed to enable encryption: %1 @@ -2881,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -2977,7 +3339,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 @@ -3090,19 +3452,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 - + Failed to encrypt event, sending aborted! - + Save image @@ -3122,7 +3484,7 @@ If you choose verify, you need to have the other device available. If you choose - + %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.) @@ -3385,7 +3747,7 @@ Reason: %4 - + %2 revoked the invite to %1. @@ -3445,17 +3807,17 @@ Reason: %4 - + You joined this room. - + %1 made this room require an invitation to join. - + %1 invited %2. @@ -3489,7 +3851,7 @@ Reason: %4 TimelineRow - + Edited @@ -3502,12 +3864,12 @@ Reason: %4 TimelineView - + No room open - + No preview available @@ -3552,22 +3914,22 @@ Reason: %4 TopBar - + Back to room list - + No room selected - + In %1 - + Show room members. @@ -3587,12 +3949,17 @@ Reason: %4 - + Show or hide pinned messages - + + Search this room + + + + Room options @@ -3621,6 +3988,11 @@ Reason: %4 Unpin + + + Enter search query + + TrayIcon @@ -3663,7 +4035,7 @@ Reason: %4 UploadBox - + Upload %n file(s) @@ -3797,8 +4169,8 @@ Reason: %4 UserSettings - - + + Default @@ -3806,7 +4178,7 @@ Reason: %4 UserSettingsModel - + Theme @@ -3840,6 +4212,11 @@ Reason: %4 Send messages as Markdown + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3915,8 +4292,18 @@ Reason: %4 Decrypt messages in sidebar + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen @@ -4106,7 +4493,7 @@ Reason: %4 - + Default @@ -4148,6 +4535,11 @@ Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds When disabled, all messages are sent as a plain text. + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4187,9 +4579,19 @@ OFF - square, ON - circle. + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4201,23 +4603,23 @@ OFF - square, ON - circle. - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4227,7 +4629,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4264,7 +4666,7 @@ Only affects messages in encrypted chats. - + When the window loses focus, the timeline will be blurred. @@ -4317,7 +4719,7 @@ This setting will take effect upon restart. - + Select a file @@ -4469,7 +4871,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday @@ -4523,7 +4925,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip @@ -4584,16 +4986,28 @@ This setting will take effect upon restart. + You: %1 - + + %1: %2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message @@ -4632,6 +5046,16 @@ This setting will take effect upon restart. %1 ended a call + + + You rejected a call + + + + + %1 rejected a call + + utils diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index 5ae785c3..7a241c94 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -89,12 +89,12 @@ 移除此别名 - + #new-alias:server.tld #new-alias:server.tld - + Add 添加 @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 和另外 %n 人 @@ -207,7 +207,7 @@ CallManager - + Entire screen 整个屏幕 @@ -221,22 +221,34 @@ - + Invited user: %1 邀请已发送:%1 - + + Confirm logout + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. 当前设备中的缓存比Nheko支持的版本更新,请更新Nheko或清理缓存。 - + Failed to open database, logging out! 无法打开数据库,账户将登出! - + Knock on room 请求加入聊天室 @@ -262,12 +274,12 @@ - + Confirm invite 确认邀请 - + Do you really want to invite %1 (%2)? 你真的想要邀请 %1 (%2) 吗? @@ -312,12 +324,12 @@ 解封用户:%1 - + Do you really want to start a private chat with %1? 是否确认与 %1 开始私密聊天? - + Cache migration failed! 缓存迁移失败! @@ -332,7 +344,7 @@ 无法兼容缓存版本 - + Failed to restore OLM account. Please login again. 恢复 OLM 账户失败。请重新登录。 @@ -344,13 +356,13 @@ 恢复保存的数据失败。请重新登录。 - + Failed to setup encryption keys. Server response: %1 %2. Please try again later. 未能设置加密密钥。服务器响应:%1 %2。请稍后再试。 - + Please try to login again: %1 请尝试再次登录:%1 @@ -411,6 +423,305 @@ You may optionally provide a reason for others to accept your knock: 网络未连接 + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + CommunitiesList @@ -457,7 +768,7 @@ You may optionally provide a reason for others to accept your knock: 显示直接聊天。 - + Favourites 收藏 @@ -646,7 +957,7 @@ You may optionally provide a reason for others to accept your knock: CrossSigningSecrets - + Decrypt secrets 解密密钥 @@ -890,7 +1201,7 @@ You may optionally provide a reason for others to accept your knock: HiddenEvents - + Failed to set hidden events: %1 未能设置隐藏事件:%1 @@ -1105,7 +1416,7 @@ You may optionally provide a reason for others to accept your knock: 所有文件 (*) - + Upload of '%1' failed 上传 “%1” 失败 @@ -1165,7 +1476,7 @@ You may optionally provide a reason for others to accept your knock: LeaveRoomDialog - + Leave room 离开聊天室 @@ -1245,7 +1556,7 @@ Example: https://server.my:8787 - + You have entered an invalid Matrix ID e.g @joe:matrix.org 你输入了无效的Matrix ID 例如 @joe:matrix.org @@ -1351,7 +1662,17 @@ Example: https://server.my:8787 MessageDelegate - + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + %1 removed a message %1 移除了一条消息 @@ -1425,18 +1746,29 @@ Example: https://server.my:8787 %1 answered the call. %1 接听了通话。 + + + %1 rejected the call. + + + + + %1 select answer + + %1 ended the call. %1 已结束通话。 + %1 is negotiating the call... %1 正在接通中... - + Allow them in 允许加入 @@ -1454,7 +1786,12 @@ Example: https://server.my:8787 开始通话 - + + Already on a call + + + + Send a file 发送文件 @@ -1464,7 +1801,7 @@ Example: https://server.my:8787 写一条消息… - + Stickers 贴纸 @@ -1487,7 +1824,7 @@ Example: https://server.my:8787 MessageView - + Edit 编辑 @@ -1517,7 +1854,7 @@ Example: https://server.my:8787 选项 - + Reason for removal 移除原因 @@ -1693,8 +2030,8 @@ Example: https://server.my:8787 NotificationsManager - - + + %1 sent an encrypted message %1 发送了一条加密消息 @@ -1710,7 +2047,7 @@ Example: https://server.my:8787 %1 回复了一条加密消息 - + %1 replied to a message %1 回复了一条消息 @@ -1893,7 +2230,7 @@ Example: https://server.my:8787 PowerLevels - + Failed to update powerlevel: %1 未能更新权限等级:%1 @@ -1909,7 +2246,7 @@ Example: https://server.my:8787 PowerlevelsTypeListModel - + Other events 其他事件 @@ -2078,6 +2415,11 @@ Example: https://server.my:8787 Hang up a call 挂断通话 + + + Reject a call + + Change the room emotes @@ -2095,7 +2437,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. @@ -2137,6 +2479,21 @@ Example: https://server.my:8787 type 类型 + + + Respond + + + + + Send + 发送 + + + + Write a message... + 写一条消息… + ReadReceipts @@ -2149,7 +2506,7 @@ Example: https://server.my:8787 ReadReceiptsModel - + Yesterday, %1 昨天,%1 @@ -2223,7 +2580,7 @@ Example: https://server.my:8787 注册 - + Autodiscovery failed. Received malformed response. 自动发现失败。收到格式错误的回复。 @@ -2317,7 +2674,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored 没有存储版本 @@ -2341,6 +2698,11 @@ Example: https://server.my:8787 + Room settings + + + + Leave room 离开聊天室 @@ -2749,7 +3111,7 @@ Example: https://server.my:8787 显示更多 - + Failed to enable encryption: %1 未能启用加密:%1 @@ -2883,7 +3245,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage 未能连接秘密存储 @@ -2981,7 +3343,7 @@ If you choose verify, you need to have the other device available. If you choose SingleImagePackModel - + Failed to update image pack: %1 未能更新表情包:%1 @@ -3094,19 +3456,19 @@ If you choose verify, you need to have the other device available. If you choose TimelineModel - + Message redaction failed: %1 删除消息失败:%1 - + Failed to encrypt event, sending aborted! 未能加密事件,发送中止! - + Save image 保存图像 @@ -3126,7 +3488,7 @@ If you choose verify, you need to have the other device available. If you choose 保存文件 - + %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.) @@ -3390,7 +3752,7 @@ Reason: %4 原因:%4 - + %2 revoked the invite to %1. %2 撤销了对 %1 的邀请。 @@ -3450,17 +3812,17 @@ Reason: %4 %1 删除了其加入请求。 - + You joined this room. 你已加入此聊天室。 - + %1 made this room require an invitation to join. - + %1 invited %2. %1 邀请了 %2。 @@ -3494,7 +3856,7 @@ Reason: %4 TimelineRow - + Edited 已编辑 @@ -3507,12 +3869,12 @@ Reason: %4 TimelineView - + No room open 未打开聊天室 - + No preview available 预览不可用 @@ -3557,22 +3919,22 @@ Reason: %4 TopBar - + Back to room list 返回聊天室列表 - + No room selected 未选择聊天室 - + In %1 - + Show room members. 显示聊天室成员。 @@ -3592,12 +3954,17 @@ Reason: %4 此聊天室包含未经验证的设备! - + Show or hide pinned messages 显示或隐藏置顶消息 - + + Search this room + + + + Room options 聊天室选项 @@ -3626,6 +3993,11 @@ Reason: %4 Unpin 取消置顶 + + + Enter search query + + TrayIcon @@ -3668,7 +4040,7 @@ Reason: %4 UploadBox - + Upload %n file(s) 上传文件 @@ -3802,8 +4174,8 @@ Reason: %4 UserSettings - - + + Default 默认 @@ -3811,7 +4183,7 @@ Reason: %4 UserSettingsModel - + Theme 主题 @@ -3845,6 +4217,11 @@ Reason: %4 Send messages as Markdown 以 Markdown 格式发送消息 + + + Use shift+enter to send and enter to start a new line + + Enable message bubbles @@ -3920,8 +4297,18 @@ Reason: %4 Decrypt messages in sidebar 解密侧边栏中的消息 + + + Decrypt notifications + + + Display fancy effects such as confetti + + + + Privacy Screen 隐私屏幕 @@ -4111,7 +4498,7 @@ Reason: %4 通过 D-Bus 公开聊天室信息 - + Default 默认 @@ -4156,6 +4543,11 @@ When disabled, all messages are sent as a plain text. 允许在消息中使用 Markdown。 禁用时,所有消息都以纯文本形式发送。 + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + Messages get a bubble background. This also triggers some layout changes (WIP). @@ -4197,9 +4589,19 @@ OFF - 方形,ON - 圆形。 + Decrypt messages shown in notifications for encrypted chats. + + + + Choose where to show the total number of notifications contained within a community or tag. + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. @@ -4211,24 +4613,24 @@ OFF - 方形,ON - 圆形。 验证你自己的设备的密钥。如果它已被缓存,验证你的设备之一将为你的所有其他设备和已验证你的用户标记它为已验证。 - + Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion. 收到消息时显示通知。 这通常会导致任务栏中的应用程序图标以某种方式呈现动画效果。 - + Communities sidebar - + Show message counts for communities and tags - + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized @@ -4238,7 +4640,7 @@ This usually causes the application icon in the task bar to animate in some fash - + 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. @@ -4280,7 +4682,7 @@ Only affects messages in encrypted chats. 仅影响加密聊天中的消息。 - + When the window loses focus, the timeline will be blurred. 当窗口失去焦点时,时间线将 @@ -4336,7 +4738,7 @@ This setting will take effect upon restart. 这个设置将在重新启动时生效。 - + Select a file 选择一个文件 @@ -4488,7 +4890,7 @@ This setting will take effect upon restart. descriptiveTime - + Yesterday 昨天 @@ -4542,7 +4944,7 @@ This setting will take effect upon restart. message-description sent: - + You sent an audio clip 你发送了一个音频片段 @@ -4603,16 +5005,28 @@ This setting will take effect upon restart. + You: %1 你:%1 - + + %1: %2 %1:%2 - + + You sent some confetti + + + + + %1 sent some confetti + + + + You sent an encrypted message 你发送了一条加密消息 @@ -4651,6 +5065,16 @@ This setting will take effect upon restart. %1 ended a call %1 结束了通话 + + + You rejected a call + + + + + %1 rejected a call + + utils From f98b289ba2f8241ebe33da3e4aac9a6e71ca5c3e Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 27 Dec 2022 01:40:03 +0100 Subject: [PATCH 72/84] Show invite reason in the UI (hidden by default) --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- resources/qml/TimelineView.qml | 39 ++++++++++++++++++++++++++++++++ src/Cache.cpp | 29 +++++++++++++++++++++++- src/CacheStructs.h | 1 + src/Cache_p.h | 8 ++++--- src/timeline/RoomlistModel.cpp | 14 ++++++++++++ src/timeline/RoomlistModel.h | 4 +++- 8 files changed, 92 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3af559a6..8658b228 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -595,7 +595,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 6252a4a902053fb227b61e65e76c1c29bc905a45 + GIT_TAG d187c63a27710fa87a44ab44d43b7cfa2023132a ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index a150f97b..e8b6e9f2 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -182,7 +182,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: 6252a4a902053fb227b61e65e76c1c29bc905a45 + - commit: d187c63a27710fa87a44ab44d43b7cfa2023132a #tag: v0.8.2 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 14b74e68..dcbcc87e 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -170,6 +170,7 @@ Item { property string roomName: room ? room.roomName : (roomPreview ? roomPreview.roomName : "") property string roomTopic: room ? room.roomTopic : (roomPreview ? roomPreview.roomTopic : "") property string avatarUrl: room ? room.roomAvatarUrl : (roomPreview ? roomPreview.roomAvatarUrl : "") + property string reason: roomPreview ? roomPreview.reason : "" visible: room != null && room.isSpace || roomPreview != null enabled: visible @@ -277,6 +278,44 @@ Item { onClicked: Rooms.declineInvite(roomPreview.roomid) } + ScrollView { + id: reasonField + property bool showReason: false + + Layout.alignment: Qt.AlignHCenter + Layout.fillWidth: true + Layout.leftMargin: Nheko.paddingLarge + Layout.rightMargin: Nheko.paddingLarge + visible: preview.reason !== "" && showReason + + TextArea { + text: TimelineManager.escapeEmoji(preview.reason) + wrapMode: TextEdit.WordWrap + textFormat: TextEdit.RichText + readOnly: true + background: null + selectByMouse: true + color: Nheko.colors.text + horizontalAlignment: TextEdit.AlignHCenter + } + + } + + Button { + id: showReasonButton + + Layout.alignment: Qt.AlignHCenter + //Layout.fillWidth: true + Layout.leftMargin: Nheko.paddingLarge + Layout.rightMargin: Nheko.paddingLarge + + visible: preview.reason !== "" + text: reasonField.showReason ? qsTr("Hide invite reason") : qsTr("Show invite reason") + onClicked: { + reasonField.showReason = !reasonField.showReason; + } + } + Item { visible: room != null Layout.preferredHeight: Math.ceil(fontMetrics.lineSpacing * 2) diff --git a/src/Cache.cpp b/src/Cache.cpp index 809d5e17..5d87f9f2 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -2018,7 +2018,8 @@ Cache::saveInvite(lmdb::txn &txn, auto display_name = msg->content.display_name.empty() ? msg->state_key : msg->content.display_name; - MemberInfo tmp{display_name, msg->content.avatar_url, msg->content.is_direct}; + MemberInfo tmp{ + display_name, msg->content.avatar_url, msg->content.reason, msg->content.is_direct}; membersdb.put(txn, msg->state_key, nlohmann::json(tmp).dump()); } else { @@ -3144,6 +3145,29 @@ Cache::getMembers(const std::string &room_id, std::size_t startIndex, std::size_ } } +std::optional +Cache::getInviteMember(const std::string &room_id, const std::string &user_id) +{ + if (user_id.empty() || !env_.handle()) + return std::nullopt; + + try { + auto txn = ro_txn(env_); + + auto membersdb = getInviteMembersDb(txn, room_id); + + std::string_view info; + if (membersdb.get(txn, user_id, info)) { + MemberInfo m = nlohmann::json::parse(info).get(); + return m; + } + } catch (std::exception &e) { + nhlog::db()->warn( + "Failed to read member ({}) in invite room ({}): {}", user_id, room_id, e.what()); + } + return std::nullopt; +} + std::vector Cache::getMembersFromInvite(const std::string &room_id, std::size_t startIndex, std::size_t len) { @@ -4959,6 +4983,8 @@ to_json(nlohmann::json &j, const MemberInfo &info) j["avatar_url"] = info.avatar_url; if (info.is_direct) j["is_direct"] = info.is_direct; + if (!info.reason.empty()) + j["reason"] = info.reason; } void @@ -4967,6 +4993,7 @@ from_json(const nlohmann::json &j, MemberInfo &info) info.name = j.at("name").get(); info.avatar_url = j.at("avatar_url").get(); info.is_direct = j.value("is_direct", false); + info.reason = j.value("reason", ""); } void diff --git a/src/CacheStructs.h b/src/CacheStructs.h index 1f035fee..535807fe 100644 --- a/src/CacheStructs.h +++ b/src/CacheStructs.h @@ -107,6 +107,7 @@ struct MemberInfo { std::string name; std::string avatar_url; + std::string reason; bool is_direct = false; }; diff --git a/src/Cache_p.h b/src/Cache_p.h index 5a42c7f9..6712e48e 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -244,6 +244,8 @@ public: //! Check if a user is a member of the room. bool isRoomMember(const std::string &user_id, const std::string &room_id); + std::optional + getInviteMember(const std::string &room_id, const std::string &user_id); // // Outbound Megolm Sessions @@ -396,7 +398,7 @@ private: e->content.display_name.empty() ? e->state_key : e->content.display_name; // Lightweight representation of a member. - MemberInfo tmp{display_name, e->content.avatar_url}; + MemberInfo tmp{display_name, e->content.avatar_url, e->content.reason}; membersdb.put(txn, e->state_key, nlohmann::json(tmp).dump()); break; @@ -406,8 +408,8 @@ private: break; } } - - return; + // fallthrough to also store it as state event to eventually migrate away from a + // separate members db. } else if (std::holds_alternative>(event)) { setEncryptedRoom(txn, room_id); return; diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index 82b3fc3d..827cbed1 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -723,6 +723,13 @@ RoomlistModel::getRoomPreviewById(QString roomid) const if (invites.contains(roomid)) { i = invites.value(roomid); preview.isInvite_ = true; + + auto member = cache::client()->getInviteMember(roomid.toStdString(), + http::client()->user_id().to_string()); + + if (member) { + preview.reason_ = QString::fromStdString(member->reason); + } } else { i = previewedRooms.value(roomid); preview.isInvite_ = false; @@ -769,6 +776,13 @@ RoomlistModel::setCurrentRoom(const QString &roomid) if (invites.contains(roomid)) { i = invites.value(roomid); p.isInvite_ = true; + + auto member = cache::client()->getInviteMember(roomid.toStdString(), + http::client()->user_id().to_string()); + + if (member) { + p.reason_ = QString::fromStdString(member->reason); + } } else { i = previewedRooms.value(roomid); p.isInvite_ = false; diff --git a/src/timeline/RoomlistModel.h b/src/timeline/RoomlistModel.h index 0eb57547..0d52102d 100644 --- a/src/timeline/RoomlistModel.h +++ b/src/timeline/RoomlistModel.h @@ -31,6 +31,7 @@ class RoomPreview Q_PROPERTY(QString roomName READ roomName CONSTANT) Q_PROPERTY(QString roomTopic READ roomTopic CONSTANT) Q_PROPERTY(QString roomAvatarUrl READ roomAvatarUrl CONSTANT) + Q_PROPERTY(QString reason READ reason CONSTANT) Q_PROPERTY(bool isInvite READ isInvite CONSTANT) public: @@ -40,9 +41,10 @@ public: QString roomName() const { return roomName_; } QString roomTopic() const { return roomTopic_; } QString roomAvatarUrl() const { return roomAvatarUrl_; } + QString reason() const { return reason_; } bool isInvite() const { return isInvite_; } - QString roomid_, roomName_, roomAvatarUrl_, roomTopic_; + QString roomid_, roomName_, roomAvatarUrl_, roomTopic_, reason_; bool isInvite_ = false; }; From 6529240be8d241d680ebaa1ee849ecb15b441a4e Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 27 Dec 2022 04:30:32 +0100 Subject: [PATCH 73/84] Update flat-manager-client --- scripts/flat-manager-client | 123 ++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 12 deletions(-) diff --git a/scripts/flat-manager-client b/scripts/flat-manager-client index 99f23b70..d50b5ec1 100755 --- a/scripts/flat-manager-client +++ b/scripts/flat-manager-client @@ -31,7 +31,8 @@ from functools import reduce from urllib.parse import urljoin, urlparse, urlsplit, urlunparse, urlunsplit import aiohttp -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed +import aiohttp.client_exceptions +from tenacity import retry, retry_if_exception_type, stop_after_delay, wait_random_exponential import gi gi.require_version('OSTree', '1.0') @@ -55,7 +56,7 @@ class ApiError(Exception): self.status = response.status try: - self.body = json.loads(response); + self.body = json.loads(body) except: self.body = {"status": self.status, "error-type": "no-error", "message": "No json error details from server"} @@ -71,6 +72,10 @@ class ApiError(Exception): return "Api call to %s failed with status %d, details: %s" % (self.url, self.status, self.body) +TENACITY_RETRY_EXCEPTIONS = (retry_if_exception_type(aiohttp.client_exceptions.ServerDisconnectedError) | retry_if_exception_type(ApiError) | retry_if_exception_type(aiohttp.client_exceptions.ServerConnectionError)) +TENACITY_STOP_AFTER = stop_after_delay(300) +TENACITY_WAIT_BETWEEN = wait_random_exponential(multiplier=1, max=60) + # This is similar to the regular payload, but opens the file lazily class AsyncNamedFilePart(aiohttp.payload.Payload): def __init__(self, @@ -181,6 +186,13 @@ def chunks(l, n): for i in range(0, len(l), n): yield l[i:i + n] + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def missing_objects(session, build_url, token, wanted): missing=[] for chunk in chunks(wanted, 2000): @@ -199,6 +211,12 @@ async def missing_objects(session, build_url, token, wanted): missing.extend(data["missing"]) return missing +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=(retry_if_exception_type(ApiError) | retry_if_exception_type(aiohttp.client_exceptions.ServerDisconnectedError)), + reraise=True, +) async def upload_files(session, build_url, token, files): if len(files) == 0: return @@ -212,6 +230,7 @@ async def upload_files(session, build_url, token, files): if resp.status != 200: raise ApiError(resp, await resp.text()) + async def upload_deltas(session, repo_path, build_url, token, deltas, refs, ignore_delta): if not len(deltas): return @@ -258,6 +277,13 @@ async def upload_objects(session, repo_path, build_url, token, objects): # Upload any remainder await upload_files(session, build_url, token, req) + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def create_ref(session, build_url, token, ref, commit): print("Creating ref %s with commit %s" % (ref, commit)) resp = await session.post(build_url + "/build_ref", headers={'Authorization': 'Bearer ' + token}, json= { "ref": ref, "commit": commit} ) @@ -268,6 +294,13 @@ async def create_ref(session, build_url, token, ref, commit): data = await resp.json() return data + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def add_extra_ids(session, build_url, token, extra_ids): print("Adding extra ids %s" % (extra_ids)) resp = await session.post(build_url + "/add_extra_ids", headers={'Authorization': 'Bearer ' + token}, json= { "ids": extra_ids} ) @@ -278,6 +311,13 @@ async def add_extra_ids(session, build_url, token, extra_ids): data = await resp.json() return data + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def get_build(session, build_url, token): resp = await session.get(build_url, headers={'Authorization': 'Bearer ' + token}) if resp.status != 200: @@ -290,6 +330,13 @@ def reparse_job_results(job): job["results"] = json.loads(job.get("results", "{}")) return job + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def get_job(session, job_url, token): resp = await session.get(job_url, headers={'Authorization': 'Bearer ' + token}, json={}) async with resp: @@ -298,6 +345,13 @@ async def get_job(session, job_url, token): data = await resp.json() return data + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def wait_for_job(session, job_url, token): reported_delay = False old_job_status = 0 @@ -366,6 +420,13 @@ async def wait_for_job(session, job_url, token): sleep_time=60 time.sleep(sleep_time) + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def commit_build(session, build_url, eol, eol_rebase, token_type, wait, token): print("Committing build %s" % (build_url)) json = { @@ -390,15 +451,24 @@ async def commit_build(session, build_url, eol, eol_rebase, token_type, wait, to job["location"] = job_url return job + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def publish_build(session, build_url, wait, token): print("Publishing build %s" % (build_url)) resp = await session.post(build_url + "/publish", headers={'Authorization': 'Bearer ' + token}, json= { } ) async with resp: if resp.status == 400: - body = await resp.text() + body = await resp.json() try: - msg = json.loads(body) - if msg.get("current-state", "") == "published": + if isinstance(body, str): + body = json.loads(body) + + if body.get("current-state") == "published": print("the build has been already published") return {} except: @@ -418,6 +488,13 @@ async def publish_build(session, build_url, wait, token): job["location"] = job_url return job + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def purge_build(session, build_url, token): print("Purging build %s" % (build_url)) resp = await session.post(build_url + "/purge", headers={'Authorization': 'Bearer ' + token}, json= {} ) @@ -426,6 +503,13 @@ async def purge_build(session, build_url, token): raise ApiError(resp, await resp.text()) return await resp.json() + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def create_token(session, manager_url, token, name, subject, scope, duration): token_url = urljoin(manager_url, "api/v1/token_subset") resp = await session.post(token_url, headers={'Authorization': 'Bearer ' + token}, json = { @@ -442,11 +526,23 @@ async def create_token(session, manager_url, token, name, subject, scope, durati def get_object_multipart(repo_path, object): return AsyncNamedFilePart(repo_path + "/objects/" + object[:2] + "/" + object[2:], filename=object) + +@retry( + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, + reraise=True, +) async def create_command(session, args): build_url = urljoin(args.manager_url, "api/v1/build") - resp = await session.post(build_url, headers={'Authorization': 'Bearer ' + args.token}, json={ + json = { "repo": args.repo - }) + } + if args.app_id is not None: + json["app-id"] = args.app_id + if args.public_download is not None: + json["public-download"] = args.public_download + resp = await session.post(build_url, headers={'Authorization': 'Bearer ' + args.token}, json=json) async with resp: if resp.status != 200: raise ApiError(resp, await resp.text()) @@ -475,9 +571,9 @@ def build_url_to_api(build_url): return urlunparse((parts.scheme, parts.netloc, path, None, None, None)) @retry( - stop=stop_after_attempt(6), - wait=wait_fixed(10), - retry=retry_if_exception_type(ApiError), + stop=TENACITY_STOP_AFTER, + wait=TENACITY_WAIT_BETWEEN, + retry=TENACITY_RETRY_EXCEPTIONS, reraise=True, ) async def push_command(session, args): @@ -630,6 +726,9 @@ if __name__ == '__main__': create_parser = subparsers.add_parser('create', help='Create new build') create_parser.add_argument('manager_url', help='remote repo manager url') create_parser.add_argument('repo', help='repo name') + create_parser.add_argument('app_id', nargs='?', help='app ID') + create_parser.add_argument('--public_download', action='store_true', default=None, help='allow public read access to the build repo') + create_parser.add_argument('--no_public_download', action='store_false', dest='public_download', default=None, help='allow public read access to the build repo') create_parser.set_defaults(func=create_command) push_parser = subparsers.add_parser('push', help='Push to repo manager') @@ -717,8 +816,7 @@ if __name__ == '__main__': res = 1 output = None try: - loop = asyncio.get_event_loop() - result = loop.run_until_complete(run_with_session(args)) + result = asyncio.run(run_with_session(args)) output = { "command": args.subparser_name, @@ -770,3 +868,4 @@ if __name__ == '__main__': f.write("\n") f.close() exit(res) + From 01915360b4edc4e4c82d2f79457859c649b7b1d2 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 27 Dec 2022 16:15:49 +0100 Subject: [PATCH 74/84] Fix state reset command --- src/Cache.cpp | 8 +++++++- src/Cache_p.h | 4 +++- src/timeline/TimelineModel.cpp | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Cache.cpp b/src/Cache.cpp index 5d87f9f2..41b84e11 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -1669,7 +1669,7 @@ Cache::calculateRoomReadStatus(const std::string &room_id) } void -Cache::updateState(const std::string &room, const mtx::responses::StateEvents &state) +Cache::updateState(const std::string &room, const mtx::responses::StateEvents &state, bool wipe) { auto txn = lmdb::txn::begin(env_); auto statesdb = getStatesDb(txn, room); @@ -1677,6 +1677,12 @@ Cache::updateState(const std::string &room, const mtx::responses::StateEvents &s auto membersdb = getMembersDb(txn, room); auto eventsDb = getEventsDb(txn, room); + if (wipe) { + membersdb.drop(txn); + statesdb.drop(txn); + stateskeydb.drop(txn); + } + saveStateEvents(txn, statesdb, stateskeydb, membersdb, eventsDb, room, state.events); RoomInfo updatedInfo; diff --git a/src/Cache_p.h b/src/Cache_p.h index 6712e48e..40ce6e5c 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -118,7 +118,9 @@ public: std::size_t len = 30); size_t memberCount(const std::string &room_id); - void updateState(const std::string &room, const mtx::responses::StateEvents &state); + void updateState(const std::string &room, + const mtx::responses::StateEvents &state, + bool wipe = false); void saveState(const mtx::responses::Sync &res); bool isInitialized(); bool isDatabaseReady() { return databaseReady_ && isInitialized(); } diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 62dbdae6..46f8e57c 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -496,7 +496,7 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj showEventTimer.callOnTimeout(this, &TimelineModel::scrollTimerEvent); connect(this, &TimelineModel::newState, this, [this](mtx::responses::StateEvents events_) { - cache::client()->updateState(room_id_.toStdString(), events_); + cache::client()->updateState(room_id_.toStdString(), events_, true); this->syncState({std::move(events_.events)}); }); } From 2577c93bb684ec9e2f714ee14d4ee1f30cee7c39 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 27 Dec 2022 16:19:59 +0100 Subject: [PATCH 75/84] Revert storing members in statesdb for now --- src/Cache_p.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Cache_p.h b/src/Cache_p.h index 40ce6e5c..7b3bf8b0 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -410,8 +410,10 @@ private: break; } } - // fallthrough to also store it as state event to eventually migrate away from a - // separate members db. + + // BUG(Nico): Ideally we would fall through and store this in the database, but it seems + // to currently corrupt the db sometimes, so... let's find that bug first! + return; } else if (std::holds_alternative>(event)) { setEncryptedRoom(txn, room_id); return; From 5bf315687ae93d00ba62c8b14cc95c1f6b2a10f5 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 28 Dec 2022 17:39:03 +0100 Subject: [PATCH 76/84] Update english translation properly --- resources/langs/nheko_ca.ts | 20 +++- resources/langs/nheko_cs.ts | 20 +++- resources/langs/nheko_de.ts | 20 +++- resources/langs/nheko_el.ts | 20 +++- resources/langs/nheko_en.ts | 188 ++++++++++++++++--------------- resources/langs/nheko_eo.ts | 20 +++- resources/langs/nheko_es.ts | 20 +++- resources/langs/nheko_et.ts | 20 +++- resources/langs/nheko_fi.ts | 20 +++- resources/langs/nheko_fr.ts | 20 +++- resources/langs/nheko_hu.ts | 20 +++- resources/langs/nheko_id.ts | 20 +++- resources/langs/nheko_ie.ts | 20 +++- resources/langs/nheko_it.ts | 20 +++- resources/langs/nheko_ja.ts | 20 +++- resources/langs/nheko_ml.ts | 20 +++- resources/langs/nheko_nl.ts | 20 +++- resources/langs/nheko_pl.ts | 20 +++- resources/langs/nheko_pt_BR.ts | 20 +++- resources/langs/nheko_pt_PT.ts | 20 +++- resources/langs/nheko_ro.ts | 20 +++- resources/langs/nheko_ru.ts | 20 +++- resources/langs/nheko_si.ts | 20 +++- resources/langs/nheko_sr_Latn.ts | 20 +++- resources/langs/nheko_sv.ts | 20 +++- resources/langs/nheko_vi.ts | 20 +++- resources/langs/nheko_zh_CN.ts | 20 +++- 27 files changed, 490 insertions(+), 218 deletions(-) diff --git a/resources/langs/nheko_ca.ts b/resources/langs/nheko_ca.ts index 9fa2c3d7..1cbc9838 100644 --- a/resources/langs/nheko_ca.ts +++ b/resources/langs/nheko_ca.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts index 3c6bf616..5c84d910 100644 --- a/resources/langs/nheko_cs.ts +++ b/resources/langs/nheko_cs.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2677,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3251,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3887,7 +3887,7 @@ Reason: %4 - + No preview available @@ -3926,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 6f86d345..fb3ebcae 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 und %n anderer Teilnehmer @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored keine Version gespeichert @@ -3248,7 +3248,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer SecretStorage - + Failed to connect to secret storage Verbindung zum kryptografischen Speicher fehlgeschlagen @@ -3882,7 +3882,7 @@ Grund: %4 Kein Raum geöffnet - + No preview available Keine Vorschau verfügbar @@ -3920,7 +3920,17 @@ Grund: %4 Einladung ablehnen - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Zurück zur Raumliste diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index bda4af75..fd929f16 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index b919c960..1ffa6022 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 and %n other @@ -229,14 +229,16 @@ Confirm logout - + Confirm logout Because of the following reason Nheko wants to drop you to the login page: %1 If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. @@ -430,298 +432,298 @@ You may optionally provide a reason for others to accept your knock: /me <message> - + /me <message> /react <text> - + /react <text> /join (!roomid|#alias) [reason] - + /join (!roomid|#alias) [reason] /knock (!roomid|#alias) [reason] - + /knock (!roomid|#alias) [reason] /part [reason] - + /part [reason] /leave [reason] - + /leave [reason] /invite @userid [reason] - + /invite @userid [reason] /kick @userid [reason] - + /kick @userid [reason] /ban @userid [reason] - + /ban @userid [reason] /unban @userid [reason] - + /unban @userid [reason] /redact ($eventid|@userid) - + /redact ($eventid|@userid) /roomnick <displayname> - + /roomnick <displayname> /shrug [message] - + /shrug [message] /fliptable - + /fliptable /unfliptable - + /unfliptable /sovietflip - + /sovietflip /clear-timeline - + /clear-timeline /reset-state - + /reset-state /rotate-megolm-session - + /rotate-megolm-session /md [message] - + /md [message] /plain [message] - + /plain [message] /rainbow [message] - + /rainbow [message] /rainbowme [message] - + /rainbowme [message] /notice [message] - + /notice [message] /rainbownotice [message] - + /rainbownotice [message] /confetti [message] - + /confetti [message] /rainbowconfetti [message] - + /rainbowconfetti [message] /goto ($eventid|message index|matrix:r/room/e/event) - + /goto ($eventid|message index|matrix:r/room/e/event) /converttodm - + /converttodm /converttoroom - + /converttoroom Send a message expressing an action. - + Send a message expressing an action. Send <text> as a reaction when you’re replying to a message. - + Send <text> as a reaction when you’re replying to a message. Join a room. Reason is optional. - + Join a room. Reason is optional. Ask to join a room. Reason is optional. - + Ask to join a room. Reason is optional. Leave a room. Reason is optional. - + Leave a room. Reason is optional. Invite a user into the current room. Reason is optional. - + Invite a user into the current room. Reason is optional. Kick a user from the current room. Reason is optional. - + Kick a user from the current room. Reason is optional. Ban a user from the current room. Reason is optional. - + Ban a user from the current room. Reason is optional. Unban a user in the current room. Reason is optional. - + Unban a user in the current room. Reason is optional. Redact an event or all locally cached messages of a user. - + Redact an event or all locally cached messages of a user. Change your displayname in this room. - + Change your displayname in this room. ¯\_(ツ)_/¯ with an optional message. - + ¯\_(ツ)_/¯ with an optional message. (╯°□°)╯︵ ┻━┻ - + (╯°□°)╯︵ ┻━┻ ┯━┯╭( º _ º╭) - + ┯━┯╭( º _ º╭) ノ┬─┬ノ ︵ ( \o°o)\ - + ノ┬─┬ノ ︵ ( \o°o)\ Clear the currently cached messages in this room. - + Clear the currently cached messages in this room. Refetch the state in this room. - + Refetch the state in this room. Rotate the current symmetric encryption key. - + Rotate the current symmetric encryption key. Send a markdown formatted message (ignoring the global setting). - + Send a markdown formatted message (ignoring the global setting). Send an unformatted message (ignoring the global setting). - + Send an unformatted message (ignoring the global setting). Send a message in rainbow colors. - + Send a message in rainbow colors. Send /me in rainbow colors. - + Send /me in rainbow colors. Send a bot message. - + Send a bot message. Send a bot message in rainbow colors. - + Send a bot message in rainbow colors. Send a message with confetti. - + Send a message with confetti. Send a message in rainbow colors with confetti. - + Send a message in rainbow colors with confetti. Go to this event or link. - + Go to this event or link. Convert this room to a direct chat. - + Convert this room to a direct chat. Convert this direct chat into a room. - + Convert this direct chat into a room. @@ -1735,12 +1737,12 @@ Example: https://server.my:8787 %1 rejected the call. - + %1 rejected the call. %1 select answer - + %1 select answer @@ -1761,12 +1763,12 @@ Example: https://server.my:8787 This room was replaced for the following reason: %1 - + This room was replaced for the following reason: %1 Go to replacement room - + Go to replacement room @@ -1794,7 +1796,7 @@ Example: https://server.my:8787 Already on a call - + Already on a call @@ -2424,7 +2426,7 @@ Example: https://server.my:8787 Reject a call - + Reject a call @@ -2488,17 +2490,17 @@ Example: https://server.my:8787 Respond - + Respond Send - Send + Send Write a message... - Write a message… + Write a message… @@ -2680,7 +2682,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored no version stored @@ -2705,7 +2707,7 @@ Example: https://server.my:8787 Room settings - + Room settings @@ -3253,7 +3255,7 @@ Please take note that it can't be disabled afterwards. SecretStorage - + Failed to connect to secret storage Failed to connect to secret storage @@ -3887,7 +3889,7 @@ Reason: %4 No room open - + No preview available No preview available @@ -3925,7 +3927,17 @@ Reason: %4 decline invite - + + Hide invite reason + Hide invite reason + + + + Show invite reason + Show invite reason + + + Back to room list Back to room list @@ -3975,7 +3987,7 @@ Reason: %4 Search this room - + Search this room @@ -4010,7 +4022,7 @@ Reason: %4 Enter search query - + Enter search query @@ -4235,7 +4247,7 @@ Reason: %4 Use shift+enter to send and enter to start a new line - + Use shift+enter to send and enter to start a new line @@ -4315,12 +4327,12 @@ Reason: %4 Decrypt notifications - + Decrypt notifications Display fancy effects such as confetti - + Display fancy effects such as confetti @@ -4561,7 +4573,7 @@ When disabled, all messages are sent as a plain text. Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. - + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. @@ -4605,7 +4617,7 @@ OFF - square, ON - circle. Decrypt messages shown in notifications for encrypted chats. - + Decrypt messages shown in notifications for encrypted chats. @@ -4615,7 +4627,7 @@ OFF - square, ON - circle. Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. - + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. @@ -5035,12 +5047,12 @@ This setting will take effect upon restart. You sent some confetti - + You sent some confetti %1 sent some confetti - + %1 sent some confetti @@ -5085,12 +5097,12 @@ This setting will take effect upon restart. You rejected a call - + You rejected a call %1 rejected a call - + %1 rejected a call diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts index 30e35719..1a338c46 100644 --- a/resources/langs/nheko_eo.ts +++ b/resources/langs/nheko_eo.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2677,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored neniu versio konservita @@ -3249,7 +3249,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Malsukcesis konektiĝi al sekreta deponejo @@ -3885,7 +3885,7 @@ Kialo: %4 Neniu ĉambro estas malfermita - + No preview available Neniu antaŭrigardo disponeblas @@ -3923,7 +3923,17 @@ Kialo: %4 rifuzi inviton - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Reen al listo de ĉambroj diff --git a/resources/langs/nheko_es.ts b/resources/langs/nheko_es.ts index 404d4108..a2c56a3b 100644 --- a/resources/langs/nheko_es.ts +++ b/resources/langs/nheko_es.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 y %n otro @@ -2677,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored ninguna version guardada @@ -3250,7 +3250,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Hubo en error al conectarse al almacenamiento secreto @@ -3884,7 +3884,7 @@ Razón: %4 Ninguna sala abierta - + No preview available Vista previa no disponible @@ -3922,7 +3922,17 @@ Razón: %4 rechazar invitación - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list De vuelta a la lista de salas diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 0b78496c..93906143 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 ja veel %n teine kasutaja @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored salvestatud versiooni ei leidu @@ -3248,7 +3248,7 @@ Palun arvesta, et krüptimist ei saa hiljem enam välja lülitada. SecretStorage - + Failed to connect to secret storage Ühenduse loomine võtmehoidlaga ei õnnestunud @@ -3882,7 +3882,7 @@ Põhjus: %4 Ühtegi jututuba pole avatud - + No preview available Eelvaade pole saadaval @@ -3920,7 +3920,17 @@ Põhjus: %4 lükka kutse tagasi - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Tagasi jututubade loendisse diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index df590bce..f375d2c7 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 ja %n muu @@ -2679,7 +2679,7 @@ Esimerkki: https://palvelime.ni:8787 RoomInfo - + no version stored ei tallennettua versiota @@ -3252,7 +3252,7 @@ Huomaathan ettei sitä voida poistaa käytöstä myöhemmin. SecretStorage - + Failed to connect to secret storage Salattuun tallennustilaan ei saatu yhteyttä @@ -3886,7 +3886,7 @@ Syy: %4 Yhtäkään huonetta ei ole avattu - + No preview available Esikatselu ei saatavilla @@ -3924,7 +3924,17 @@ Syy: %4 kieltäydy kutsusta - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Takaisin huonelistaan diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index 840e417b..de6c65ad 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 et %n autre @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored pas de version enregistrée @@ -3248,7 +3248,7 @@ Veuillez noter qu'il ne pourra plus être désactivé par la suite. SecretStorage - + Failed to connect to secret storage Échec de la connexion au stockage des secrets @@ -3882,7 +3882,7 @@ Raison : %4 Aucun salon ouvert - + No preview available Aucune prévisualisation disponible @@ -3920,7 +3920,17 @@ Raison : %4 décliner l'invitation - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Revenir à la liste des salons diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index 3cd297f8..8d3caf70 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2673,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nincs tárolva verzió @@ -3243,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3869,7 +3869,7 @@ Reason: %4 Nincs nyitott szoba - + No preview available @@ -3906,7 +3906,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Vissza a szobák listájára diff --git a/resources/langs/nheko_id.ts b/resources/langs/nheko_id.ts index 221de332..ceaeb01c 100644 --- a/resources/langs/nheko_id.ts +++ b/resources/langs/nheko_id.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 dan %n lainnya @@ -2678,7 +2678,7 @@ Contoh: https://server.saya:8787 RoomInfo - + no version stored tidak ada versi yang disimpan @@ -3249,7 +3249,7 @@ Dicatat bahwa ini tidak dapat dinonaktifkan setelah ini. SecretStorage - + Failed to connect to secret storage Gagal menghubungkan ke penyimpanan rahasia @@ -3878,7 +3878,7 @@ Alasan: %4 Tidak ada ruangan yang dibuka - + No preview available Tidak ada tampilan yang tersedia @@ -3915,7 +3915,17 @@ Alasan: %4 tolak undangan - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Kembali ke daftar ruangan diff --git a/resources/langs/nheko_ie.ts b/resources/langs/nheko_ie.ts index 0781951e..1620f3cc 100644 --- a/resources/langs/nheko_ie.ts +++ b/resources/langs/nheko_ie.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts index 0173bccd..47ad9886 100644 --- a/resources/langs/nheko_it.ts +++ b/resources/langs/nheko_it.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nessuna versione memorizzata @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 Nessuna stanza aperta - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index 087e636f..e08b5299 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2673,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored バージョンが保存されていません @@ -3243,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3869,7 +3869,7 @@ Reason: %4 部屋が開いていません - + No preview available @@ -3906,7 +3906,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts index f239fee7..6cf6a753 100644 --- a/resources/langs/nheko_ml.ts +++ b/resources/langs/nheko_ml.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index 64508109..eb741bde 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 en %n ander @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored geen versie opgeslagen @@ -3248,7 +3248,7 @@ Wees ervan bewust dat het achteraf niet meer uitgeschakeld kan worden. SecretStorage - + Failed to connect to secret storage Verbinden met geheimopslag mislukt @@ -3882,7 +3882,7 @@ Reden: %4 Geen kamer open - + No preview available Geen voorbeeld beschikbaar @@ -3920,7 +3920,17 @@ Reden: %4 wijs uitnodiging af - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Terug naar kamerlijst diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 0ec4edf9..2791c3cd 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 i jeszcze %n inny @@ -2678,7 +2678,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored brak zapisanej wersji @@ -3253,7 +3253,7 @@ Zwróć uwagę, iż nie będzie ono mogło zostać wyłączone. SecretStorage - + Failed to connect to secret storage Błąd połączenia do menadżera sekretów @@ -3892,7 +3892,7 @@ Powód: %4 Brak otwartych pokojów - + No preview available Podgląd niedostępny @@ -3931,7 +3931,17 @@ Powód: %4 odrzuć zaproszenie - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Wróc do listy pokoi diff --git a/resources/langs/nheko_pt_BR.ts b/resources/langs/nheko_pt_BR.ts index 219454ef..7d3c6fc5 100644 --- a/resources/langs/nheko_pt_BR.ts +++ b/resources/langs/nheko_pt_BR.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts index 2aee5f15..dbfeb068 100644 --- a/resources/langs/nheko_pt_PT.ts +++ b/resources/langs/nheko_pt_PT.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 e outro %n @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nenhuma versão guardada @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage Falha ao ligar ao armazenamento secreto @@ -3880,7 +3880,7 @@ Reason: %4 Nenhuma sala aberta - + No preview available Pré-visualização não disponível @@ -3918,7 +3918,17 @@ Reason: %4 recusar convite - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Voltar à lista de salas diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts index df76a7c0..1bfa2949 100644 --- a/resources/langs/nheko_ro.ts +++ b/resources/langs/nheko_ro.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2677,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored nicio versiune stocată @@ -3251,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3887,7 +3887,7 @@ Reason: %4 Nicio cameră deschisă - + No preview available @@ -3926,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index b29a6bec..a5f3ac37 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 и ещё %n @@ -2677,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored нет сохраненной версии @@ -3251,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3887,7 +3887,7 @@ Reason: %4 Комната не выбрана - + No preview available @@ -3926,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Вернуться к списку комнат diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts index 99c6d645..8128eb91 100644 --- a/resources/langs/nheko_si.ts +++ b/resources/langs/nheko_si.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_sr_Latn.ts b/resources/langs/nheko_sr_Latn.ts index ebd079d2..a94b06a1 100644 --- a/resources/langs/nheko_sr_Latn.ts +++ b/resources/langs/nheko_sr_Latn.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2677,7 +2677,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3251,7 +3251,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3887,7 +3887,7 @@ Reason: %4 - + No preview available @@ -3926,7 +3926,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts index 6fb14a89..a5fcb931 100644 --- a/resources/langs/nheko_sv.ts +++ b/resources/langs/nheko_sv.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2675,7 +2675,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored ingen version lagrad @@ -3247,7 +3247,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3878,7 +3878,7 @@ Reason: %4 Inget rum öppet - + No preview available @@ -3916,7 +3916,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list Tillbaka till rumlista diff --git a/resources/langs/nheko_vi.ts b/resources/langs/nheko_vi.ts index 6dd6027e..51d6ffce 100644 --- a/resources/langs/nheko_vi.ts +++ b/resources/langs/nheko_vi.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) @@ -2673,7 +2673,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored @@ -3243,7 +3243,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage @@ -3869,7 +3869,7 @@ Reason: %4 - + No preview available @@ -3906,7 +3906,17 @@ Reason: %4 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index 7a241c94..a5da56f1 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -130,7 +130,7 @@ Cache - + %1 and %n other(s) %1 和另外 %n 人 @@ -2674,7 +2674,7 @@ Example: https://server.my:8787 RoomInfo - + no version stored 没有存储版本 @@ -3245,7 +3245,7 @@ Example: https://server.my:8787 SecretStorage - + Failed to connect to secret storage 未能连接秘密存储 @@ -3874,7 +3874,7 @@ Reason: %4 未打开聊天室 - + No preview available 预览不可用 @@ -3911,7 +3911,17 @@ Reason: %4 拒绝邀请 - + + Hide invite reason + + + + + Show invite reason + + + + Back to room list 返回聊天室列表 From 9dfe2248d5e33ac48cdff2a18e27caf3b2c98c3f Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 28 Dec 2022 18:42:23 +0100 Subject: [PATCH 77/84] Some german translations --- resources/langs/nheko_ca.ts | 18 +- resources/langs/nheko_cs.ts | 18 +- resources/langs/nheko_de.ts | 275 ++++++++++++++++--------------- resources/langs/nheko_el.ts | 18 +- resources/langs/nheko_en.ts | 22 +-- resources/langs/nheko_eo.ts | 18 +- resources/langs/nheko_es.ts | 18 +- resources/langs/nheko_et.ts | 18 +- resources/langs/nheko_fi.ts | 18 +- resources/langs/nheko_fr.ts | 18 +- resources/langs/nheko_hu.ts | 18 +- resources/langs/nheko_id.ts | 18 +- resources/langs/nheko_ie.ts | 18 +- resources/langs/nheko_it.ts | 18 +- resources/langs/nheko_ja.ts | 18 +- resources/langs/nheko_ml.ts | 18 +- resources/langs/nheko_nl.ts | 18 +- resources/langs/nheko_pl.ts | 18 +- resources/langs/nheko_pt_BR.ts | 18 +- resources/langs/nheko_pt_PT.ts | 18 +- resources/langs/nheko_ro.ts | 18 +- resources/langs/nheko_ru.ts | 18 +- resources/langs/nheko_si.ts | 18 +- resources/langs/nheko_sr_Latn.ts | 18 +- resources/langs/nheko_sv.ts | 18 +- resources/langs/nheko_vi.ts | 18 +- resources/langs/nheko_zh_CN.ts | 18 +- 27 files changed, 376 insertions(+), 371 deletions(-) diff --git a/resources/langs/nheko_ca.ts b/resources/langs/nheko_ca.ts index 1cbc9838..02017193 100644 --- a/resources/langs/nheko_ca.ts +++ b/resources/langs/nheko_ca.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts index 5c84d910..ecdf1824 100644 --- a/resources/langs/nheko_cs.ts +++ b/resources/langs/nheko_cs.ts @@ -233,14 +233,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -336,7 +329,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index fb3ebcae..b34d0e06 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -229,17 +229,10 @@ Confirm logout - + Abmelden bestätigen - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Das Datenbankformat auf der Festplatte ist neuer als die von dieser Nhekoversion unterstützte Version. Bitte update Nheko oder lösche die Datenbank. @@ -335,9 +328,18 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Migration des Caches fehlgeschlagen! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + Aus folgendem Grund möchte dich Nheko zurück zur Anmeldeseite schicken: +%1 +Wenn du glaubst,.dass das ein Fehler ist, dann kannst du Nheko schließen und vielleicht deine Schlüssel sichern. Von der Anmeldeseite kannst du dich mit den normalen Methoden anmelden. + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. - + Die Migration der Datenbank auf die aktuelle Version ist fehlgeschlagen. Dies kann verschiedene Gründe haben. Bitte erstelle einen Fehlereport auf https://github.com/Nheko-Reborn/nheko und versuche zwischenzeitlich eine ältere Version zu verwenden. Alternativ kannst du die Datenbank manuell löschen. @@ -371,7 +373,8 @@ If you think this is a mistake, you can close Nheko instead to possibly recover You failed to join %1. You can try to knock so that others can invite you in. Do you want to do so? You may optionally provide a reason for others to accept your knock: - + Du konntest %1 nicht betreten. Du kannst versuchen anzuklopfen, so dass andere Leute dich einladen können. Möchtest du das tun? +Du kannst zusätzlich einen Grund angeben, warum die anderen dein Anklopfen annehmen sollten: @@ -429,298 +432,298 @@ You may optionally provide a reason for others to accept your knock: /me <message> - + /me <Nachricht> /react <text> - + /react <Text> /join (!roomid|#alias) [reason] - + /join (!raumid|#alias) [Grund] /knock (!roomid|#alias) [reason] - + /knock (!raumid|#alias) [Grund] /part [reason] - + /part [Grund] /leave [reason] - + /leave [Grund] /invite @userid [reason] - + /invite @nutzerid [Grund] /kick @userid [reason] - + /kick @nutzerid [Grund] /ban @userid [reason] - + /ban @nutzerid [Grund] /unban @userid [reason] - + /unban @nutzerid [Grund] /redact ($eventid|@userid) - + /redact ($eventid|@nutzerid) /roomnick <displayname> - + /roomnick <Anzeigename> /shrug [message] - + /shrug [Nachricht] /fliptable - + /fliptable /unfliptable - + /unfliptable /sovietflip - + /sovietflip /clear-timeline - + /clear-timeline /reset-state - + /reset-state /rotate-megolm-session - + /rotate-megolm-session /md [message] - + /md [Nachricht] /plain [message] - + /plain [Nachricht] /rainbow [message] - + /rainbow [Nachricht] /rainbowme [message] - + /rainbowme [Nachricht] /notice [message] - + /notice [Nachricht] /rainbownotice [message] - + /rainbownotice [Nachricht] /confetti [message] - + /confetti [Nachricht] /rainbowconfetti [message] - + /rainbowconfetti [Nachricht] /goto ($eventid|message index|matrix:r/room/e/event) - + /goto ($eventid|Nachrichten Index|matrix:r/raumid/e/eventid) /converttodm - + /converttodm /converttoroom - + /converttoroom Send a message expressing an action. - + Sende eine Nachricht, die eine Aktion ausdrückt. Send <text> as a reaction when you’re replying to a message. - + Sende <Text> als Reaktion auf eine Nachricht anstatt als Antwort. Join a room. Reason is optional. - + Raum betreten. Ein Grund ist optional. Ask to join a room. Reason is optional. - + Anfragen einen Raum zu betreten. Ein Grund ist optional. Leave a room. Reason is optional. - + Raum verlassen. Ein Grund ist optional. Invite a user into the current room. Reason is optional. - + Einen Nutzer in diesen Raum einladen. Ein Grund ist optional. Kick a user from the current room. Reason is optional. - + Einen Nutzer aus diesem Raum werfen. Ein Grund ist optional. Ban a user from the current room. Reason is optional. - + Einen Nutzer von diesem Raum verbannen. Ein Grund ist optional. Unban a user in the current room. Reason is optional. - + Verbannung eines Nutzers aufheben. Ein Grund ist optional. Redact an event or all locally cached messages of a user. - + Eine bestimmte Nachricht oder alle lokal geladenen Nachrichten eines Nutzers löschen. Change your displayname in this room. - + Ändere deinen Anzeigenamen in diesem Raum. ¯\_(ツ)_/¯ with an optional message. - + ¯\_(ツ)_/¯ mit einer optionalen Nachricht. (╯°□°)╯︵ ┻━┻ - + (╯°□°)╯︵ ┻━┻ ┯━┯╭( º _ º╭) - + ┯━┯╭( º _ º╭) ノ┬─┬ノ ︵ ( \o°o)\ - + ノ┬─┬ノ ︵ ( \o°o)\ Clear the currently cached messages in this room. - + Lokalen Nachrichtenspeicher für diesen Raum leeren. Refetch the state in this room. - + Raumzustand für diesen Raum vom Server aktualisieren. Rotate the current symmetric encryption key. - + Den symmetrischen Nachrichtenschlüssel wechseln. Send a markdown formatted message (ignoring the global setting). - + Sende diese Nachricht als Markdown (selbst wenn die globale Einstellung Plaintext preferiert). Send an unformatted message (ignoring the global setting). - + Sende diese Nachricht unformatiert (selbst wenn die globale Einstellung Markdown preferiert). Send a message in rainbow colors. - + Sende eine Nachricht in Regenbogenfarben. Send /me in rainbow colors. - + Sende eine /me-Nachricht in Regenbogenfarben. Send a bot message. - + Sende eine Nachricht als wärst du ein Bot. Send a bot message in rainbow colors. - + Sende eine Botnachricht, aber in Regenbogenfarben. Send a message with confetti. - + Sende eine Nachricht mit Konfetti. Send a message in rainbow colors with confetti. - + Sende eine Nachricht in Regenbogenfarben mit Konfetti. Go to this event or link. - + Navigiere zu dieser Nachricht oder diesem Link. Convert this room to a direct chat. - + Verwandel diesen Raum in eine Direktnachricht. Convert this direct chat into a room. - + Verwandle diese Direktnachricht in einen normalen Chatraum. @@ -728,12 +731,12 @@ You may optionally provide a reason for others to accept your knock: Do not show notification counts for this community or tag. - + Zeige keine Benachrichtigungen für diese Gruppe oder Tag an. Hide rooms with this tag or from this community by default. - + Verstecke Räume dieser Gruppe oder dieses Tags standardmäßig. @@ -801,22 +804,22 @@ You may optionally provide a reason for others to accept your knock: Failed to update community: %1 - + Konnte diese Gruppe nicht aktualisieren: %1 Failed to delete room from community: %1 - + Konnte Raum nicht von dieser Gruppe entfernen: %1 Failed to update community for room: %1 - + Konnte Gruppe für den Raum nicht aktualisieren: %1 Failed to remove community from room: %1 - + Konnte Gruppe für den Raum nicht entfernen: %1 @@ -847,7 +850,7 @@ You may optionally provide a reason for others to accept your knock: This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below: - + Dieser Raum kann nicht direkt betreten werden. Du kanns aber anklopfen und die Personen in dem Raum können dich dann reinlassen oder auch nicht. Optional kannst du auch einen Grund angeben, warum sie das tun sollten. @@ -933,7 +936,7 @@ You may optionally provide a reason for others to accept your knock: Public rooms can be joined by anyone; private rooms need explicit invites. - + Öffentliche Räume können von jedem betreten werden. Private Räume benötigen eine Einladung. @@ -1665,12 +1668,12 @@ Example: https://server.my:8787 This room was replaced for the following reason: %1 - + Dieser Raum wurde aus folgendem Grund ersetzt: %1 Go to replacement room - + Gehe zum neuen Raum @@ -1720,7 +1723,7 @@ Example: https://server.my:8787 %1 changed the parent communities for this room. - + %1 hat die übergeordneten Gruppen für diesen Raum bearbeitet. @@ -1750,12 +1753,12 @@ Example: https://server.my:8787 %1 rejected the call. - + %1 hat den Anruf abgewiesen. %1 select answer - + %1 hat einen Anruf ausgewählt @@ -1789,7 +1792,7 @@ Example: https://server.my:8787 Already on a call - + Bereits in einem Telefonat @@ -1837,12 +1840,12 @@ Example: https://server.my:8787 Reply in thread - + In Gesprächsfaden antworten New thread - + Neuer Gesprächsfaden @@ -1894,7 +1897,7 @@ Example: https://server.my:8787 &Thread - + &Gesprächsfaden @@ -1909,7 +1912,7 @@ Example: https://server.my:8787 &Read receipts - + &Lesebestätigung @@ -2233,7 +2236,7 @@ Example: https://server.my:8787 Failed to update powerlevel: %1 - Konnte Berechtigungen nicht aktualisieren: %1 + Konnte Berechtigungen nicht aktualisieren: %1 @@ -2389,12 +2392,12 @@ Example: https://server.my:8787 Edit child communities and rooms - + Untergeordnete Gruppen und Räume ändern Change parent communities - + Übergeordnete Gruppen ändern @@ -2419,7 +2422,7 @@ Example: https://server.my:8787 Reject a call - + Anruf abweisen @@ -2440,7 +2443,7 @@ Example: https://server.my:8787 Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. - + Erstelle ein separates Profil, was mehrere Instanzen von Nheko mit verschiedenen Accounts zur gleichen Zeit ermöglicht. @@ -2458,7 +2461,7 @@ Example: https://server.my:8787 Alias for '--log-level trace'. - + Alias für '--log-level trace'. @@ -2483,17 +2486,17 @@ Example: https://server.my:8787 Respond - + Antworten Send - Senden + Senden Write a message... - Schreibe eine Nachricht… + Schreibe eine Nachricht… @@ -2548,7 +2551,7 @@ Example: https://server.my:8787 A name for this device which will be shown to others when verifying your devices. If nothing is provided a default is used. - + Ein Name für dieses Gerät, der eventuell anderen Nutzern gezeigt wird, wenn du Geräte verifizierst. Ohne Angabe wird ein Standardwert verwendet. @@ -2700,7 +2703,7 @@ Example: https://server.my:8787 Room settings - + Raumeinstellungen @@ -2740,7 +2743,7 @@ Example: https://server.my:8787 Add or remove from community... - + Zu Gruppe hinzufügen oder entfernen... @@ -3036,32 +3039,32 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer Anyone can join - + Jeder kann beitreten Allow knocking - + Anklopfen erlauben Allow joining via other rooms - + Durch andere Räume betreten Rooms to join via - + Räume die Zutritt erlauben Change the list of rooms users can join this room via. Usually this is the official community of this room. - + Ändere die Liste an Räumen, die den Zutritt erlauben. Normalerweise ist das die offizielle Gruppe dieses Raumes. Allow guests to join - + Erlaube Gästen beizutreten @@ -3076,7 +3079,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer Change what packs are enabled, remove packs, or create new ones - + Ändere welche Packungen aktiv sind, entferne oder erstelle neue Packungen. @@ -3183,7 +3186,7 @@ Die Verschlüsselung des Raumes kann nach Aktivierung nicht mehr deaktiviert wer Please enter the token which has been sent to you: - + Bitte gib das Token ein, dass dir geschickt wurde: @@ -3374,7 +3377,7 @@ Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn Add or remove from community - + Zu Gruppe hinzufügen oder entfernen @@ -3827,7 +3830,7 @@ Grund: %4 %1 made this room require an invitation to join. - + %1 hat diesen Raum nur eingeladenen Nutzern zugänglich gemacht. @@ -3871,7 +3874,7 @@ Grund: %4 Part of a thread - + Teil eines Gesprächfadens @@ -3922,12 +3925,12 @@ Grund: %4 Hide invite reason - + Einladungsgrund verstecken Show invite reason - + Einladungsgrund anzeigen @@ -3950,7 +3953,7 @@ Grund: %4 In %1 - + In %1 @@ -3980,7 +3983,7 @@ Grund: %4 Search this room - + Diesen Raum durchsuchen @@ -4015,7 +4018,7 @@ Grund: %4 Enter search query - + Suchanfrage eingeben @@ -4240,7 +4243,7 @@ Grund: %4 Use shift+enter to send and enter to start a new line - + Neuzeile mit Umschalt+Enter einfügen. @@ -4320,12 +4323,12 @@ Grund: %4 Decrypt notifications - + Benachrichtigungen entschlüsseln Display fancy effects such as confetti - + Lustige Chateffekte wie Konfetti anzeigen @@ -4566,7 +4569,7 @@ Wenn deaktiviert werden alle Nachrichten als unformatierter Text gesendet. Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. - + Erlaubt das invertieren des Verhaltens der Enter taste. Kontrolliert ob Umschalt+Enter eine Neuzeile einfügt oder die Nachricht sendet. @@ -4610,22 +4613,22 @@ AUS - Quadratisch, AN - Kreisförmig. Decrypt messages shown in notifications for encrypted chats. - + Nachrichten in Benachrichtigungen entschlüsseln in verschlüsselten Räumen. Choose where to show the total number of notifications contained within a community or tag. - + Wähle aus ob die Benachrichtigungsanzahl für Gruppen und Tags angezeigt werden oder nicht. Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. - + Manche Nachrichten lösen extra Effekte aus. Z.B. erzeugen Nachrichten, die mit /confetti gesendet wurden, einen kleinen Konfettischauer. Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. - + Teilt automatisch Schlüssel für Nachrichten mit verifizierten Nutzern (auf Anfrage), selbst wenn diese sonst keinen Zugriff darauf hätten. @@ -4642,29 +4645,31 @@ Normalerweise animiert das den Taskbaricon oder färbt das Fenster orange ein. Communities sidebar - + Gruppenseitenleiste Show message counts for communities and tags - + Zeige Nachrichtenzahl für Gruppen und Tags Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized - + Setze eine maximale Breite für Nachrichten im Chat (in Pixeln). Das kann die Lesbarkeit auf breiten Bildschirmen erhöhen. Show a column containing communities and tags next to the room list. - + Zeige eine Liste mit Gruppen und Tags neben der Raumliste. 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. - + Zeige Räume mit neuen Nachrichten zuerst an. +Wenn dies aus ist, dann werden Räume nur nach Zeitstempel der letzten Nachricht sortiert. +Wenn dies an ist, dann werden Nachrichten mit aktiven Benachrichtigungen (der kleine Kreis mit der Zahl drin) zuerst angezeigt. Räume, die stummgestellt sind, werden immer noch nach Zeitstempel sortiert, nachdem diese weniger wichtig zu sein scheinen. @@ -4934,7 +4939,7 @@ Diese Einstellung benötigt einen Neustart von Nheko. Open the fallback, follow the steps, and confirm after completing them. - + Öffne die Webseite und folge den Schritten auf dieser. Klicke dann auf Bestätigen. @@ -5037,12 +5042,12 @@ Diese Einstellung benötigt einen Neustart von Nheko. You sent some confetti - + Du hast etwas Konfetti geschicht %1 sent some confetti - + %1 hat etwas Konfetti geschicht @@ -5087,12 +5092,12 @@ Diese Einstellung benötigt einen Neustart von Nheko. You rejected a call - + Du hast einen Anruf abgewiesen %1 rejected a call - + %1 hat einen Anruf abgewiesen diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index fd929f16..c894cdea 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index 1ffa6022..fed69aab 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -232,16 +232,7 @@ Confirm logout - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -337,7 +328,16 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Cache migration failed! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts index 1a338c46..6b98b9c2 100644 --- a/resources/langs/nheko_eo.ts +++ b/resources/langs/nheko_eo.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. La kaŝmemoro sur via disko pli novas, ol tio, kion povas subteni ĉi tiu versio de Nheko. Bonvolu ĝisdatigi Nhekon aŭ vakigi vian kaŝmemoron. @@ -336,7 +329,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Malsukcesis migrado de kaŝmemoro! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_es.ts b/resources/langs/nheko_es.ts index a2c56a3b..df8e46aa 100644 --- a/resources/langs/nheko_es.ts +++ b/resources/langs/nheko_es.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. La cache en su disco es más reciente de lo que esta versión de Nheko soporta. Por favor actualiza Nheko o limpia la cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Migración de cache fallida! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts index 93906143..8e9ac3e5 100644 --- a/resources/langs/nheko_et.ts +++ b/resources/langs/nheko_et.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Sinu andmekandjale salvestatud puhvri versioon on uuem, kui käesolev Nheko versioon kasutada oskab. Palun tee Nheko uuendus või kustuta puhverdatud andmed. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Puhvri versiooniuuendus ebaõnnestus! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index f375d2c7..19ab336d 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Levylläsi oleva välimuisti on uudempaa kuin mitä tämä Nhekon versio tukee. Päivitä Nheko tai poista välimuistisi. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Välimuistin siirto epäonnistui! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. Välimuistin siirtäminen nykyiseen versioon epäonnistui. Tähän voi olla eri syitä. Luothan raportin sivulla https://github.com/Nheko-Reborn/nheko ja kokeile sillä välin vanhaa versiota. Voit myös kokeilla käsin välimuistin poistamista. diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index de6c65ad..59f98987 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Le cache sur votre disque a été créé avec une version de Nheko plus récente que la vôtre. Veuillez mettre Nheko à jour ou vider votre cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Échec de la migration du cache ! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts index 8d3caf70..c3b5792b 100644 --- a/resources/langs/nheko_hu.ts +++ b/resources/langs/nheko_hu.ts @@ -231,14 +231,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -334,7 +327,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Gyorsítótár migráció nem sikerült! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_id.ts b/resources/langs/nheko_id.ts index ceaeb01c..aead48d9 100644 --- a/resources/langs/nheko_id.ts +++ b/resources/langs/nheko_id.ts @@ -231,14 +231,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Tembolok pada diskmu lebih baru daripada versi yang didukung Nheko ini. Harap perbarui Nheko atau bersihkan tembolokmu. @@ -334,7 +327,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Migrasi tembolok gagal! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. Migrasi tembolok ke versi saat ini gagal. Ini dapat memiliki alasan yang berbeda. Silakan buka sebuah masalah di https://github.com/Nheko-Reborn/nheko dan coba menggunakan versi yang lama untuk saat ini. Secara alternatif kamu bisa menghapus tembolok secara manual. diff --git a/resources/langs/nheko_ie.ts b/resources/langs/nheko_ie.ts index 1620f3cc..1a92e70e 100644 --- a/resources/langs/nheko_ie.ts +++ b/resources/langs/nheko_ie.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts index 47ad9886..81f0d0e8 100644 --- a/resources/langs/nheko_it.ts +++ b/resources/langs/nheko_it.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Migrazione della cache fallita! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index e08b5299..c8c3491f 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -231,14 +231,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -334,7 +327,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts index 6cf6a753..4ccb4749 100644 --- a/resources/langs/nheko_ml.ts +++ b/resources/langs/nheko_ml.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index eb741bde..6148b0f2 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. De opgeslagen gegevens van Nheko zijn nieuwer dan de versie die je nu draait. Update Nheko of verwijder de gegevens. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Migreren van de cache is mislukt! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 2791c3cd..6f96a768 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -233,14 +233,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Pamięć podręczna na twoim dysku jest nowsza niż wspierana przez tę wersję Nheko. Zaktualizuj Nheko lub wyczyść pamięć podręczną. @@ -336,7 +329,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Nie udało się przenieść pamięci podręcznej! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_pt_BR.ts b/resources/langs/nheko_pt_BR.ts index 7d3c6fc5..a1f25fdc 100644 --- a/resources/langs/nheko_pt_BR.ts +++ b/resources/langs/nheko_pt_BR.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Migração do cache falhou! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts index dbfeb068..c3e9434c 100644 --- a/resources/langs/nheko_pt_PT.ts +++ b/resources/langs/nheko_pt_PT.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. A cache no seu disco é mais recente do que aquela que esta versão do Nheko suporta. Por favor atualize o Nheko ou limpe a sua cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Falha ao migrar a cache! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts index 1bfa2949..b8664564 100644 --- a/resources/langs/nheko_ro.ts +++ b/resources/langs/nheko_ro.ts @@ -233,14 +233,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -336,7 +329,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Nu s-a putut migra cache-ul! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index a5f3ac37..ef982473 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -233,14 +233,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. Версия кэша на вашем диске новее той, что поддерживается текущей версией Nheko. Пожалуйста, обновите Nheko или очистите кэш. @@ -336,7 +329,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Миграция кэша не удалась! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts index 8128eb91..7c843d94 100644 --- a/resources/langs/nheko_si.ts +++ b/resources/langs/nheko_si.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_sr_Latn.ts b/resources/langs/nheko_sr_Latn.ts index a94b06a1..1072b96a 100644 --- a/resources/langs/nheko_sr_Latn.ts +++ b/resources/langs/nheko_sr_Latn.ts @@ -233,14 +233,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -336,7 +329,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts index a5fcb931..00a6a731 100644 --- a/resources/langs/nheko_sv.ts +++ b/resources/langs/nheko_sv.ts @@ -232,14 +232,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -335,7 +328,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover Cache-migration misslyckades! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_vi.ts b/resources/langs/nheko_vi.ts index 51d6ffce..efa4d060 100644 --- a/resources/langs/nheko_vi.ts +++ b/resources/langs/nheko_vi.ts @@ -231,14 +231,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. @@ -334,7 +327,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index a5da56f1..c7e1b205 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -231,14 +231,7 @@ - - Because of the following reason Nheko wants to drop you to the login page: -%1 -If you think this is a mistake, you can close Nheko instead to possibly recover your encrpytion keys. After you have been dropped to the login page, you can sign in again using your usual methods. - - - - + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. 当前设备中的缓存比Nheko支持的版本更新,请更新Nheko或清理缓存。 @@ -334,7 +327,14 @@ If you think this is a mistake, you can close Nheko instead to possibly recover 缓存迁移失败! - + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. From 79a2efd25a17e54dc38d5bd5e80a4aff48676617 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 28 Dec 2022 20:49:42 +0100 Subject: [PATCH 78/84] Finish german translation --- resources/langs/nheko_de.ts | 44 ++++++++++++++++++++----------------- src/ChatPage.cpp | 2 +- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index b34d0e06..76a540bd 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -1509,7 +1509,10 @@ Du kannst zusätzlich einen Grund angeben, warum die anderen dein Anklopfen anne You can also put your homeserver address there if your server doesn't support .well-known lookup. Example: @user:server.my If Nheko fails to discover your homeserver, it will show you a field to enter the server manually. - + Dein Anmeldename. Eine mxid sollte mit eine @ anfangen gefolgt von der Nutzerid. Nach dem Nutzernamen folgt der servername, getrennt durch ein :. +Wenn dein Server keinen .well-known unterstützt, kannst du auch eine Serveradresse angeben. +Beispiel: @nutzer:mein.server +Wenn Nheko den Server nicht finden kann, wird es dich nach der Serveradresse fragen. @@ -1529,13 +1532,14 @@ 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 nothing is provided, a default is used. - + Der Name für dieses Gerät, den andere sehen, wenn sie deine Geräte verifizieren. Wenn nichts angeben ist, wird ein Standardwert verwendet. The address that can be used to contact you homeserver's client API. Example: https://server.my:8787 - + Die Adresse unter der die Client-API deines Heimservers erreicht wird. +Beispiel: https://mein.server:8787 @@ -1593,7 +1597,7 @@ Example: https://server.my:8787 The selected server does not support a version of the Matrix protocol, that this client understands (v1.1 to v1.4). You can't sign in. - + Der ausgewählte Server unterstützt keine der Matrix versionen, die Nheko versteht (v1.1 bis v1.4). Du kannst dich nicht anmelden. @@ -1975,12 +1979,12 @@ Example: https://server.my:8787 To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify an unverified device now? (Please make sure you have one of those devices available.) - + Damit andere Nutzer sehen können, welche Geräte wirklich dir gehören, kannst du sie verifizieren. Das aktiviert auch den Onlinespeicher für Nachrichtenschlüssel. Willst du ein unverifiziertes Gerät verifizieren? (Stelle sicher, dass du eines der Geräte in deiner Nähe hast.) To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify %1 now? - + Damit andere Nutzer sehen können, welche Geräte wirklich dir gehören, kannst du sie verifizieren. Das aktiviert auch den Onlinespeicher für Nachrichtenschlüssel. Willst du %1 verifizieren? @@ -2193,42 +2197,42 @@ Example: https://server.my:8787 Apply permission changes - + Berechtigungsänderungen anwenden Which of the subcommunities and rooms should these permissions be applied to? - + Auf welche Unterguppen und Räume sollen diese Berechtigungen angewandt werden? Apply permissions recursively - + Berechtigungen rekursiv anwenden Overwrite exisiting modifications in rooms - + Existierende Änderungen in den Räumen überschreiben No permissions to apply the new permissions here - + Keine Berechtigung die Berechtigungen hier zu verändern No changes needed - + Keine Änderungen notwendig Existing modifications to the permissions in this room will be overwritten - + Existierende Änderungen in diesem Raum werden überschrieben Permissions synchronized with community - + Berechtigungen mit der Gruppe synchronisiert @@ -2466,22 +2470,22 @@ Example: https://server.my:8787 Set the global log level, or a comma-separated list of <component>=<level> pairs, or both. For example, to set the default log level to 'warn' but disable logging for the 'ui' component, pass 'warn,ui=off'. levels:{trace,debug,info,warning,error,critical,off} components:{crypto,db,mtx,net,qml,ui} - + Setze das globale loglevel oder eine kommaseparierte liste con <Komponente>=<Level> Paaren oder beides. Z.B. um das Loglevel auf 'warn' zu setzen aber für die 'ui' Komponente zu deaktivieren, kannst du 'warn,ui=off' verwenden. Level: {trace,debug,info,warning,error,critical,off}, Komponenten: {crypto,db,mtx,net,qml,ui} level - + Level Set the log output type. A comma-separated list is allowed. The default is 'file,stderr'. types:{file,stderr,none} - + Definiere wohin geloggt wird. Eine kommaseparierte Liste kann angegeben werden. Standartwert ist 'file,stderr'. Valide Typen: {file,stderr,none} type - + Typ @@ -2611,7 +2615,7 @@ Example: https://server.my:8787 The selected server does not support a version of the Matrix protocol that this client understands (v1.1 to v1.4). You can't register. - + Der ausgewählte Server unterstützt keine der Matrix versionen, die Nheko versteht (v1.1 bis v1.4). Du kannst dich nicht registrieren. @@ -2654,7 +2658,7 @@ Example: https://server.my:8787 Cancel Thread - + Gesprächsfaden abbrechen diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 1910ce0b..bcb89a03 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -404,7 +404,7 @@ ChatPage::dropToLoginPage(const QString &msg) nullptr, tr("Confirm logout"), tr("Because of the following reason Nheko wants to drop you to the login page:\n%1\nIf you " - "think this is a mistake, you can close Nheko instead to possibly recover your encrpytion " + "think this is a mistake, you can close Nheko instead to possibly recover your encryption " "keys. After you have been dropped to the login page, you can sign in again using your " "usual methods.") .arg(msg), From 35673b5b52b28f4f07ae0f5ec50a8b1c76d24038 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 28 Dec 2022 20:25:41 +0000 Subject: [PATCH 79/84] Added translation using Weblate (Ukrainian) Co-authored-by: NullPointerException --- resources/langs/nheko_uk.ts | 5100 +++++++++++++++++++++++++++++++++++ 1 file changed, 5100 insertions(+) create mode 100644 resources/langs/nheko_uk.ts diff --git a/resources/langs/nheko_uk.ts b/resources/langs/nheko_uk.ts new file mode 100644 index 00000000..0e4be6ec --- /dev/null +++ b/resources/langs/nheko_uk.ts @@ -0,0 +1,5100 @@ + + + + + ActiveCallBar + + + Calling... + + + + + + Connecting... + + + + + You are screen sharing + + + + + Hide/Show Picture-in-Picture + + + + + Unmute Mic + + + + + Mute Mic + + + + + AliasEditingModel + + + + + + Failed to unpublish alias %1: %2 + + + + + Failed to update aliases: %1 + + + + + AliasEditor + + + Aliases to %1 + + + + + List of aliases to this room. Usually you can only add aliases on your server. You can have one canonical alias and many alternate aliases. + + + + + Primary alias + + + + + Make primary alias + + + + + Advertise as an alias in this room + + + + + Publish in room directory + + + + + Remove this alias + + + + + #new-alias:server.tld + + + + + Add + + + + + AllowedRoomsSettingsDialog + + + Allowed rooms settings + + + + + List of rooms that allow access to this room. Anyone who is in any of those rooms can join this room. + + + + + Parent community + + + + + Other room + + + + + Enter additional rooms not in the list yet... + + + + + Cache + + + %1 and %n other(s) + + + + + + + + + + Empty Room + + + + + CallInvite + + + Video Call + + + + + Voice Call + + + + + No microphone found. + + + + + CallInviteBar + + + Video Call + + + + + Voice Call + + + + + Devices + + + + + Accept + + + + + Unknown microphone: %1 + + + + + Unknown camera: %1 + + + + + Decline + + + + + No microphone found. + + + + + CallManager + + + Entire screen + + + + + ChatPage + + + Failed to invite user: %1 + + + + + + Invited user: %1 + + + + + Confirm logout + + + + + The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache. + + + + + Failed to open database, logging out! + + + + + Knock on room + + + + + Do you really want to knock on %1? You may optionally provide a reason for others to accept your knock: + + + + + Failed to knock room: %1 + + + + + Room creation failed: Bad Alias + + + + + Room %1 created. + + + + + + Confirm invite + + + + + Do you really want to invite %1 (%2)? + + + + + Failed to invite %1 to %2: %3 + + + + + Kicked user: %1 + + + + + Failed to ban %1 in %2: %3 + + + + + Banned user: %1 + + + + + Confirm unban + + + + + Do you really want to unban %1 (%2)? + + + + + Failed to unban %1 in %2: %3 + + + + + Unbanned user: %1 + + + + + Do you really want to start a private chat with %1? + + + + + Cache migration failed! + + + + + Because of the following reason Nheko wants to drop you to the login page: +%1 +If you think this is a mistake, you can close Nheko instead to possibly recover your encryption keys. After you have been dropped to the login page, you can sign in again using your usual methods. + + + + + Migrating the cache to the current version failed. This can have different reasons. Please open an issue at https://github.com/Nheko-Reborn/nheko and try to use an older version in the meantime. Alternatively you can try deleting the cache manually. + + + + + Incompatible cache version + + + + + Failed to restore OLM account. Please login again. + + + + + + + Failed to restore save data. Please login again. + + + + + Failed to setup encryption keys. Server response: %1 %2. Please try again later. + + + + + + Please try to login again: %1 + + + + + You failed to join %1. You can try to knock so that others can invite you in. Do you want to do so? +You may optionally provide a reason for others to accept your knock: + + + + + Failed to join room: %1 + + + + + Failed to remove invite: %1 + + + + + Room creation failed: %1 + + + + + Failed to leave room: %1 + + + + + Reason for the kick + + + + + Enter reason for kicking %1 (%2) or hit enter for no reason: + + + + + Failed to kick %1 from %2: %3 + + + + + Reason for the ban + + + + + Enter reason for banning %1 (%2) or hit enter for no reason: + + + + + No network connection + + + + + CommandCompleter + + + /me <message> + + + + + /react <text> + + + + + /join (!roomid|#alias) [reason] + + + + + /knock (!roomid|#alias) [reason] + + + + + /part [reason] + + + + + /leave [reason] + + + + + /invite @userid [reason] + + + + + /kick @userid [reason] + + + + + /ban @userid [reason] + + + + + /unban @userid [reason] + + + + + /redact ($eventid|@userid) + + + + + /roomnick <displayname> + + + + + /shrug [message] + + + + + /fliptable + + + + + /unfliptable + + + + + /sovietflip + + + + + /clear-timeline + + + + + /reset-state + + + + + /rotate-megolm-session + + + + + /md [message] + + + + + /plain [message] + + + + + /rainbow [message] + + + + + /rainbowme [message] + + + + + /notice [message] + + + + + /rainbownotice [message] + + + + + /confetti [message] + + + + + /rainbowconfetti [message] + + + + + /goto ($eventid|message index|matrix:r/room/e/event) + + + + + /converttodm + + + + + /converttoroom + + + + + Send a message expressing an action. + + + + + Send <text> as a reaction when you’re replying to a message. + + + + + Join a room. Reason is optional. + + + + + Ask to join a room. Reason is optional. + + + + + + Leave a room. Reason is optional. + + + + + Invite a user into the current room. Reason is optional. + + + + + Kick a user from the current room. Reason is optional. + + + + + Ban a user from the current room. Reason is optional. + + + + + Unban a user in the current room. Reason is optional. + + + + + Redact an event or all locally cached messages of a user. + + + + + Change your displayname in this room. + + + + + ¯\_(ツ)_/¯ with an optional message. + + + + + (╯°□°)╯︵ ┻━┻ + + + + + ┯━┯╭( º _ º╭) + + + + + ノ┬─┬ノ ︵ ( \o°o)\ + + + + + Clear the currently cached messages in this room. + + + + + Refetch the state in this room. + + + + + Rotate the current symmetric encryption key. + + + + + Send a markdown formatted message (ignoring the global setting). + + + + + Send an unformatted message (ignoring the global setting). + + + + + Send a message in rainbow colors. + + + + + Send /me in rainbow colors. + + + + + Send a bot message. + + + + + Send a bot message in rainbow colors. + + + + + Send a message with confetti. + + + + + Send a message in rainbow colors with confetti. + + + + + Go to this event or link. + + + + + Convert this room to a direct chat. + + + + + Convert this direct chat into a room. + + + + + CommunitiesList + + + Do not show notification counts for this community or tag. + + + + + Hide rooms with this tag or from this community by default. + + + + + Expand + + + + + Collapse + + + + + CommunitiesModel + + + All rooms + + + + + Shows all rooms without filtering. + + + + + Direct Chats + + + + + Show direct chats. + + + + + Favourites + + + + + Rooms you have favourited. + + + + + Low Priority + + + + + Rooms with low priority. + + + + + Server Notices + + + + + Messages from your server or administrator. + + + + + Failed to update community: %1 + + + + + Failed to delete room from community: %1 + + + + + Failed to update community for room: %1 + + + + + Failed to remove community from room: %1 + + + + + ConfirmJoinRoomDialog + + + Confirm community join + + + + + Confirm room join + + + + + %n member(s) + + + + + + + + + Do you want to join this room? You can optionally add a reason below: + + + + + This room can't be joined directly. You can, however, knock on the room and room members can accept or decline this join request. You can additionally provide a reason for them to let you in below: + + + + + Knock + + + + + Join + + + + + CreateDirect + + + Create Direct Chat + + + + + User to invite + + + + + @user:server.tld + + + + + Encryption + + + + + CreateRoom + + + Create Room + + + + + Name + + + + + New community + + + + + New Room + + + + + No name + + + + + Topic + + + + + No topic + + + + + Alias + + + + + Public + + + + + Public rooms can be joined by anyone; private rooms need explicit invites. + + + + + Trusted + + + + + All invitees are given the same power level as the creator + + + + + Encryption + + + + + Caution: Encryption cannot be disabled + + + + + CrossSigningSecrets + + + Decrypt secrets + + + + + Enter your recovery key or passphrase to decrypt your secrets: + + + + + Enter your recovery key or passphrase called %1 to decrypt your secrets: + + + + + Decryption failed + + + + + Failed to decrypt secrets with the provided recovery key or passphrase + + + + + DigitVerification + + + Verification Code + + + + + Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification! + + + + + They do not match! + + + + + They match! + + + + + EmojiPicker + + + Search + + + + + People + + + + + Nature + + + + + Food + + + + + Activity + + + + + Travel + + + + + Objects + + + + + Symbols + + + + + Flags + + + + + EmojiVerification + + + Verification Code + + + + + Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification! + + + + + The displayed emoji might look different in different clients if a different font is used. Similarly they might be translated into different languages. Nonetheless they should depict one of 64 different objects or animals. For example a lion and a cat are different, but a cat is the same even if one client just shows a cat face, while another client shows a full cat body. + + + + + They do not match! + + + + + They match! + + + + + Encrypted + + + There is no key to unlock this message. We requested the key automatically, but you can try requesting it again if you are impatient. + + + + + This message couldn't be decrypted, because we only have a key for newer messages. You can try requesting access to this message. + + + + + There was an internal error reading the decryption key from the database. + + + + + There was an error decrypting this message. + + + + + The message couldn't be parsed. + + + + + The encryption key was reused! Someone is possibly trying to insert false messages into this chat! + + + + + Unknown decryption error + + + + + Request key + + + + + EncryptionIndicator + + + This message is not encrypted! + + + + + Encrypted by a verified device + + + + + Encrypted by an unverified device, but you have trusted that user so far. + + + + + Encrypted by an unverified device or the key is from an untrusted source like the key backup. + + + + + Failed + + + Verification failed + + + + + Other client does not support our verification protocol. + + + + + Key mismatch detected! + + + + + Device verification timed out. + + + + + Other party canceled the verification. + + + + + Verification messages received out of order! + + + + + Unknown verification error. + + + + + Close + + + + + ForwardCompleter + + + Forward Message + + + + + HiddenEvents + + + + Failed to set hidden events: %1 + + + + + HiddenEventsDialog + + + Hidden events for %1 + + + + + Hidden events + + + + + These events will be <b>shown</b> in %1: + + + + + These events will be <b>shown</b> in all rooms: + + + + + User events + + + + + Joins, leaves, avatar and name changes, bans, … + + + + + Power level changes + + + + + Sent when a moderator is added/removed or the permissions of a room are changed. + + + + + Stickers + + + + + ImagePackEditorDialog + + + Editing image pack + + + + + Add images + + + + + Images (*.png *.webp *.gif *.jpg *.jpeg) + + + + + Select images for pack + + + + + Add to pack + + + + + Change the overview image for this pack + + + + + Overview Image (*.png *.webp *.jpg *.jpeg) + + + + + Select overview image for pack + + + + + State key + + + + + Packname + + + + + Attribution + + + + + + Use as Emoji + + + + + + Use as Sticker + + + + + Shortcode + + + + + Body + + + + + Remove from pack + + + + + Remove + + + + + ImagePackSettingsDialog + + + Image pack settings + + + + + Create account pack + + + + + New room pack + + + + + Private pack + + + + + Pack from this room + + + + + Pack from parent community + + + + + Globally enabled pack + + + + + Enable globally + + + + + Enables this pack to be used in all rooms + + + + + Edit + + + + + Close + + + + + InputBar + + + Select a file + + + + + All Files (*) + + + + + Upload of '%1' failed + + + + + InviteDialog + + + Invite users to %1 + + + + + User ID to invite + + + + + @joe:matrix.org + Example user id. The name 'joe' can be localized however you want. + + + + + Add + + + + + Invite + + + + + Cancel + + + + + JoinRoomDialog + + + Join room + + + + + Room ID or alias + + + + + Join + + + + + LeaveRoomDialog + + + Leave room + + + + + Are you sure you want to leave? + + + + + LoginPage + + + Matrix ID + + + + + e.g @joe:matrix.org + + + + + Your login name. A mxid should start with @ followed by the user ID. After the user ID you need to include your server name after a :. +You can also put your homeserver address there if your server doesn't support .well-known lookup. +Example: @user:server.my +If Nheko fails to discover your homeserver, it will show you a field to enter the server manually. + + + + + Password + + + + + Your password. + + + + + Device name + + + + + A name for this device which will be shown to others when verifying your devices. If nothing is provided, a default is used. + + + + + The address that can be used to contact you homeserver's client API. +Example: https://server.my:8787 + + + + + Homeserver address + + + + + server.my:8787 + + + + + LOGIN + + + + + Back + + + + + + + + You have entered an invalid Matrix ID e.g @joe:matrix.org + + + + + Autodiscovery failed. Received malformed response. + + + + + Autodiscovery failed. Unknown error when requesting .well-known. + + + + + The required endpoints were not found. Possibly not a Matrix server. + + + + + Received malformed response. Make sure the homeserver domain is valid. + + + + + An unknown error occured. Make sure the homeserver domain is valid. + + + + + The selected server does not support a version of the Matrix protocol, that this client understands (v1.1 to v1.4). You can't sign in. + + + + + Sign in with Apple + + + + + Continue with Facebook + + + + + Sign in with Google + + + + + Sign in with Twitter + + + + + Login using %1 + + + + + SSO LOGIN + + + + + Empty password + + + + + SSO login failed + + + + + LogoutDialog + + + Log out + + + + + A call is in progress. Log out? + + + + + Are you sure you want to log out? + + + + + MediaUpload + + + + Failed to upload media. Please try again. + + + + + MessageDelegate + + + %1 removed a message + + + + + %1 enabled encryption + + + + + %2 changed the room name to: %1 + + + + + %1 removed the room name + + + + + %2 changed the topic to: %1 + + + + + %1 removed the topic + + + + + %1 changed the room avatar + + + + + %1 changed the pinned messages. + + + + + %1 changed the addresses for this room. + + + + + %1 created and configured room: %2 + + + + + %1 placed a voice call. + + + + + %1 placed a video call. + + + + + %1 placed a call. + + + + + %1 rejected the call. + + + + + %1 select answer + + + + + + %1 is negotiating the call... + + + + + Allow them in + + + + + %1 answered the call. + + + + + This room was replaced for the following reason: %1 + + + + + Go to replacement room + + + + + %1 changed the parent communities for this room. + + + + + %1 ended the call. + + + + + MessageInput + + + Hang up + + + + + Place a call + + + + + Already on a call + + + + + Send a file + + + + + Write a message... + + + + + Stickers + + + + + Emoji + + + + + Send + + + + + You don't have permission to send messages in this room + + + + + MessageView + + + Edit + + + + + React + + + + + Reply in thread + + + + + New thread + + + + + Reply + + + + + Options + + + + + Reason for removal + + + + + Enter reason for removal or hit enter for no reason: + + + + + + &Copy + + + + + + Copy &link location + + + + + Re&act + + + + + Repl&y + + + + + &Edit + + + + + &Thread + + + + + Un&pin + + + + + &Pin + + + + + &Read receipts + + + + + &Forward + + + + + &Mark as read + + + + + View raw message + + + + + View decrypted raw message + + + + + Remo&ve message + + + + + &Save as + + + + + &Open in external program + + + + + Copy link to eve&nt + + + + + &Go to quoted message + + + + + NewVerificationRequest + + + Send Verification Request + + + + + Received Verification Request + + + + + To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify an unverified device now? (Please make sure you have one of those devices available.) + + + + + To allow other users to see which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify %1 now? + + + + + To ensure that no malicious user can eavesdrop on your encrypted communications you can verify the other party. + + + + + %1 has requested to verify their device %2. + + + + + %1 using the device %2 has requested to be verified. + + + + + Your device (%1) has requested to be verified. + + + + + Cancel + + + + + Deny + + + + + Start verification + + + + + Accept + + + + + NotificationWarning + + + You are about to notify the whole room + + + + + NotificationsManager + + + + %1 sent an encrypted message + + + + + %1 replied: %2 + Format a reply in a notification. %1 is the sender, %2 the message + + + + + %1 replied with an encrypted message + + + + + %1 replied to a message + + + + + %1 sent a message + + + + + PlaceCall + + + Place a call to %1? + + + + + No microphone found. + + + + + Voice + + + + + Video + + + + + Screen + + + + + Cancel + + + + + Placeholder + + + unimplemented event: + + + + + PowerLevelEditor + + + Permissions in %1 + + + + + Be careful when editing permissions. You can't lower the permissions of people with a same or higher level than you. Be careful when promoting others. + + + + + Roles + + + + + Users + + + + + Move permissions between roles to change them + + + + + + Administrator (%1) + + + + + + Moderator (%1) + + + + + User (%1) + + + + + + Custom (%1) + + + + + Remove event type + + + + + Add event type + + + + + Add new role + + + + + Add + + + + + Move users up or down to change their permissions + + + + + Remove user + + + + + Add user + + + + + PowerLevelSpacesApplyDialog + + + Apply permission changes + + + + + Which of the subcommunities and rooms should these permissions be applied to? + + + + + Apply permissions recursively + + + + + Overwrite exisiting modifications in rooms + + + + + No permissions to apply the new permissions here + + + + + No changes needed + + + + + Existing modifications to the permissions in this room will be overwritten + + + + + Permissions synchronized with community + + + + + PowerLevels + + + Failed to update powerlevel: %1 + + + + + PowerlevelEditingModels + + + Failed to update powerlevel: %1 + + + + + PowerlevelsTypeListModel + + + Other events + + + + + Other state events + + + + + Remove other users + + + + + Ban other users + + + + + Invite other users + + + + + Redact events sent by others + + + + + Reactions + + + + + Deprecated aliases events + + + + + Change the room avatar + + + + + Change the room addresses + + + + + Send encrypted messages + + + + + Enable encryption + + + + + Change guest access + + + + + Change history visibility + + + + + Change who can join + + + + + Send messages + + + + + Change the room name + + + + + Change the room permissions + + + + + Change the rooms topic + + + + + Change the widgets + + + + + Change the widgets (experimental) + + + + + Redact own events + + + + + Change the pinned events + + + + + Upgrade the room + + + + + Send stickers + + + + + Ban users using policy rules + + + + + Ban rooms using policy rules + + + + + Ban servers using policy rules + + + + + Edit child communities and rooms + + + + + Change parent communities + + + + + Start a call + + + + + Negotiate a call + + + + + Answer a call + + + + + Hang up a call + + + + + Reject a call + + + + + Change the room emotes + + + + + PowerlevelsUserListModel + + + Other users + + + + + QCoreApplication + + + Create a unique profile which allows you to log into several accounts at the same time and start multiple instances of nheko. + + + + + profile + + + + + profile name + + + + + QObject + + + Alias for '--log-level trace'. + + + + + Set the global log level, or a comma-separated list of <component>=<level> pairs, or both. For example, to set the default log level to 'warn' but disable logging for the 'ui' component, pass 'warn,ui=off'. levels:{trace,debug,info,warning,error,critical,off} components:{crypto,db,mtx,net,qml,ui} + + + + + level + + + + + Set the log output type. A comma-separated list is allowed. The default is 'file,stderr'. types:{file,stderr,none} + + + + + type + + + + + Respond + + + + + Send + + + + + Write a message... + + + + + ReadReceipts + + + Read receipts + + + + + ReadReceiptsModel + + + Yesterday, %1 + + + + + RegisterPage + + + Username + + + + + The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /. + + + + + + Back + + + + + Password + + + + + Please choose a secure password. The exact requirements for password strength may depend on your server. + + + + + Password confirmation + + + + + A name for this device which will be shown to others when verifying your devices. If nothing is provided a default is used. + + + + + Homeserver + + + + + your.server + + + + + A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own. + + + + + Your passwords do not match! + + + + + Device name + + + + + REGISTER + + + + + Autodiscovery failed. Received malformed response. + + + + + Autodiscovery failed. Unknown error when requesting .well-known. + + + + + The required endpoints were not found. Possibly not a Matrix server. + + + + + Received malformed response. Make sure the homeserver domain is valid. + + + + + An unknown error occured. Make sure the homeserver domain is valid. + + + + + The selected server does not support a version of the Matrix protocol that this client understands (v1.1 to v1.4). You can't register. + + + + + Server does not support querying registration flows! + + + + + Server does not support registration. + + + + + Invalid username. + + + + + Name already in use. + + + + + Part of the reserved namespace. + + + + + ReplyPopup + + + Close + + + + + Cancel Edit + + + + + Cancel Thread + + + + + RoomDirectory + + + Explore Public Rooms + + + + + Search for public rooms + + + + + Choose custom homeserver + + + + + RoomInfo + + + no version stored + + + + + RoomList + + + New tag + + + + + Enter the tag you want to use: + + + + + Open separately + + + + + Room settings + + + + + Leave room + + + + + Copy room link + + + + + Tag room as: + + + + + Favourite + + + + + Low priority + + + + + Server notice + + + + + Create new tag... + + + + + Add or remove from community... + + + + + Status Message + + + + + Enter your status message: + + + + + Profile settings + + + + + Set status message + + + + + Logout + + + + + Encryption not set up + Cross-signing setup has not run yet. + + + + + Unverified login + The user just signed in with this device and hasn't verified their master key. + + + + + Please verify your other devices + There are unverified devices signed in to this account. + + + + + Close + + + + + Start a new chat + + + + + Join a room + + + + + Create a new room + + + + + Start a direct chat + + + + + Create a new community + + + + + Room directory + + + + + Search rooms (Ctrl+K) + + + + + User settings + + + + + RoomMembers + + + Members of %1 + + + + + %n people in %1 + Summary above list of members + + + + + + + + + Invite more people + + + + + Search... + + + + + Sort by: + + + + + User ID + + + + + Display name + + + + + Power level + + + + + Administrator: %1 + + + + + Moderator: %1 + + + + + User: %1 + + + + + This room is not encrypted! + + + + + This user is verified. + + + + + This user isn't verified, but is still using the same master key from the first time you met. + + + + + This user has unverified devices! + + + + + RoomSettings + + + Room Settings + + + + + Change room avatar. + + + + + Change name of this room + + + + + %n member(s) + + + + + + + + + View members of %1 + + + + + No topic set + + + + + Change topic of this room + + + + + SETTINGS + + + + + Notifications + + + + + Muted + + + + + Mentions only + + + + + All messages + + + + + Encryption + + + + + End-to-End Encryption + + + + + Encryption is currently experimental and things might break unexpectedly. <br> + Please take note that it can't be disabled afterwards. + + + + + Permission + + + + + View and change the permissions in this room + + + + + View and change the addresses/aliases of this room + + + + + Sticker & Emote Settings + + + + + + Change + + + + + Hidden events + + + + + + + Configure + + + + + Anyone can join + + + + + Allow knocking + + + + + Allow joining via other rooms + + + + + Rooms to join via + + + + + Change the list of rooms users can join this room via. Usually this is the official community of this room. + + + + + Allow guests to join + + + + + Apply access rules + + + + + Aliases + + + + + Change what packs are enabled, remove packs, or create new ones + + + + + Select events to hide in this room + + + + + INFO + + + + + Internal ID + + + + + Copied to clipboard + + + + + Room Version + + + + + show less + + + + + show more + + + + + Failed to enable encryption: %1 + + + + + Select an avatar + + + + + All Files (*) + + + + + The selected file is not an image + + + + + Error while reading file: %1 + + + + + + Failed to upload image: %s + + + + + RoomlistModel + + + Pending invite. + + + + + Previewing this room + + + + + No preview available + + + + + Root + + + Please enter your login password to continue: + + + + + Please enter a valid email address to continue: + + + + + Please enter a valid phone number to continue: + + + + + Please enter the token which has been sent to you: + + + + + Wait for the confirmation link to arrive, then continue. + + + + + ScreenShare + + + Share desktop with %1? + + + + + Window: + + + + + Frame rate: + + + + + Include your camera picture-in-picture + + + + + Request remote camera + + + + + + View your callee's camera like a regular video call + + + + + Hide mouse cursor + + + + + Share + + + + + Preview + + + + + Cancel + + + + + SecretStorage + + + Failed to connect to secret storage + + + + + Nheko could not connect to the secure storage to save encryption secrets to. This can have multiple reasons. Check if your D-Bus service is running and you have configured a service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If you are having trouble, feel free to open an issue here: https://github.com/Nheko-Reborn/nheko/issues + + + + + SelfVerificationCheck + + + This is your recovery key. You will need it to restore access to your encrypted messages and verification keys. Keep this safe. Don't share it with anyone and don't lose it! Do not pass go! Do not collect $200! + + + + + Encryption setup successfully + + + + + Failed to setup encryption: %1 + + + + + Setup Encryption + + + + + Hello and welcome to Matrix! +It seems like you are new. Before you can securely encrypt your messages, we need to setup a few small things. You can either press accept immediately or adjust a few basic options. We also try to explain a few of the basics. You can skip those parts, but they might prove to be helpful! + + + + + Activate Encryption + + + + + It seems like you have encryption already configured for this account. To be able to access your encrypted messages and make this device appear as trusted, you can either verify an existing device or (if you have one) enter your recovery passphrase. Please select one of the options below. +If you choose verify, you need to have the other device available. If you choose "enter passphrase", you will need your recovery key or passphrase. If you click cancel, you can choose to verify yourself at a later point. + + + + + verify + + + + + enter passphrase + + + + + SelfVerificationStatus + + + Failed to create keys for cross-signing! + + + + + Failed to create keys for online key backup! + + + + + Failed to create keys for secure server side secret storage! + + + + + Encryption Setup + + + + + Encryption setup failed: %1 + + + + + Identity key changed. This breaks E2EE, so logging out. + + + + + SingleImagePackModel + + + + Failed to update image pack: %1 + + + + + Failed to delete old image pack: %1 + + + + + + Failed to open image: %1 + + + + + + Failed to upload image: %1 + + + + + SpaceMenuLevel + + + Add or remove from community + + + + + Official community for this room + + + + + Affiliated community for this room + + + + + Listed only for community members + + + + + Listed only for room members + + + + + Not related + + + + + Subcommunities + + + + + StatusIndicator + + + Failed + + + + + Sent + + + + + Received + + + + + Read + + + + + StickerPicker + + + Search + + + + + Success + + + Successful Verification + + + + + Verification successful! Both sides verified their devices! + + + + + Close + + + + + TimelineModel + + + + Message redaction failed: %1 + + + + + + Failed to encrypt event, sending aborted! + + + + + Save image + + + + + Save video + + + + + Save audio + + + + + 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.) + + + + + + + + + %1 opened the room to the public. + + + + + %1 allowed to join this room by knocking. + + + + + %1 allowed members of the following rooms to automatically join this room: %2 + + + + + %1 made the room open to guests. + + + + + %1 has closed the room to guest access. + + + + + %1 made the room history world readable. Events may be now read by non-joined people. + + + + + %1 set the room history visible to members from this point on. + + + + + %1 set the room history visible to members since they were invited. + + + + + %1 set the room history visible to members since they joined the room. + + + + + + %1 has changed the room's permissions. + + + + + %1 has changed the room's kick powerlevel from %2 to %3. + + + + + %n member(s) can now kick room members. + + + + + + + + + %1 can now kick room members. + + + + + %1 has changed the room's redact powerlevel from %2 to %3. + + + + + %n member(s) can now redact room messages. + + + + + + + + + %1 can now redact room messages. + + + + + %1 has changed the room's ban powerlevel from %2 to %3. + + + + + %n member(s) can now ban room members. + + + + + + + + + %1 can now ban room members. + + + + + %1 has changed the room's state_default powerlevel from %2 to %3. + + + + + %n member(s) can now send state events. + + + + + + + + + %1 can now send state events. + + + + + %1 has changed the room's invite powerlevel from %2 to %3. + + + + + %1 has changed the room's events_default powerlevel from %2 to %3. New users can now not send any events. + + + + + %1 has changed the room's events_default powerlevel from %2 to %3. New users can now send events that are not otherwise restricted. + + + + + %1 has changed the room's events_default powerlevel from %2 to %3. + + + + + %1 has made %2 an administrator of this room. + + + + + %1 has made %2 a moderator of this room. + + + + + %1 has downgraded %2 to moderator of this room. + + + + + %1 has changed the powerlevel of %2 from %3 to %4. + + + + + %1 allowed only administrators to send "%2". + + + + + %1 allowed only moderators to send "%2". + + + + + %1 allowed everyone to send "%2". + + + + + %1 has changed the powerlevel of event type "%2" from the default to %3. + + + + + %1 has changed the powerlevel of event type "%2" from %3 to %4. + + + + + (empty) + + + + + %1 removed the following images from the pack %2:<br>%3 + + + + + %1 added the following images to the pack %2:<br>%3 + + + + + %1 changed the sticker and emotes in this room. + + + + + %1 disabled the rule to ban users matching %2. + + + + + %1 added a rule to ban users matching %2 for '%3'. + + + + + %1 disabled the rule to ban rooms matching %2. + + + + + %1 added a rule to ban rooms matching %2 for '%3'. + + + + + %1 disabled the rule to ban servers matching %2. + + + + + %1 added a rule to ban servers matching %2 for '%3'. + + + + + Removed by %1 + + + + + %1 (%2) removed this message at %3 + + + + + Removed by %1 because: %2 + + + + + %1 (%2) removed this message at %3 +Reason: %4 + + + + + %2 revoked the invite to %1. + + + + + %2 kicked %1. + + + + + %2 unbanned %1. + + + + + %2 rejected the knock from %1. + + + + + %1 changed their avatar. + + + + + %1 changed some profile info. + + + + + %1 joined. + + + + + %1 joined via authorisation from %2's server. + + + + + %1 rejected their invite. + + + + + %1 left the room. + + + + + Reason: %1 + + + + + %1 redacted their knock. + + + + + You joined this room. + + + + + %1 made this room require an invitation to join. + + + + + %1 invited %2. + + + + + %1 has changed their avatar and changed their display name to %2. + + + + + %1 has changed their display name to %2. + + + + + %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 banned %2 + + + + + %1 knocked. + + + + + TimelineRow + + + Edited + + + + + Part of a thread + + + + + TimelineView + + + No room open + + + + + No preview available + + + + + Settings + + + + + %n member(s) + + + + + + + + + View members of %1 + + + + + join the conversation + + + + + accept invite + + + + + decline invite + + + + + Hide invite reason + + + + + Show invite reason + + + + + Back to room list + + + + + TopBar + + + Back to room list + + + + + No room selected + + + + + In %1 + + + + + Show room members. + + + + + This room contains only verified devices. + + + + + This room contains verified devices and devices which have never changed their master key. + + + + + This room contains unverified devices! + + + + + Show or hide pinned messages + + + + + Search this room + + + + + Room options + + + + + Invite users + + + + + Members + + + + + Leave room + + + + + Settings + + + + + Unpin + + + + + Enter search query + + + + + TrayIcon + + + Show + + + + + Quit + + + + + UIA + + + No available registration flows! + + + + + + + Registration aborted + + + + + Please enter a valid registration token. + + + + + Invalid token + + + + + UploadBox + + + Upload %n file(s) + + + + + + + + + UserProfile + + + Global User Profile + + + + + Room User Profile + + + + + Change avatar globally. + + + + + Change avatar. Will only apply to this room. + + + + + Change display name globally. + + + + + Change display name. Will only apply to this room. + + + + + Room: %1 + + + + + This is a room-specific profile. The user's name and avatar may be different from their global versions. + + + + + Open the global profile for this user. + + + + + + Verify + + + + + Start a private chat. + + + + + Kick the user. + + + + + Ban the user. + + + + + Refresh device list. + + + + + Sign out this device. + + + + + Change device name. + + + + + Last seen %1 from %2 + + + + + Unverify + + + + + Sign out device %1 + + + + + You signed out this device. + + + + + Select an avatar + + + + + All Files (*) + + + + + The selected file is not an image + + + + + Error while reading file: %1 + + + + + UserSettings + + + + Default + + + + + UserSettingsModel + + + Theme + + + + + Scale factor + + + + + Highlight message on hover + + + + + Large Emoji in timeline + + + + + Minimize to tray + + + + + Start in tray + + + + + Send messages as Markdown + + + + + Use shift+enter to send and enter to start a new line + + + + + Enable message bubbles + + + + + Enable small Avatars + + + + + Play animated images only on hover + + + + + Typing notifications + + + + + Sort rooms by unreads + + + + + Show buttons in timeline + + + + + Limit width of timeline + + + + + Read receipts + + + + + Desktop notifications + + + + + Alert on notification + + + + + Circular Avatars + + + + + Use identicons + + + + + Open images with external program + + + + + Open videos with external program + + + + + Decrypt messages in sidebar + + + + + Decrypt notifications + + + + + Display fancy effects such as confetti + + + + + Privacy Screen + + + + + Privacy screen timeout (in seconds [0 - 3600]) + + + + + Touchscreen mode + + + + + Font size + + + + + Font Family + + + + + Emoji Font Family + + + + + Ringtone + + + + + Microphone + + + + + Camera + + + + + Camera resolution + + + + + Camera frame rate + + + + + Allow fallback call assist server + + + + + Send encrypted messages to verified users only + + + + + Share keys with verified users and devices + + + + + Online Key Backup + + + + + Profile + + + + + User ID + + + + + Accesstoken + + + + + Device ID + + + + + Device Fingerprint + + + + + Homeserver + + + + + Version + + + + + Platform + + + + + GENERAL + + + + + TIMELINE + + + + + SIDEBAR + + + + + TRAY + + + + + NOTIFICATIONS + + + + + CALLS + + + + + ENCRYPTION + + + + + INFO + + + + + Session Keys + + + + + Cross Signing Secrets + + + + + Online backup key + + + + + Self signing key + + + + + User signing key + + + + + Master signing key + + + + + Expose room information via D-Bus + + + + + Default + + + + + Set the notification sound to play when a call invite arrives + + + + + Set timeout (in seconds) for how long after window loses +focus before the screen will be blurred. +Set to 0 to blur immediately after focus loss. Max value of 1 hour (3600 seconds) + + + + + Change the background color of messages when you hover over them. + + + + + Make font size larger if messages with only a few emojis are displayed. + + + + + Keep the application running in the background after closing the client window. + + + + + Start the application in the background without showing the client window. + + + + + Allow using markdown in messages. +When disabled, all messages are sent as a plain text. + + + + + Invert the behavior of the enter key in the text input, making it send the message when shift+enter is pressed and starting a new line when enter is pressed. + + + + + Messages get a bubble background. This also triggers some layout changes (WIP). + + + + + Avatars are resized to fit above the message. + + + + + Plays media like GIFs or WEBPs only when explicitly hovering over them. + + + + + Show who is typing in a room. +This will also enable or disable sending typing notifications to others. + + + + + Show buttons to quickly reply, react or access additional options next to each message. + + + + + Notify about received messages when the client is not currently focused. + + + + + Change the appearance of user avatars in chats. +OFF - square, ON - circle. + + + + + Decrypt messages shown in notifications for encrypted chats. + + + + + Choose where to show the total number of notifications contained within a community or tag. + + + + + Some messages can be sent with fancy effects. For example, messages sent with '/confetti' will show confetti on screen. + + + + + Automatically replies to key requests from other users if they are verified, even if that device shouldn't have access to those keys otherwise. + + + + + The key to verify your own devices. If it is cached, verifying one of your devices will mark it verified for all your other devices and for users that have verified you. + + + + + Show an alert when a message is received. +This usually causes the application icon in the task bar to animate in some fashion. + + + + + Communities sidebar + + + + + Show message counts for communities and tags + + + + + Set the max width of messages in the timeline (in pixels). This can help readability on wide screen when Nheko is maximized + + + + + Show a column containing communities and tags next to the room list. + + + + + 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. + + + + + Show if your message was read. +Status is displayed next to timestamps. +Warning: If your homeserver does not support this, your rooms will never be marked as read! + + + + + Display an identicon instead of a letter when no avatar is set. + + + + + Opens images with an external program when tapping the image. +Note that when this option is ON, opened files are left unencrypted on disk and must be manually deleted. + + + + + Opens videos with an external program when tapping the video. +Note that when this option is ON, opened files are left unencrypted on disk and must be manually deleted. + + + + + Decrypt the messages shown in the sidebar. +Only affects messages in encrypted chats. + + + + + When the window loses focus, the timeline will +be blurred. + + + + + Will prevent text selection in the timeline to make touch scrolling easier. + + + + + Change the scale factor of the whole user interface. + + + + + Will use turn.matrix.org as assist when your home server does not offer one. + + + + + Requires a user to be verified to send encrypted messages to them. This improves safety but makes E2EE more tedious. + + + + + Download message encryption keys from and upload to the encrypted online key backup. + + + + + The key to decrypt online key backups. If it is cached, you can enable online key backup to store encryption keys securely encrypted on the server. + + + + + The key to verify other users. If it is cached, verifying a user will verify all their devices. + + + + + 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. + + + + + Allow third-party plugins and applications to load information about rooms you are in via D-Bus. This can have useful applications, but it also could be used for nefarious purposes. Enable at your own risk. + +This setting will take effect upon restart. + + + + + Select a file + + + + + All Files (*) + + + + + Open Sessions File + + + + + + + + + + Error + + + + + + File Password + + + + + Enter the passphrase to decrypt the file: + + + + + + The password cannot be empty + + + + + Enter passphrase to encrypt your session keys: + + + + + File to save the exported session keys + + + + + UserSettingsPage + + + REQUEST + + + + + DOWNLOAD + + + + + CACHED + + + + + NOT CACHED + + + + + Back + + + + + IMPORT + + + + + EXPORT + + + + + VerificationManager + + + No encrypted private chat found with this user. Create an encrypted private chat with this user and try again. + + + + + Waiting + + + Waiting for other party… + + + + + Waiting for other side to accept the verification request. + + + + + Waiting for other side to continue the verification process. + + + + + Waiting for other side to complete the verification process. + + + + + Cancel + + + + + WelcomePage + + + Welcome to nheko! The desktop client for the Matrix protocol. + + + + + Enjoy your stay! + + + + + REGISTER + + + + + LOGIN + + + + + descriptiveTime + + + Yesterday + + + + + dialogs::FallbackAuth + + + Open Fallback in Browser + + + + + Cancel + + + + + Confirm + + + + + Open the fallback, follow the steps, and confirm after completing them. + + + + + dialogs::ReCaptcha + + + Open reCAPTCHA + + + + + Cancel + + + + + Confirm + + + + + Solve the reCAPTCHA and press the confirm button + + + + + message-description sent: + + + You sent an audio clip + + + + + %1 sent an audio clip + + + + + You sent an image + + + + + %1 sent an image + + + + + You sent a file + + + + + %1 sent a file + + + + + You sent a video + + + + + %1 sent a video + + + + + You sent a sticker + + + + + %1 sent a sticker + + + + + You sent a notification + + + + + %1 sent a notification + + + + + + You: %1 + + + + + + %1: %2 + + + + + You sent some confetti + + + + + %1 sent some confetti + + + + + You sent an encrypted message + + + + + %1 sent an encrypted message + + + + + You placed a call + + + + + %1 placed a call + + + + + You answered a call + + + + + %1 answered a call + + + + + You ended a call + + + + + %1 ended a call + + + + + You rejected a call + + + + + %1 rejected a call + + + + + utils + + + Unknown Message Type + + + + From 114fa0868a6fc4ed2762bccde5181d8be5559e4f Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 28 Dec 2022 21:43:43 +0100 Subject: [PATCH 80/84] Skip notifying for your own messages --- src/ChatPage.cpp | 19 ++++++++++++------- src/timeline/TimelineModel.cpp | 5 +++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index bcb89a03..27019ba3 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -266,6 +266,18 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) relatedEvents; for (const auto &event : room.timeline.events) { + auto event_id = mtx::accessors::event_id(event); + + // skip already read events + if (currentReadMarker && + currentReadMarker > cache::getEventIndex(room_id, event_id)) + continue; + + // skip our messages + auto sender = mtx::accessors::sender(event); + if (sender == http::client()->user_id().to_string()) + continue; + mtx::events::collections::TimelineEvent te{event}; std::visit([room_id = room_id](auto &event_) { event_.room_id = room_id; }, te.data); @@ -304,13 +316,6 @@ ChatPage::ChatPage(QSharedPointer userSettings, QObject *parent) actions.end(), mtx::pushrules::actions::Action{ mtx::pushrules::actions::notify{}}) != actions.end()) { - auto event_id = mtx::accessors::event_id(event); - - // skip already read events - if (currentReadMarker && - currentReadMarker > cache::getEventIndex(room_id, event_id)) - continue; - if (!cache::isNotificationSent(event_id)) { // We should only send one notification per event. cache::markSentNotification(event_id); diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 46f8e57c..b9725ecc 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -747,6 +747,11 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r case Notificationlevel: { const auto &push = ChatPage::instance()->pushruleEvaluator(); if (push) { + // skip our messages + auto sender = mtx::accessors::sender(event); + if (sender == http::client()->user_id().to_string()) + return qml_mtx_events::NotificationLevel::Nothing; + const auto &id = event_id(event); std::vector> relatedEvents; From 69c11d45331c153b0ea0676eecf4f42c2fdfad9b Mon Sep 17 00:00:00 2001 From: Joseph Donofry Date: Wed, 28 Dec 2022 18:51:30 -0500 Subject: [PATCH 81/84] Fix send message logic bug introduced with shift+enter setting --- resources/qml/MessageInput.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 7f5f63ec..ab6e260f 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -219,7 +219,7 @@ Rectangle { } else if (event.matches(StandardKey.InsertLineSeparator)) { if (popup.opened) popup.close(); - if (Settings.invertEnterKey && !Qt.inputMethod.visible || Qt.platform.os === "windows") { + if (Settings.invertEnterKey && (!Qt.inputMethod.visible || Qt.platform.os === "windows")) { room.input.send(); event.accepted = true; } @@ -234,7 +234,7 @@ Rectangle { return; } } - if (!Settings.invertEnterKey && !Qt.inputMethod.visible || Qt.platform.os === "windows") { + if (!Settings.invertEnterKey && (!Qt.inputMethod.visible || Qt.platform.os === "windows")) { room.input.send(); event.accepted = true; } From 6176ce7c2b2b4ed80f9cca6c5985907af414b57a Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 28 Dec 2022 22:26:33 +0100 Subject: [PATCH 82/84] Limit build jobs on small systems --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 623a7be5..5e0873d9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -204,9 +204,10 @@ build-flatpak-arm64: - flatpak --noninteractive install --user flathub org.kde.Sdk//5.15-22.08 script: - export VERSION=$(git describe) + - if [ "$(grep MemTotal /proc/meminfo | tr -cd '[0-9]')" -lt "6000000" ]; then export EXTRA_FLAGS='--jobs=3'; fi - mkdir -p build-flatpak - cd build-flatpak - - flatpak-builder --user --disable-rofiles-fuse --ccache --repo=repo --default-branch=${CI_COMMIT_REF_NAME//\//_} --subject="Build of Nheko ${VERSION} `date` for arm64" app ../io.github.NhekoReborn.Nheko.yaml + - flatpak-builder --user --disable-rofiles-fuse --ccache $EXTRA_FLAGS --repo=repo --default-branch=${CI_COMMIT_REF_NAME//\//_} --subject="Build of Nheko ${VERSION} `date` for arm64" app ../io.github.NhekoReborn.Nheko.yaml - flatpak build-bundle repo nheko-arm64.flatpak io.github.NhekoReborn.Nheko ${CI_COMMIT_REF_NAME//\//_} after_script: - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true From 5f315d8a3cadd8f94b3701e1174b735f09b8c0b7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 2 Jan 2023 04:21:26 +0100 Subject: [PATCH 83/84] Fix pagination after timeline clear --- src/timeline/TimelineModel.cpp | 3 +++ src/timeline/TimelineModel.h | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index b9725ecc..f3d92e31 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -975,6 +975,9 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) if (timeline.events.empty()) return; + if (timeline.limited) + setPaginationInProgress(false); + events.handleSync(timeline); using namespace mtx::events; diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 01d80797..59ad1b37 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -398,7 +398,11 @@ public slots: void setThread(const QString &newThread); void resetThread(); void setDecryptDescription(bool decrypt) { decryptDescription = decrypt; } - void clearTimeline() { events.clearTimeline(); } + void clearTimeline() + { + events.clearTimeline(); + setPaginationInProgress(false); + } void resetState(); void receivedSessionKey(const std::string &session_key) { From 3a6a905429309ba37a611a364ad40987133f93a2 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 2 Jan 2023 04:25:33 +0100 Subject: [PATCH 84/84] A whole new year full of excitement and possibilities! --- resources/qml/Avatar.qml | 1 + resources/qml/ChatPage.qml | 1 + resources/qml/CommunitiesList.qml | 1 + resources/qml/Completer.qml | 1 + resources/qml/ElidedLabel.qml | 1 + resources/qml/EncryptionIndicator.qml | 1 + resources/qml/ForwardCompleter.qml | 1 + resources/qml/ImageButton.qml | 1 + resources/qml/MatrixText.qml | 1 + resources/qml/MatrixTextField.qml | 1 + resources/qml/MessageInput.qml | 1 + resources/qml/MessageView.qml | 1 + resources/qml/NhekoBusyIndicator.qml | 1 + resources/qml/NotificationWarning.qml | 1 + resources/qml/PrivacyScreen.qml | 1 + resources/qml/QuickSwitcher.qml | 1 + resources/qml/Reactions.qml | 1 + resources/qml/ReplyPopup.qml | 1 + resources/qml/RoomList.qml | 1 + resources/qml/Root.qml | 1 + resources/qml/ScrollHelper.qml | 1 + resources/qml/SelfVerificationCheck.qml | 1 + resources/qml/StatusIndicator.qml | 1 + resources/qml/TimelineRow.qml | 1 + resources/qml/TimelineView.qml | 1 + resources/qml/ToggleButton.qml | 1 + resources/qml/TopBar.qml | 1 + resources/qml/TypingIndicator.qml | 1 + resources/qml/UploadBox.qml | 1 + resources/qml/components/AdaptiveLayout.qml | 1 + resources/qml/components/AdaptiveLayoutElement.qml | 1 + resources/qml/components/AvatarListTile.qml | 1 + resources/qml/components/FlatButton.qml | 1 + resources/qml/components/MainWindowDialog.qml | 1 + resources/qml/components/NotificationBubble.qml | 1 + resources/qml/components/ReorderableListview.qml | 1 + resources/qml/components/SpaceMenuLevel.qml | 1 + resources/qml/components/TextButton.qml | 1 + resources/qml/delegates/Encrypted.qml | 1 + resources/qml/delegates/FileMessage.qml | 1 + resources/qml/delegates/ImageMessage.qml | 1 + resources/qml/delegates/MessageDelegate.qml | 1 + resources/qml/delegates/NoticeMessage.qml | 1 + resources/qml/delegates/Pill.qml | 1 + resources/qml/delegates/Placeholder.qml | 1 + resources/qml/delegates/PlayableMediaMessage.qml | 1 + resources/qml/delegates/Redacted.qml | 1 + resources/qml/delegates/Reply.qml | 1 + resources/qml/delegates/TextMessage.qml | 1 + resources/qml/device-verification/DeviceVerification.qml | 1 + resources/qml/device-verification/DigitVerification.qml | 1 + resources/qml/device-verification/EmojiElement.qml | 1 + resources/qml/device-verification/EmojiVerification.qml | 1 + resources/qml/device-verification/Failed.qml | 1 + resources/qml/device-verification/NewVerificationRequest.qml | 1 + resources/qml/device-verification/Success.qml | 1 + resources/qml/device-verification/Waiting.qml | 1 + resources/qml/dialogs/AliasEditor.qml | 1 + resources/qml/dialogs/AllowedRoomsSettingsDialog.qml | 1 + resources/qml/dialogs/ConfirmJoinRoomDialog.qml | 1 + resources/qml/dialogs/CreateDirect.qml | 1 + resources/qml/dialogs/CreateRoom.qml | 1 + resources/qml/dialogs/HiddenEventsDialog.qml | 1 + resources/qml/dialogs/ImageOverlay.qml | 1 + resources/qml/dialogs/ImagePackEditorDialog.qml | 1 + resources/qml/dialogs/ImagePackSettingsDialog.qml | 1 + resources/qml/dialogs/InputDialog.qml | 1 + resources/qml/dialogs/InviteDialog.qml | 1 + resources/qml/dialogs/JoinRoomDialog.qml | 1 + resources/qml/dialogs/LeaveRoomDialog.qml | 1 + resources/qml/dialogs/LogoutDialog.qml | 1 + resources/qml/dialogs/PhoneNumberInputDialog.qml | 1 + resources/qml/dialogs/PowerLevelEditor.qml | 1 + resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml | 1 + resources/qml/dialogs/RawMessageDialog.qml | 1 + resources/qml/dialogs/ReadReceipts.qml | 1 + resources/qml/dialogs/RoomDirectory.qml | 1 + resources/qml/dialogs/RoomMembers.qml | 1 + resources/qml/dialogs/RoomSettings.qml | 1 + resources/qml/dialogs/UserProfile.qml | 1 + resources/qml/emoji/EmojiPicker.qml | 1 + resources/qml/emoji/StickerPicker.qml | 1 + resources/qml/pages/LoginPage.qml | 1 + resources/qml/pages/RegisterPage.qml | 1 + resources/qml/pages/UserSettingsPage.qml | 1 + resources/qml/pages/WelcomePage.qml | 1 + resources/qml/ui/NhekoSlider.qml | 1 + resources/qml/ui/Ripple.qml | 1 + resources/qml/ui/Snackbar.qml | 1 + resources/qml/ui/Spinner.qml | 1 + resources/qml/ui/animations/BlinkAnimation.qml | 1 + resources/qml/ui/media/MediaControls.qml | 1 + resources/qml/voip/ActiveCallBar.qml | 1 + resources/qml/voip/CallDevices.qml | 1 + resources/qml/voip/CallInvite.qml | 1 + resources/qml/voip/CallInviteBar.qml | 1 + resources/qml/voip/DeviceError.qml | 1 + resources/qml/voip/PlaceCall.qml | 1 + resources/qml/voip/ScreenShare.qml | 1 + resources/qml/voip/VideoCall.qml | 1 + src/AliasEditModel.cpp | 1 + src/AliasEditModel.h | 1 + src/AvatarProvider.cpp | 1 + src/AvatarProvider.h | 1 + src/BlurhashProvider.cpp | 1 + src/BlurhashProvider.h | 1 + src/Cache.cpp | 1 + src/Cache.h | 1 + src/CacheCryptoStructs.h | 1 + src/CacheStructs.h | 1 + src/Cache_p.h | 1 + src/ChatPage.cpp | 1 + src/ChatPage.h | 1 + src/Clipboard.cpp | 1 + src/Clipboard.h | 1 + src/ColorImageProvider.cpp | 1 + src/ColorImageProvider.h | 1 + src/CombinedImagePackModel.cpp | 1 + src/CombinedImagePackModel.h | 1 + src/CommandCompleter.cpp | 1 + src/CommandCompleter.h | 1 + src/CompletionModelRoles.h | 1 + src/CompletionProxyModel.cpp | 1 + src/CompletionProxyModel.h | 1 + src/Config.h | 1 + src/EventAccessors.cpp | 1 + src/EventAccessors.h | 1 + src/ImagePackListModel.cpp | 1 + src/ImagePackListModel.h | 1 + src/InviteesModel.cpp | 1 + src/InviteesModel.h | 1 + src/JdenticonProvider.cpp | 1 + src/JdenticonProvider.h | 1 + src/Logging.cpp | 1 + src/Logging.h | 1 + src/LoginPage.cpp | 1 + src/LoginPage.h | 1 + src/MainWindow.cpp | 1 + src/MainWindow.h | 1 + src/MatrixClient.cpp | 1 + src/MatrixClient.h | 1 + src/MemberList.cpp | 1 + src/MemberList.h | 1 + src/MxcImageProvider.cpp | 1 + src/MxcImageProvider.h | 1 + src/PowerlevelsEditModels.cpp | 1 + src/PowerlevelsEditModels.h | 1 + src/ReadReceiptsModel.cpp | 1 + src/ReadReceiptsModel.h | 1 + src/RegisterPage.cpp | 1 + src/RegisterPage.h | 1 + src/RoomDirectoryModel.cpp | 1 + src/RoomDirectoryModel.h | 1 + src/RoomsModel.cpp | 1 + src/RoomsModel.h | 1 + src/SSOHandler.cpp | 1 + src/SSOHandler.h | 1 + src/SingleImagePackModel.cpp | 1 + src/SingleImagePackModel.h | 1 + src/TrayIcon.cpp | 1 + src/TrayIcon.h | 1 + src/UserSettingsPage.cpp | 1 + src/UserSettingsPage.h | 1 + src/UsersModel.cpp | 1 + src/UsersModel.h | 1 + src/Utils.cpp | 1 + src/Utils.h | 1 + src/dbus/NhekoDBusApi.cpp | 1 + src/dbus/NhekoDBusApi.h | 1 + src/dbus/NhekoDBusBackend.cpp | 1 + src/dbus/NhekoDBusBackend.h | 1 + src/dialogs/FallbackAuth.cpp | 1 + src/dialogs/FallbackAuth.h | 1 + src/dialogs/ReCaptcha.cpp | 1 + src/dialogs/ReCaptcha.h | 1 + src/dock/Dock.cpp | 1 + src/dock/Dock.h | 1 + src/emoji/EmojiModel.cpp | 1 + src/emoji/EmojiModel.h | 1 + src/emoji/MacHelper.h | 1 + src/emoji/Provider.cpp | 1 + src/emoji/Provider.h | 1 + src/encryption/DeviceVerificationFlow.cpp | 1 + src/encryption/DeviceVerificationFlow.h | 1 + src/encryption/Olm.cpp | 1 + src/encryption/Olm.h | 1 + src/encryption/SelfVerificationStatus.cpp | 1 + src/encryption/SelfVerificationStatus.h | 1 + src/encryption/VerificationManager.cpp | 1 + src/encryption/VerificationManager.h | 1 + src/main.cpp | 1 + src/notifications/MacNotificationDelegate.h | 1 + src/notifications/Manager.cpp | 1 + src/notifications/Manager.h | 1 + src/notifications/ManagerLinux.cpp | 1 + src/notifications/ManagerMac.cpp | 1 + src/notifications/ManagerWin.cpp | 1 + src/notifications/NotificationManagerProxy.h | 1 + src/timeline/CommunitiesModel.cpp | 1 + src/timeline/CommunitiesModel.h | 1 + src/timeline/DelegateChooser.cpp | 1 + src/timeline/DelegateChooser.h | 1 + src/timeline/EventStore.cpp | 1 + src/timeline/EventStore.h | 1 + src/timeline/InputBar.cpp | 1 + src/timeline/InputBar.h | 1 + src/timeline/Permissions.cpp | 1 + src/timeline/Permissions.h | 1 + src/timeline/PresenceEmitter.cpp | 1 + src/timeline/PresenceEmitter.h | 1 + src/timeline/Reaction.cpp | 1 + src/timeline/Reaction.h | 1 + src/timeline/RoomlistModel.cpp | 1 + src/timeline/RoomlistModel.h | 1 + src/timeline/TimelineFilter.cpp | 1 + src/timeline/TimelineFilter.h | 1 + src/timeline/TimelineModel.cpp | 1 + src/timeline/TimelineModel.h | 1 + src/timeline/TimelineViewManager.cpp | 1 + src/timeline/TimelineViewManager.h | 1 + src/ui/HiddenEvents.cpp | 1 + src/ui/HiddenEvents.h | 1 + src/ui/MxcAnimatedImage.cpp | 1 + src/ui/MxcAnimatedImage.h | 1 + src/ui/MxcMediaProxy.cpp | 1 + src/ui/MxcMediaProxy.h | 1 + src/ui/NhekoCursorShape.cpp | 1 + src/ui/NhekoCursorShape.h | 1 + src/ui/NhekoDropArea.cpp | 1 + src/ui/NhekoDropArea.h | 1 + src/ui/NhekoEventObserver.cpp | 1 + src/ui/NhekoEventObserver.h | 1 + src/ui/NhekoGlobalObject.cpp | 1 + src/ui/NhekoGlobalObject.h | 1 + src/ui/RoomSettings.cpp | 1 + src/ui/RoomSettings.h | 1 + src/ui/RoomSummary.cpp | 1 + src/ui/RoomSummary.h | 1 + src/ui/Theme.cpp | 1 + src/ui/Theme.h | 1 + src/ui/ThemeManager.cpp | 1 + src/ui/ThemeManager.h | 1 + src/ui/UIA.cpp | 1 + src/ui/UIA.h | 1 + src/ui/UserProfile.cpp | 1 + src/ui/UserProfile.h | 1 + src/voip/CallDevices.cpp | 1 + src/voip/CallDevices.h | 1 + src/voip/CallManager.cpp | 1 + src/voip/CallManager.h | 1 + src/voip/WebRTCSession.cpp | 1 + src/voip/WebRTCSession.h | 1 + 252 files changed, 252 insertions(+) diff --git a/resources/qml/Avatar.qml b/resources/qml/Avatar.qml index 2da59370..549b8d17 100644 --- a/resources/qml/Avatar.qml +++ b/resources/qml/Avatar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ChatPage.qml b/resources/qml/ChatPage.qml index cc62d501..3d76616a 100644 --- a/resources/qml/ChatPage.qml +++ b/resources/qml/ChatPage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/CommunitiesList.qml b/resources/qml/CommunitiesList.qml index 853302a5..1722cc85 100644 --- a/resources/qml/CommunitiesList.qml +++ b/resources/qml/CommunitiesList.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index abf37486..04ff1495 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ElidedLabel.qml b/resources/qml/ElidedLabel.qml index 11df479a..4c734cc5 100644 --- a/resources/qml/ElidedLabel.qml +++ b/resources/qml/ElidedLabel.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/EncryptionIndicator.qml b/resources/qml/EncryptionIndicator.qml index 04d4bace..a75bd976 100644 --- a/resources/qml/EncryptionIndicator.qml +++ b/resources/qml/EncryptionIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ForwardCompleter.qml b/resources/qml/ForwardCompleter.qml index 76d77bfd..765c3a34 100644 --- a/resources/qml/ForwardCompleter.qml +++ b/resources/qml/ForwardCompleter.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ImageButton.qml b/resources/qml/ImageButton.qml index 080bea23..6a5c0782 100644 --- a/resources/qml/ImageButton.qml +++ b/resources/qml/ImageButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/MatrixText.qml b/resources/qml/MatrixText.qml index 69eb7cdb..9ce61435 100644 --- a/resources/qml/MatrixText.qml +++ b/resources/qml/MatrixText.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/MatrixTextField.qml b/resources/qml/MatrixTextField.qml index e3632b61..5ebc9728 100644 --- a/resources/qml/MatrixTextField.qml +++ b/resources/qml/MatrixTextField.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index ab6e260f..59b19d4d 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml index a49c046c..ae8eee56 100644 --- a/resources/qml/MessageView.qml +++ b/resources/qml/MessageView.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/NhekoBusyIndicator.qml b/resources/qml/NhekoBusyIndicator.qml index aafe8900..6f6869f4 100644 --- a/resources/qml/NhekoBusyIndicator.qml +++ b/resources/qml/NhekoBusyIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/NotificationWarning.qml b/resources/qml/NotificationWarning.qml index 285e5a5c..2d0a0975 100644 --- a/resources/qml/NotificationWarning.qml +++ b/resources/qml/NotificationWarning.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index f91e4a73..bc128302 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/QuickSwitcher.qml b/resources/qml/QuickSwitcher.qml index ac5d3aea..77992e69 100644 --- a/resources/qml/QuickSwitcher.qml +++ b/resources/qml/QuickSwitcher.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/Reactions.qml b/resources/qml/Reactions.qml index aae42cb1..94a8408d 100644 --- a/resources/qml/Reactions.qml +++ b/resources/qml/Reactions.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ReplyPopup.qml b/resources/qml/ReplyPopup.qml index 05464e33..3c4922b2 100644 --- a/resources/qml/ReplyPopup.qml +++ b/resources/qml/ReplyPopup.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index 97639baa..2cfd71f9 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml index 1f079213..5f7d7229 100644 --- a/resources/qml/Root.qml +++ b/resources/qml/Root.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ScrollHelper.qml b/resources/qml/ScrollHelper.qml index c87b730e..afbc116f 100644 --- a/resources/qml/ScrollHelper.qml +++ b/resources/qml/ScrollHelper.qml @@ -2,6 +2,7 @@ // Copyright (C) 2017 Christian Mollekopf, // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/SelfVerificationCheck.qml b/resources/qml/SelfVerificationCheck.qml index 336b966d..f6954d3b 100644 --- a/resources/qml/SelfVerificationCheck.qml +++ b/resources/qml/SelfVerificationCheck.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/StatusIndicator.qml b/resources/qml/StatusIndicator.qml index e1ed3b29..2276de11 100644 --- a/resources/qml/StatusIndicator.qml +++ b/resources/qml/StatusIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index 4814d84f..2ee9ee77 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index dcbcc87e..b82cba65 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ToggleButton.qml b/resources/qml/ToggleButton.qml index 98950b8a..b24458c6 100644 --- a/resources/qml/ToggleButton.qml +++ b/resources/qml/ToggleButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index cce2c89b..4a52d234 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/TypingIndicator.qml b/resources/qml/TypingIndicator.qml index 0b92b2d2..ac995e3c 100644 --- a/resources/qml/TypingIndicator.qml +++ b/resources/qml/TypingIndicator.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/UploadBox.qml b/resources/qml/UploadBox.qml index ccd59f45..2b20c837 100644 --- a/resources/qml/UploadBox.qml +++ b/resources/qml/UploadBox.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/AdaptiveLayout.qml b/resources/qml/components/AdaptiveLayout.qml index 8e3c0e3d..a2148c06 100644 --- a/resources/qml/components/AdaptiveLayout.qml +++ b/resources/qml/components/AdaptiveLayout.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/AdaptiveLayoutElement.qml b/resources/qml/components/AdaptiveLayoutElement.qml index 666a47cc..68793f07 100644 --- a/resources/qml/components/AdaptiveLayoutElement.qml +++ b/resources/qml/components/AdaptiveLayoutElement.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/AvatarListTile.qml b/resources/qml/components/AvatarListTile.qml index 910e0e47..498dc045 100644 --- a/resources/qml/components/AvatarListTile.qml +++ b/resources/qml/components/AvatarListTile.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/FlatButton.qml b/resources/qml/components/FlatButton.qml index 2c9ea061..bcc4697f 100644 --- a/resources/qml/components/FlatButton.qml +++ b/resources/qml/components/FlatButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/MainWindowDialog.qml b/resources/qml/components/MainWindowDialog.qml index def4f96b..76c95038 100644 --- a/resources/qml/components/MainWindowDialog.qml +++ b/resources/qml/components/MainWindowDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/NotificationBubble.qml b/resources/qml/components/NotificationBubble.qml index ca0ae6cb..f1315626 100644 --- a/resources/qml/components/NotificationBubble.qml +++ b/resources/qml/components/NotificationBubble.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/ReorderableListview.qml b/resources/qml/components/ReorderableListview.qml index 7e9ae05d..853ea5f6 100644 --- a/resources/qml/components/ReorderableListview.qml +++ b/resources/qml/components/ReorderableListview.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/SpaceMenuLevel.qml b/resources/qml/components/SpaceMenuLevel.qml index f552978d..1641e727 100644 --- a/resources/qml/components/SpaceMenuLevel.qml +++ b/resources/qml/components/SpaceMenuLevel.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/components/TextButton.qml b/resources/qml/components/TextButton.qml index a37f3aee..f34cbb0e 100644 --- a/resources/qml/components/TextButton.qml +++ b/resources/qml/components/TextButton.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Encrypted.qml b/resources/qml/delegates/Encrypted.qml index ecc771f5..679f7b49 100644 --- a/resources/qml/delegates/Encrypted.qml +++ b/resources/qml/delegates/Encrypted.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/FileMessage.qml b/resources/qml/delegates/FileMessage.qml index daae8635..5e496db5 100644 --- a/resources/qml/delegates/FileMessage.qml +++ b/resources/qml/delegates/FileMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/ImageMessage.qml b/resources/qml/delegates/ImageMessage.qml index 12e8a465..af69b983 100644 --- a/resources/qml/delegates/ImageMessage.qml +++ b/resources/qml/delegates/ImageMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml index c2d49e91..d0569c5a 100644 --- a/resources/qml/delegates/MessageDelegate.qml +++ b/resources/qml/delegates/MessageDelegate.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/NoticeMessage.qml b/resources/qml/delegates/NoticeMessage.qml index 342469db..a1de0465 100644 --- a/resources/qml/delegates/NoticeMessage.qml +++ b/resources/qml/delegates/NoticeMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Pill.qml b/resources/qml/delegates/Pill.qml index 8b67c346..fd24fb51 100644 --- a/resources/qml/delegates/Pill.qml +++ b/resources/qml/delegates/Pill.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Placeholder.qml b/resources/qml/delegates/Placeholder.qml index f63e62f5..62fb2d9f 100644 --- a/resources/qml/delegates/Placeholder.qml +++ b/resources/qml/delegates/Placeholder.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/PlayableMediaMessage.qml b/resources/qml/delegates/PlayableMediaMessage.qml index 4828843c..c4c143cc 100644 --- a/resources/qml/delegates/PlayableMediaMessage.qml +++ b/resources/qml/delegates/PlayableMediaMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Redacted.qml b/resources/qml/delegates/Redacted.qml index dcdb7248..0b208fb9 100644 --- a/resources/qml/delegates/Redacted.qml +++ b/resources/qml/delegates/Redacted.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml index 8962fa52..4b98b78b 100644 --- a/resources/qml/delegates/Reply.qml +++ b/resources/qml/delegates/Reply.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/delegates/TextMessage.qml b/resources/qml/delegates/TextMessage.qml index da1c66da..bbb58736 100644 --- a/resources/qml/delegates/TextMessage.qml +++ b/resources/qml/delegates/TextMessage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml index ead293d2..845516e0 100644 --- a/resources/qml/device-verification/DeviceVerification.qml +++ b/resources/qml/device-verification/DeviceVerification.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/DigitVerification.qml b/resources/qml/device-verification/DigitVerification.qml index e1f8f6cf..1e25fa9b 100644 --- a/resources/qml/device-verification/DigitVerification.qml +++ b/resources/qml/device-verification/DigitVerification.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/EmojiElement.qml b/resources/qml/device-verification/EmojiElement.qml index d02ede48..20b23e12 100644 --- a/resources/qml/device-verification/EmojiElement.qml +++ b/resources/qml/device-verification/EmojiElement.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/EmojiVerification.qml b/resources/qml/device-verification/EmojiVerification.qml index 4b88ef7b..1948f19c 100644 --- a/resources/qml/device-verification/EmojiVerification.qml +++ b/resources/qml/device-verification/EmojiVerification.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/Failed.qml b/resources/qml/device-verification/Failed.qml index 77327a75..33d46042 100644 --- a/resources/qml/device-verification/Failed.qml +++ b/resources/qml/device-verification/Failed.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/NewVerificationRequest.qml b/resources/qml/device-verification/NewVerificationRequest.qml index 187c3246..98b3fdf3 100644 --- a/resources/qml/device-verification/NewVerificationRequest.qml +++ b/resources/qml/device-verification/NewVerificationRequest.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/Success.qml b/resources/qml/device-verification/Success.qml index d9365194..1608e36a 100644 --- a/resources/qml/device-verification/Success.qml +++ b/resources/qml/device-verification/Success.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/device-verification/Waiting.qml b/resources/qml/device-verification/Waiting.qml index 3054b9c3..b5b43a9e 100644 --- a/resources/qml/device-verification/Waiting.qml +++ b/resources/qml/device-verification/Waiting.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/AliasEditor.qml b/resources/qml/dialogs/AliasEditor.qml index 0f7ed332..d1437d68 100644 --- a/resources/qml/dialogs/AliasEditor.qml +++ b/resources/qml/dialogs/AliasEditor.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml b/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml index 80905039..970d8d0f 100644 --- a/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml +++ b/resources/qml/dialogs/AllowedRoomsSettingsDialog.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ConfirmJoinRoomDialog.qml b/resources/qml/dialogs/ConfirmJoinRoomDialog.qml index a07aadd2..d61a75f7 100644 --- a/resources/qml/dialogs/ConfirmJoinRoomDialog.qml +++ b/resources/qml/dialogs/ConfirmJoinRoomDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/CreateDirect.qml b/resources/qml/dialogs/CreateDirect.qml index 85768cad..69eb38d0 100644 --- a/resources/qml/dialogs/CreateDirect.qml +++ b/resources/qml/dialogs/CreateDirect.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/CreateRoom.qml b/resources/qml/dialogs/CreateRoom.qml index bfc6d797..569886f2 100644 --- a/resources/qml/dialogs/CreateRoom.qml +++ b/resources/qml/dialogs/CreateRoom.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/HiddenEventsDialog.qml b/resources/qml/dialogs/HiddenEventsDialog.qml index 444ce6a1..7e7a9c05 100644 --- a/resources/qml/dialogs/HiddenEventsDialog.qml +++ b/resources/qml/dialogs/HiddenEventsDialog.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ImageOverlay.qml b/resources/qml/dialogs/ImageOverlay.qml index 70aa3e87..7437a04b 100644 --- a/resources/qml/dialogs/ImageOverlay.qml +++ b/resources/qml/dialogs/ImageOverlay.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ImagePackEditorDialog.qml b/resources/qml/dialogs/ImagePackEditorDialog.qml index 891d9c3d..c7325b2f 100644 --- a/resources/qml/dialogs/ImagePackEditorDialog.qml +++ b/resources/qml/dialogs/ImagePackEditorDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml index 2bbcfe54..ce4d554a 100644 --- a/resources/qml/dialogs/ImagePackSettingsDialog.qml +++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/InputDialog.qml b/resources/qml/dialogs/InputDialog.qml index a674c3fb..de079797 100644 --- a/resources/qml/dialogs/InputDialog.qml +++ b/resources/qml/dialogs/InputDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/InviteDialog.qml b/resources/qml/dialogs/InviteDialog.qml index e7dd4e3a..33fd32c4 100644 --- a/resources/qml/dialogs/InviteDialog.qml +++ b/resources/qml/dialogs/InviteDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/JoinRoomDialog.qml b/resources/qml/dialogs/JoinRoomDialog.qml index 0098370d..b6b1af24 100644 --- a/resources/qml/dialogs/JoinRoomDialog.qml +++ b/resources/qml/dialogs/JoinRoomDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/LeaveRoomDialog.qml b/resources/qml/dialogs/LeaveRoomDialog.qml index cb15a74d..969073f7 100644 --- a/resources/qml/dialogs/LeaveRoomDialog.qml +++ b/resources/qml/dialogs/LeaveRoomDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/LogoutDialog.qml b/resources/qml/dialogs/LogoutDialog.qml index fb5b39f6..3e2a20c2 100644 --- a/resources/qml/dialogs/LogoutDialog.qml +++ b/resources/qml/dialogs/LogoutDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/PhoneNumberInputDialog.qml b/resources/qml/dialogs/PhoneNumberInputDialog.qml index 9c36c98f..1fc5e061 100644 --- a/resources/qml/dialogs/PhoneNumberInputDialog.qml +++ b/resources/qml/dialogs/PhoneNumberInputDialog.qml @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2021 Mirian Margiani // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/PowerLevelEditor.qml b/resources/qml/dialogs/PowerLevelEditor.qml index 4c23d9af..a6124102 100644 --- a/resources/qml/dialogs/PowerLevelEditor.qml +++ b/resources/qml/dialogs/PowerLevelEditor.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml b/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml index 83af00f7..19a9654a 100644 --- a/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml +++ b/resources/qml/dialogs/PowerLevelSpacesApplyDialog.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RawMessageDialog.qml b/resources/qml/dialogs/RawMessageDialog.qml index 774b078b..4801c179 100644 --- a/resources/qml/dialogs/RawMessageDialog.qml +++ b/resources/qml/dialogs/RawMessageDialog.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/ReadReceipts.qml b/resources/qml/dialogs/ReadReceipts.qml index da87996e..27b03e6a 100644 --- a/resources/qml/dialogs/ReadReceipts.qml +++ b/resources/qml/dialogs/ReadReceipts.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RoomDirectory.qml b/resources/qml/dialogs/RoomDirectory.qml index d143ed43..9f7f6f8f 100644 --- a/resources/qml/dialogs/RoomDirectory.qml +++ b/resources/qml/dialogs/RoomDirectory.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RoomMembers.qml b/resources/qml/dialogs/RoomMembers.qml index b44eeab3..d1584555 100644 --- a/resources/qml/dialogs/RoomMembers.qml +++ b/resources/qml/dialogs/RoomMembers.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/RoomSettings.qml b/resources/qml/dialogs/RoomSettings.qml index f6c296f8..7b04f55b 100644 --- a/resources/qml/dialogs/RoomSettings.qml +++ b/resources/qml/dialogs/RoomSettings.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/dialogs/UserProfile.qml b/resources/qml/dialogs/UserProfile.qml index e57d4de5..684ada8f 100644 --- a/resources/qml/dialogs/UserProfile.qml +++ b/resources/qml/dialogs/UserProfile.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/emoji/EmojiPicker.qml b/resources/qml/emoji/EmojiPicker.qml index 174ea6ae..fee746f6 100644 --- a/resources/qml/emoji/EmojiPicker.qml +++ b/resources/qml/emoji/EmojiPicker.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/emoji/StickerPicker.qml b/resources/qml/emoji/StickerPicker.qml index d38461a1..db39f791 100644 --- a/resources/qml/emoji/StickerPicker.qml +++ b/resources/qml/emoji/StickerPicker.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/LoginPage.qml b/resources/qml/pages/LoginPage.qml index 8261ca60..cda1d0d0 100644 --- a/resources/qml/pages/LoginPage.qml +++ b/resources/qml/pages/LoginPage.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/RegisterPage.qml b/resources/qml/pages/RegisterPage.qml index 4cdd98c1..69172bd7 100644 --- a/resources/qml/pages/RegisterPage.qml +++ b/resources/qml/pages/RegisterPage.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/UserSettingsPage.qml b/resources/qml/pages/UserSettingsPage.qml index becfc612..f49ed396 100644 --- a/resources/qml/pages/UserSettingsPage.qml +++ b/resources/qml/pages/UserSettingsPage.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/pages/WelcomePage.qml b/resources/qml/pages/WelcomePage.qml index e1ecc31d..914de763 100644 --- a/resources/qml/pages/WelcomePage.qml +++ b/resources/qml/pages/WelcomePage.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/NhekoSlider.qml b/resources/qml/ui/NhekoSlider.qml index 623eeb71..a3df54e2 100644 --- a/resources/qml/ui/NhekoSlider.qml +++ b/resources/qml/ui/NhekoSlider.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/Ripple.qml b/resources/qml/ui/Ripple.qml index 0619d924..d6803173 100644 --- a/resources/qml/ui/Ripple.qml +++ b/resources/qml/ui/Ripple.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/Snackbar.qml b/resources/qml/ui/Snackbar.qml index 80c0d888..256933d9 100644 --- a/resources/qml/ui/Snackbar.qml +++ b/resources/qml/ui/Snackbar.qml @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/Spinner.qml b/resources/qml/ui/Spinner.qml index 3681a36b..c386f95c 100644 --- a/resources/qml/ui/Spinner.qml +++ b/resources/qml/ui/Spinner.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/animations/BlinkAnimation.qml b/resources/qml/ui/animations/BlinkAnimation.qml index 87e3b135..d8090db8 100644 --- a/resources/qml/ui/animations/BlinkAnimation.qml +++ b/resources/qml/ui/animations/BlinkAnimation.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/ui/media/MediaControls.qml b/resources/qml/ui/media/MediaControls.qml index d73957ee..b4283e9b 100644 --- a/resources/qml/ui/media/MediaControls.qml +++ b/resources/qml/ui/media/MediaControls.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/ActiveCallBar.qml b/resources/qml/voip/ActiveCallBar.qml index a8a65421..6251b939 100644 --- a/resources/qml/voip/ActiveCallBar.qml +++ b/resources/qml/voip/ActiveCallBar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/CallDevices.qml b/resources/qml/voip/CallDevices.qml index 60db762a..2e2dd5cf 100644 --- a/resources/qml/voip/CallDevices.qml +++ b/resources/qml/voip/CallDevices.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/CallInvite.qml b/resources/qml/voip/CallInvite.qml index beed2e51..84cfdfef 100644 --- a/resources/qml/voip/CallInvite.qml +++ b/resources/qml/voip/CallInvite.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/CallInviteBar.qml b/resources/qml/voip/CallInviteBar.qml index a622ca27..02034305 100644 --- a/resources/qml/voip/CallInviteBar.qml +++ b/resources/qml/voip/CallInviteBar.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/DeviceError.qml b/resources/qml/voip/DeviceError.qml index 3f37612c..9f0c50d8 100644 --- a/resources/qml/voip/DeviceError.qml +++ b/resources/qml/voip/DeviceError.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/PlaceCall.qml b/resources/qml/voip/PlaceCall.qml index 33ad4cfa..c6efbe9e 100644 --- a/resources/qml/voip/PlaceCall.qml +++ b/resources/qml/voip/PlaceCall.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/ScreenShare.qml b/resources/qml/voip/ScreenShare.qml index f27c4485..d08e72de 100644 --- a/resources/qml/voip/ScreenShare.qml +++ b/resources/qml/voip/ScreenShare.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/resources/qml/voip/VideoCall.qml b/resources/qml/voip/VideoCall.qml index 20bb0535..08a94f20 100644 --- a/resources/qml/voip/VideoCall.qml +++ b/resources/qml/voip/VideoCall.qml @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/AliasEditModel.cpp b/src/AliasEditModel.cpp index 3f24a7c5..bb5b9bfe 100644 --- a/src/AliasEditModel.cpp +++ b/src/AliasEditModel.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/AliasEditModel.h b/src/AliasEditModel.h index 8709e945..6cfc34bc 100644 --- a/src/AliasEditModel.h +++ b/src/AliasEditModel.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/AvatarProvider.cpp b/src/AvatarProvider.cpp index cfa536fe..eb1e7e2a 100644 --- a/src/AvatarProvider.cpp +++ b/src/AvatarProvider.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/AvatarProvider.h b/src/AvatarProvider.h index 0bdb8b7c..e0cf6e52 100644 --- a/src/AvatarProvider.h +++ b/src/AvatarProvider.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/BlurhashProvider.cpp b/src/BlurhashProvider.cpp index 0b06b2d0..f8edc791 100644 --- a/src/BlurhashProvider.cpp +++ b/src/BlurhashProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/BlurhashProvider.h b/src/BlurhashProvider.h index c0826e72..aec6ab7c 100644 --- a/src/BlurhashProvider.h +++ b/src/BlurhashProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Cache.cpp b/src/Cache.cpp index 41b84e11..d018665a 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Cache.h b/src/Cache.h index bb779866..c6a61b8f 100644 --- a/src/Cache.h +++ b/src/Cache.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CacheCryptoStructs.h b/src/CacheCryptoStructs.h index 99e563bd..f1d6184a 100644 --- a/src/CacheCryptoStructs.h +++ b/src/CacheCryptoStructs.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CacheStructs.h b/src/CacheStructs.h index 535807fe..bf8741ea 100644 --- a/src/CacheStructs.h +++ b/src/CacheStructs.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Cache_p.h b/src/Cache_p.h index 7b3bf8b0..69d0240e 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -2,6 +2,7 @@ // SPDX-FileCopyrightText: 2019 The nheko authors // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 27019ba3..c5d3d012 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ChatPage.h b/src/ChatPage.h index 4dc219b4..0ac39faa 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Clipboard.cpp b/src/Clipboard.cpp index 72a954ce..51f9b225 100644 --- a/src/Clipboard.cpp +++ b/src/Clipboard.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Clipboard.h b/src/Clipboard.h index 568604b0..213a19fa 100644 --- a/src/Clipboard.h +++ b/src/Clipboard.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ColorImageProvider.cpp b/src/ColorImageProvider.cpp index 6a38c46c..70cc334c 100644 --- a/src/ColorImageProvider.cpp +++ b/src/ColorImageProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ColorImageProvider.h b/src/ColorImageProvider.h index c416d7ec..e8812928 100644 --- a/src/ColorImageProvider.h +++ b/src/ColorImageProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CombinedImagePackModel.cpp b/src/CombinedImagePackModel.cpp index 8847fe65..0841ff7d 100644 --- a/src/CombinedImagePackModel.cpp +++ b/src/CombinedImagePackModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CombinedImagePackModel.h b/src/CombinedImagePackModel.h index 49979fca..2ab82857 100644 --- a/src/CombinedImagePackModel.h +++ b/src/CombinedImagePackModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CommandCompleter.cpp b/src/CommandCompleter.cpp index 307defa4..4cc61291 100644 --- a/src/CommandCompleter.cpp +++ b/src/CommandCompleter.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CommandCompleter.h b/src/CommandCompleter.h index 08272a19..24242209 100644 --- a/src/CommandCompleter.h +++ b/src/CommandCompleter.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CompletionModelRoles.h b/src/CompletionModelRoles.h index 96eb1ade..7fd96599 100644 --- a/src/CompletionModelRoles.h +++ b/src/CompletionModelRoles.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CompletionProxyModel.cpp b/src/CompletionProxyModel.cpp index f46a6367..c7018841 100644 --- a/src/CompletionProxyModel.cpp +++ b/src/CompletionProxyModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/CompletionProxyModel.h b/src/CompletionProxyModel.h index 6bf2eb35..4d9c9f0e 100644 --- a/src/CompletionProxyModel.h +++ b/src/CompletionProxyModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Config.h b/src/Config.h index 5a742337..ba9564f0 100644 --- a/src/Config.h +++ b/src/Config.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/EventAccessors.cpp b/src/EventAccessors.cpp index da0eeff2..86ffc8b3 100644 --- a/src/EventAccessors.cpp +++ b/src/EventAccessors.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/EventAccessors.h b/src/EventAccessors.h index 8e130c29..ce262960 100644 --- a/src/EventAccessors.h +++ b/src/EventAccessors.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ImagePackListModel.cpp b/src/ImagePackListModel.cpp index fac8f10f..1360ed3e 100644 --- a/src/ImagePackListModel.cpp +++ b/src/ImagePackListModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ImagePackListModel.h b/src/ImagePackListModel.h index 9190eb8c..5e1985a7 100644 --- a/src/ImagePackListModel.h +++ b/src/ImagePackListModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/InviteesModel.cpp b/src/InviteesModel.cpp index 8e30847c..52dd4e43 100644 --- a/src/InviteesModel.cpp +++ b/src/InviteesModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/InviteesModel.h b/src/InviteesModel.h index 004f37ca..91b89a21 100644 --- a/src/InviteesModel.h +++ b/src/InviteesModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/JdenticonProvider.cpp b/src/JdenticonProvider.cpp index e9a7c883..fada4c3a 100644 --- a/src/JdenticonProvider.cpp +++ b/src/JdenticonProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/JdenticonProvider.h b/src/JdenticonProvider.h index d8fdbb42..b89126fe 100644 --- a/src/JdenticonProvider.h +++ b/src/JdenticonProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Logging.cpp b/src/Logging.cpp index cd72e395..c41d3f82 100644 --- a/src/Logging.cpp +++ b/src/Logging.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Logging.h b/src/Logging.h index 23ff8236..3d52f2d9 100644 --- a/src/Logging.h +++ b/src/Logging.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 567e8c82..d243691c 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/LoginPage.h b/src/LoginPage.h index 7e9b601c..bca7f9ca 100644 --- a/src/LoginPage.h +++ b/src/LoginPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 1d743844..dcb4be49 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MainWindow.h b/src/MainWindow.h index f567c93e..1664f849 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MatrixClient.cpp b/src/MatrixClient.cpp index b5ea7609..945a5a73 100644 --- a/src/MatrixClient.cpp +++ b/src/MatrixClient.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MatrixClient.h b/src/MatrixClient.h index 2de19e2d..4d313e45 100644 --- a/src/MatrixClient.h +++ b/src/MatrixClient.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MemberList.cpp b/src/MemberList.cpp index 916192c0..e4a3580e 100644 --- a/src/MemberList.cpp +++ b/src/MemberList.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MemberList.h b/src/MemberList.h index f7d2cac6..6a5091db 100644 --- a/src/MemberList.h +++ b/src/MemberList.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index de800e93..33f691da 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/MxcImageProvider.h b/src/MxcImageProvider.h index d8325219..097a3657 100644 --- a/src/MxcImageProvider.h +++ b/src/MxcImageProvider.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/PowerlevelsEditModels.cpp b/src/PowerlevelsEditModels.cpp index 2c2d4a7f..9a8e12dc 100644 --- a/src/PowerlevelsEditModels.cpp +++ b/src/PowerlevelsEditModels.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/PowerlevelsEditModels.h b/src/PowerlevelsEditModels.h index d0593f09..bafedabc 100644 --- a/src/PowerlevelsEditModels.h +++ b/src/PowerlevelsEditModels.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ReadReceiptsModel.cpp b/src/ReadReceiptsModel.cpp index f9de970b..7a81690c 100644 --- a/src/ReadReceiptsModel.cpp +++ b/src/ReadReceiptsModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ReadReceiptsModel.h b/src/ReadReceiptsModel.h index 48b1a598..e072b635 100644 --- a/src/ReadReceiptsModel.h +++ b/src/ReadReceiptsModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp index 82302858..0db0427c 100644 --- a/src/RegisterPage.cpp +++ b/src/RegisterPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RegisterPage.h b/src/RegisterPage.h index 9a4e052b..9d81f477 100644 --- a/src/RegisterPage.h +++ b/src/RegisterPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RoomDirectoryModel.cpp b/src/RoomDirectoryModel.cpp index 428b0040..c6d45995 100644 --- a/src/RoomDirectoryModel.cpp +++ b/src/RoomDirectoryModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RoomDirectoryModel.h b/src/RoomDirectoryModel.h index b0768997..54938561 100644 --- a/src/RoomDirectoryModel.h +++ b/src/RoomDirectoryModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RoomsModel.cpp b/src/RoomsModel.cpp index 3d13ef8b..476a2d8b 100644 --- a/src/RoomsModel.cpp +++ b/src/RoomsModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/RoomsModel.h b/src/RoomsModel.h index 0b7371db..b2f4e44e 100644 --- a/src/RoomsModel.h +++ b/src/RoomsModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/SSOHandler.cpp b/src/SSOHandler.cpp index 36580ae2..4fed776d 100644 --- a/src/SSOHandler.cpp +++ b/src/SSOHandler.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/SSOHandler.h b/src/SSOHandler.h index 3fd4effd..ab7887ad 100644 --- a/src/SSOHandler.h +++ b/src/SSOHandler.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/SingleImagePackModel.cpp b/src/SingleImagePackModel.cpp index 9d8c3409..40f44fb2 100644 --- a/src/SingleImagePackModel.cpp +++ b/src/SingleImagePackModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/SingleImagePackModel.h b/src/SingleImagePackModel.h index 3040f53e..2f558ece 100644 --- a/src/SingleImagePackModel.h +++ b/src/SingleImagePackModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/TrayIcon.cpp b/src/TrayIcon.cpp index 336da129..1e33ac8d 100644 --- a/src/TrayIcon.cpp +++ b/src/TrayIcon.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/TrayIcon.h b/src/TrayIcon.h index 519f9d14..18bbf9b5 100644 --- a/src/TrayIcon.h +++ b/src/TrayIcon.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 145b3b8f..2bb8a118 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 4d805bb7..37a53ab2 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/UsersModel.cpp b/src/UsersModel.cpp index 5d7dd5b7..0399bde6 100644 --- a/src/UsersModel.cpp +++ b/src/UsersModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/UsersModel.h b/src/UsersModel.h index e6d21845..aa71990c 100644 --- a/src/UsersModel.h +++ b/src/UsersModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Utils.cpp b/src/Utils.cpp index b0d84339..8ad84e85 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/Utils.h b/src/Utils.h index 31a1a0de..e6d66f47 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dbus/NhekoDBusApi.cpp b/src/dbus/NhekoDBusApi.cpp index a58812ef..1f029b9c 100644 --- a/src/dbus/NhekoDBusApi.cpp +++ b/src/dbus/NhekoDBusApi.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2010 David Sansome // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dbus/NhekoDBusApi.h b/src/dbus/NhekoDBusApi.h index baf942b1..0cd64685 100644 --- a/src/dbus/NhekoDBusApi.h +++ b/src/dbus/NhekoDBusApi.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dbus/NhekoDBusBackend.cpp b/src/dbus/NhekoDBusBackend.cpp index a7fa2d74..b5c36e3d 100644 --- a/src/dbus/NhekoDBusBackend.cpp +++ b/src/dbus/NhekoDBusBackend.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dbus/NhekoDBusBackend.h b/src/dbus/NhekoDBusBackend.h index 83562da2..e923e388 100644 --- a/src/dbus/NhekoDBusBackend.h +++ b/src/dbus/NhekoDBusBackend.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dialogs/FallbackAuth.cpp b/src/dialogs/FallbackAuth.cpp index 5969be0d..9ed04576 100644 --- a/src/dialogs/FallbackAuth.cpp +++ b/src/dialogs/FallbackAuth.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dialogs/FallbackAuth.h b/src/dialogs/FallbackAuth.h index 579d85b0..96418193 100644 --- a/src/dialogs/FallbackAuth.h +++ b/src/dialogs/FallbackAuth.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dialogs/ReCaptcha.cpp b/src/dialogs/ReCaptcha.cpp index 95a1f85f..138d1ee5 100644 --- a/src/dialogs/ReCaptcha.cpp +++ b/src/dialogs/ReCaptcha.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dialogs/ReCaptcha.h b/src/dialogs/ReCaptcha.h index 815b4bf3..7610ef52 100644 --- a/src/dialogs/ReCaptcha.h +++ b/src/dialogs/ReCaptcha.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dock/Dock.cpp b/src/dock/Dock.cpp index 25b65c0c..1629c12c 100644 --- a/src/dock/Dock.cpp +++ b/src/dock/Dock.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/dock/Dock.h b/src/dock/Dock.h index 33bdeeae..3dcd4593 100644 --- a/src/dock/Dock.h +++ b/src/dock/Dock.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/emoji/EmojiModel.cpp b/src/emoji/EmojiModel.cpp index 5a00c43f..c9e6ffe8 100644 --- a/src/emoji/EmojiModel.cpp +++ b/src/emoji/EmojiModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/emoji/EmojiModel.h b/src/emoji/EmojiModel.h index b33df1c3..5b6cf52f 100644 --- a/src/emoji/EmojiModel.h +++ b/src/emoji/EmojiModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/emoji/MacHelper.h b/src/emoji/MacHelper.h index cc3fd645..8de16c12 100644 --- a/src/emoji/MacHelper.h +++ b/src/emoji/MacHelper.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/emoji/Provider.cpp b/src/emoji/Provider.cpp index 41c254d8..1871a47a 100644 --- a/src/emoji/Provider.cpp +++ b/src/emoji/Provider.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/emoji/Provider.h b/src/emoji/Provider.h index 32544793..07b6375f 100644 --- a/src/emoji/Provider.h +++ b/src/emoji/Provider.h @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/DeviceVerificationFlow.cpp b/src/encryption/DeviceVerificationFlow.cpp index df5e0c3e..0e9043dd 100644 --- a/src/encryption/DeviceVerificationFlow.cpp +++ b/src/encryption/DeviceVerificationFlow.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/DeviceVerificationFlow.h b/src/encryption/DeviceVerificationFlow.h index 7a8500c4..d8fea956 100644 --- a/src/encryption/DeviceVerificationFlow.h +++ b/src/encryption/DeviceVerificationFlow.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/Olm.cpp b/src/encryption/Olm.cpp index a1d311e1..ea30da4c 100644 --- a/src/encryption/Olm.cpp +++ b/src/encryption/Olm.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/Olm.h b/src/encryption/Olm.h index e48fde67..55f7241d 100644 --- a/src/encryption/Olm.h +++ b/src/encryption/Olm.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/SelfVerificationStatus.cpp b/src/encryption/SelfVerificationStatus.cpp index fac7f6a2..1f13a541 100644 --- a/src/encryption/SelfVerificationStatus.cpp +++ b/src/encryption/SelfVerificationStatus.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/SelfVerificationStatus.h b/src/encryption/SelfVerificationStatus.h index e5c1971b..32c40ed4 100644 --- a/src/encryption/SelfVerificationStatus.h +++ b/src/encryption/SelfVerificationStatus.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/VerificationManager.cpp b/src/encryption/VerificationManager.cpp index bb986665..cd13fed6 100644 --- a/src/encryption/VerificationManager.cpp +++ b/src/encryption/VerificationManager.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/encryption/VerificationManager.h b/src/encryption/VerificationManager.h index a6f3f861..c6ac1841 100644 --- a/src/encryption/VerificationManager.h +++ b/src/encryption/VerificationManager.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/main.cpp b/src/main.cpp index d1b4b769..9973b03b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2017 Konstantinos Sideris // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/notifications/MacNotificationDelegate.h b/src/notifications/MacNotificationDelegate.h index e5bbe23b..68365a86 100644 --- a/src/notifications/MacNotificationDelegate.h +++ b/src/notifications/MacNotificationDelegate.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/notifications/Manager.cpp b/src/notifications/Manager.cpp index ba550530..9fd032cd 100644 --- a/src/notifications/Manager.cpp +++ b/src/notifications/Manager.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/notifications/Manager.h b/src/notifications/Manager.h index 9c992767..bf7af29b 100644 --- a/src/notifications/Manager.h +++ b/src/notifications/Manager.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp index 225a6533..294df4db 100644 --- a/src/notifications/ManagerLinux.cpp +++ b/src/notifications/ManagerLinux.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: 2012 Roland Hieber // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/notifications/ManagerMac.cpp b/src/notifications/ManagerMac.cpp index 630080d4..cec87c66 100644 --- a/src/notifications/ManagerMac.cpp +++ b/src/notifications/ManagerMac.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/notifications/ManagerWin.cpp b/src/notifications/ManagerWin.cpp index 2d2dba37..c950b6e4 100644 --- a/src/notifications/ManagerWin.cpp +++ b/src/notifications/ManagerWin.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/notifications/NotificationManagerProxy.h b/src/notifications/NotificationManagerProxy.h index c7a2e234..27f91853 100644 --- a/src/notifications/NotificationManagerProxy.h +++ b/src/notifications/NotificationManagerProxy.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/CommunitiesModel.cpp b/src/timeline/CommunitiesModel.cpp index 96d090f7..9f34c3ff 100644 --- a/src/timeline/CommunitiesModel.cpp +++ b/src/timeline/CommunitiesModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/CommunitiesModel.h b/src/timeline/CommunitiesModel.h index a40b4802..8b9ee911 100644 --- a/src/timeline/CommunitiesModel.h +++ b/src/timeline/CommunitiesModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/DelegateChooser.cpp b/src/timeline/DelegateChooser.cpp index c8ab1511..fde9e08d 100644 --- a/src/timeline/DelegateChooser.cpp +++ b/src/timeline/DelegateChooser.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/DelegateChooser.h b/src/timeline/DelegateChooser.h index d34d13e4..b605837b 100644 --- a/src/timeline/DelegateChooser.h +++ b/src/timeline/DelegateChooser.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index 65efc0b4..66eed82f 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/EventStore.h b/src/timeline/EventStore.h index 108fa735..bfca7dbe 100644 --- a/src/timeline/EventStore.h +++ b/src/timeline/EventStore.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index 94955152..1cec5426 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/InputBar.h b/src/timeline/InputBar.h index 125591d4..eb261b02 100644 --- a/src/timeline/InputBar.h +++ b/src/timeline/InputBar.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/Permissions.cpp b/src/timeline/Permissions.cpp index 78bb3cf6..a8d8e0ee 100644 --- a/src/timeline/Permissions.cpp +++ b/src/timeline/Permissions.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/Permissions.h b/src/timeline/Permissions.h index 1b3f55e4..bfc2b04a 100644 --- a/src/timeline/Permissions.h +++ b/src/timeline/Permissions.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/PresenceEmitter.cpp b/src/timeline/PresenceEmitter.cpp index 370bbb01..63cadcd1 100644 --- a/src/timeline/PresenceEmitter.cpp +++ b/src/timeline/PresenceEmitter.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/PresenceEmitter.h b/src/timeline/PresenceEmitter.h index c1f07c76..80352a57 100644 --- a/src/timeline/PresenceEmitter.h +++ b/src/timeline/PresenceEmitter.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/Reaction.cpp b/src/timeline/Reaction.cpp index 0047d1e5..0c64d7c6 100644 --- a/src/timeline/Reaction.cpp +++ b/src/timeline/Reaction.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/Reaction.h b/src/timeline/Reaction.h index 9ed3f801..3a83a48b 100644 --- a/src/timeline/Reaction.h +++ b/src/timeline/Reaction.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index 827cbed1..64eca182 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/RoomlistModel.h b/src/timeline/RoomlistModel.h index 0d52102d..81907dff 100644 --- a/src/timeline/RoomlistModel.h +++ b/src/timeline/RoomlistModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/TimelineFilter.cpp b/src/timeline/TimelineFilter.cpp index 9a9df6be..d59d517e 100644 --- a/src/timeline/TimelineFilter.cpp +++ b/src/timeline/TimelineFilter.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/TimelineFilter.h b/src/timeline/TimelineFilter.h index c35f8da3..9a4d44fe 100644 --- a/src/timeline/TimelineFilter.h +++ b/src/timeline/TimelineFilter.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index f3d92e31..7b50da59 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 59ad1b37..cb8aa380 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 12a247c8..ba586ef9 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h index c305fe66..9d8c6844 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/HiddenEvents.cpp b/src/ui/HiddenEvents.cpp index 4686dfef..06a15e32 100644 --- a/src/ui/HiddenEvents.cpp +++ b/src/ui/HiddenEvents.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/HiddenEvents.h b/src/ui/HiddenEvents.h index 3c0e0c67..cac7dad6 100644 --- a/src/ui/HiddenEvents.h +++ b/src/ui/HiddenEvents.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/MxcAnimatedImage.cpp b/src/ui/MxcAnimatedImage.cpp index 7f7210e3..f7ac049f 100644 --- a/src/ui/MxcAnimatedImage.cpp +++ b/src/ui/MxcAnimatedImage.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/MxcAnimatedImage.h b/src/ui/MxcAnimatedImage.h index 8891e57e..407888e4 100644 --- a/src/ui/MxcAnimatedImage.h +++ b/src/ui/MxcAnimatedImage.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/MxcMediaProxy.cpp b/src/ui/MxcMediaProxy.cpp index dadd4478..46d7430f 100644 --- a/src/ui/MxcMediaProxy.cpp +++ b/src/ui/MxcMediaProxy.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/MxcMediaProxy.h b/src/ui/MxcMediaProxy.h index 1b6bf34e..b87e97f0 100644 --- a/src/ui/MxcMediaProxy.h +++ b/src/ui/MxcMediaProxy.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoCursorShape.cpp b/src/ui/NhekoCursorShape.cpp index 1c5918b4..a7ace9a1 100644 --- a/src/ui/NhekoCursorShape.cpp +++ b/src/ui/NhekoCursorShape.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoCursorShape.h b/src/ui/NhekoCursorShape.h index 1f91d7de..f3a1864f 100644 --- a/src/ui/NhekoCursorShape.h +++ b/src/ui/NhekoCursorShape.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoDropArea.cpp b/src/ui/NhekoDropArea.cpp index 736f5172..32047e6a 100644 --- a/src/ui/NhekoDropArea.cpp +++ b/src/ui/NhekoDropArea.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoDropArea.h b/src/ui/NhekoDropArea.h index 70da4451..3d02d52a 100644 --- a/src/ui/NhekoDropArea.h +++ b/src/ui/NhekoDropArea.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoEventObserver.cpp b/src/ui/NhekoEventObserver.cpp index 5e67cec4..a6d4ca11 100644 --- a/src/ui/NhekoEventObserver.cpp +++ b/src/ui/NhekoEventObserver.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoEventObserver.h b/src/ui/NhekoEventObserver.h index 6d14f30f..3d43e6d2 100644 --- a/src/ui/NhekoEventObserver.h +++ b/src/ui/NhekoEventObserver.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoGlobalObject.cpp b/src/ui/NhekoGlobalObject.cpp index 0573d5ee..99921d79 100644 --- a/src/ui/NhekoGlobalObject.cpp +++ b/src/ui/NhekoGlobalObject.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/NhekoGlobalObject.h b/src/ui/NhekoGlobalObject.h index 6ef71bcc..690761a5 100644 --- a/src/ui/NhekoGlobalObject.h +++ b/src/ui/NhekoGlobalObject.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/RoomSettings.cpp b/src/ui/RoomSettings.cpp index 67be0bbb..380ed295 100644 --- a/src/ui/RoomSettings.cpp +++ b/src/ui/RoomSettings.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/RoomSettings.h b/src/ui/RoomSettings.h index 99d27eee..3113d3e3 100644 --- a/src/ui/RoomSettings.h +++ b/src/ui/RoomSettings.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/RoomSummary.cpp b/src/ui/RoomSummary.cpp index 6623da10..3ac04d34 100644 --- a/src/ui/RoomSummary.cpp +++ b/src/ui/RoomSummary.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/RoomSummary.h b/src/ui/RoomSummary.h index 30d47eb1..f985c634 100644 --- a/src/ui/RoomSummary.h +++ b/src/ui/RoomSummary.h @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/Theme.cpp b/src/ui/Theme.cpp index 02450230..add2e0f9 100644 --- a/src/ui/Theme.cpp +++ b/src/ui/Theme.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/Theme.h b/src/ui/Theme.h index 140e60b3..1d5742cf 100644 --- a/src/ui/Theme.h +++ b/src/ui/Theme.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/ThemeManager.cpp b/src/ui/ThemeManager.cpp index e275fa90..fb044968 100644 --- a/src/ui/ThemeManager.cpp +++ b/src/ui/ThemeManager.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/ThemeManager.h b/src/ui/ThemeManager.h index 1924611d..a5f93468 100644 --- a/src/ui/ThemeManager.h +++ b/src/ui/ThemeManager.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/UIA.cpp b/src/ui/UIA.cpp index d67d1ba9..53715340 100644 --- a/src/ui/UIA.cpp +++ b/src/ui/UIA.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/UIA.h b/src/ui/UIA.h index 73a58ffe..8499f12b 100644 --- a/src/ui/UIA.h +++ b/src/ui/UIA.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp index a3bc87de..cbeb1f4f 100644 --- a/src/ui/UserProfile.cpp +++ b/src/ui/UserProfile.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h index facae6ec..206b607a 100644 --- a/src/ui/UserProfile.h +++ b/src/ui/UserProfile.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/voip/CallDevices.cpp b/src/voip/CallDevices.cpp index 49eca6d5..e47b5960 100644 --- a/src/voip/CallDevices.cpp +++ b/src/voip/CallDevices.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/voip/CallDevices.h b/src/voip/CallDevices.h index 8cfcdd1c..951f1ab2 100644 --- a/src/voip/CallDevices.h +++ b/src/voip/CallDevices.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/voip/CallManager.cpp b/src/voip/CallManager.cpp index 1bb1700f..3d795fc1 100644 --- a/src/voip/CallManager.cpp +++ b/src/voip/CallManager.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/voip/CallManager.h b/src/voip/CallManager.h index 3011444f..4716de7f 100644 --- a/src/voip/CallManager.h +++ b/src/voip/CallManager.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/voip/WebRTCSession.cpp b/src/voip/WebRTCSession.cpp index 706a69d9..73e71030 100644 --- a/src/voip/WebRTCSession.cpp +++ b/src/voip/WebRTCSession.cpp @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later diff --git a/src/voip/WebRTCSession.h b/src/voip/WebRTCSession.h index 081611e5..da13e356 100644 --- a/src/voip/WebRTCSession.h +++ b/src/voip/WebRTCSession.h @@ -1,5 +1,6 @@ // SPDX-FileCopyrightText: 2021 Nheko Contributors // SPDX-FileCopyrightText: 2022 Nheko Contributors +// SPDX-FileCopyrightText: 2023 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later