From 9228196f5b8882ce8011c5b0dc71f14ee42675bf Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Thu, 22 Oct 2020 17:15:18 +0200 Subject: [PATCH 01/81] Don't copy array for reverse iteration Copying an array just for the sake of reverse iteration is a bit wasteful, especially with bigger arrays. Signed-off-by: Vincent Petry --- src/components/MessagesList/MessagesList.vue | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/components/MessagesList/MessagesList.vue b/src/components/MessagesList/MessagesList.vue index cfeb2fd379c..340341d6d32 100644 --- a/src/components/MessagesList/MessagesList.vue +++ b/src/components/MessagesList/MessagesList.vue @@ -596,14 +596,13 @@ export default { * @returns {string} The last known message id. */ getLastKnownMessageId() { - // Reverse a copy of the messages array - const reversedMessages = this.messagesList.slice().reverse() - // Get the id of the last non-temporary message - for (const message of reversedMessages) { - const id = message.id.toString() - if (!id.startsWith('temp-')) { - return id + let i = this.messagesList.length - 1 + + while (i >= 0) { + if (!this.messagesList[i].id.toString().startsWith('temp-')) { + return this.messagesList[i].id } + i-- } return '0' }, From 4c6f9835b530d07e1dbcc6705d3764eec0ac9717 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2020 07:25:46 +0000 Subject: [PATCH 02/81] Bump style-loader from 1.3.0 to 2.0.0 Bumps [style-loader](https://github.com/webpack-contrib/style-loader) from 1.3.0 to 2.0.0. - [Release notes](https://github.com/webpack-contrib/style-loader/releases) - [Changelog](https://github.com/webpack-contrib/style-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/style-loader/compare/v1.3.0...v2.0.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 49 +++++++++++++++++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54d2936a0c9..2e306d2c8be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19516,21 +19516,51 @@ "dev": true }, "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "requires": { "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" + "schema-utils": "^3.0.0" }, "dependencies": { + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "loader-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", @@ -19541,6 +19571,17 @@ "emojis-list": "^3.0.0", "json5": "^2.1.2" } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, diff --git a/package.json b/package.json index 0b8542def03..4142a2400e2 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "eslint-plugin-vue": "^5.2.3", "node-sass": "^4.14.1", "sass-loader": "^10.0.4", - "style-loader": "^1.3.0", + "style-loader": "^2.0.0", "stylelint": "^13.7.2", "stylelint-config-recommended-scss": "^4.2.0", "stylelint-scss": "^3.18.0", From 57f382dc3341302747c95dd98a479125f9cfbb73 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Tue, 27 Oct 2020 03:11:58 +0000 Subject: [PATCH 03/81] [tx-robot] updated from transifex --- l10n/de.js | 18 +++++++++--------- l10n/de.json | 18 +++++++++--------- l10n/de_DE.js | 8 ++++---- l10n/de_DE.json | 8 ++++---- l10n/pl.js | 8 ++++---- l10n/pl.json | 8 ++++---- l10n/zh_CN.js | 2 ++ l10n/zh_CN.json | 2 ++ 8 files changed, 38 insertions(+), 34 deletions(-) diff --git a/l10n/de.js b/l10n/de.js index 6a77fafb3c5..bc7e505d788 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -230,7 +230,7 @@ OC.L10N.register( "Bhutan" : "Bhutan", "Bouvet Island" : "Bouvetinsel", "Botswana" : "Botswana", - "Belarus" : "Weißrussland", + "Belarus" : "Belarus", "Belize" : "Belize", "Canada" : "Kanada", "Cocos (Keeling) Islands" : "Kokosinseln", @@ -433,7 +433,7 @@ OC.L10N.register( "Holy See" : "Vatikanstadt", "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", "Venezuela, Bolivarian Republic of" : "Venezuela", - "Virgin Islands, British" : "Jungferninseln (Britisch)", + "Virgin Islands, British" : "Jungferninseln (britisch)", "Virgin Islands, U.S." : "Jungferninseln, U.S.", "Viet Nam" : "Vietnam", "Vanuatu" : "Vanuatu", @@ -622,7 +622,7 @@ OC.L10N.register( "Mute" : "Stummschalten", "Stop following" : "Nicht mehr folgen", "You need to be logged in to upload files" : "Sie müssen angemeldet sein, um Dateien hochzuladen", - "This conversation is read-only" : "Die Unterhaltung ist schreibgeschützt", + "This conversation is read-only" : "Diese Unterhaltung ist schreibgeschützt", "Drop your files to upload" : "Dateien zum Hochladen hineinziehen", "Call in progress" : "Anruf ist aktiv", "Favorite" : "Favorit", @@ -664,7 +664,7 @@ OC.L10N.register( "An error occurred while performing the search" : "Es ist ein Fehler während der Suche aufgetreten", "Conversation name" : "Name der Unterhaltung", "Allow guests to join via link " : "Gästen die Teilnahme per Link erlauben", - "Search conversations or users" : "Suche nach Unterhaltungen oder Benutzern", + "Search conversations or users" : "Nach Unterhaltungen oder Benutzern suchen", "You are currently waiting in the lobby" : "Du wartest derzeit in der Lobby", "You are currently waiting in the lobby. This meeting is scheduled for {startTime}" : "Du wartest aktuell in der Lobby. Dieses Meeting ist für {startTime} geplant", "Calls are not supported in your browser" : "Anrufe werden von Deinem Browser nicht unterstützt", @@ -681,7 +681,7 @@ OC.L10N.register( "Select camera" : "Kamera auswählen", "Reply" : "Antworten", "Remove" : "Entfernen", - "[Unknown username]" : "[Unknown username]", + "[Unknown username]" : "[Unbekannter Benutzername]", "Scroll to bottom" : "Nach unten blättern", "Today" : "Heute", "Yesterday" : "Gestern", @@ -723,7 +723,7 @@ OC.L10N.register( "Zulip channel" : "Zulip-Kanal", "API token" : "API-Token", "Slack channel" : "Slack-Kanal", - "Server ID or name" : "Server-ID oder Name", + "Server ID or name" : "Server-ID oder -Name", "Channel ID or name" : "Kanal-ID oder -Name", "Chat ID" : "Chat-ID", "Login" : "Anmeldung", @@ -778,7 +778,7 @@ OC.L10N.register( "Attachments folder" : "Ordner für Anhänge", "Keyboard shortcuts" : "Tastaturkürzel", "Speed up your Talk experience with these quick shortcuts." : "Beschleunige Dein Gesprächserlebnis mit diesen Tastaturkürzeln.", - "Focus the chat input" : "Chat-Eingabe fokusieren", + "Focus the chat input" : "Chat-Eingabe in den Vordergrund", "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", "Fullscreen the chat or call" : "Vollbild des Chats oder Anrufs", "Search" : "Suche", @@ -867,11 +867,11 @@ OC.L10N.register( "Contacts" : "Kontakte", "Contacts, groups and circles" : "Kontakte, Gruppen und Kreise", "Contacts and groups" : "Kontakte und Gruppen", - "Contacts and circles" : "Kantakte und Kreise", + "Contacts and circles" : "Kontakte und Kreise", "Loading contacts" : "Lade Kontakte", "Select participants" : "Teilnehmer auswählen", "Search conversations or contacts" : "Suche nach Unterhaltungen oder Kontakten", - "[Unknown user name]" : "[Unknown user name]", + "[Unknown user name]" : "[Unbekannter Benutzername]", "Search for more contacts" : "Weitere Kontakte suchen", "Contacts loading" : "Lade Kontakte", "Add participants to the conversation" : "Teilnehmer zur Unterhaltung hinzufügen", diff --git a/l10n/de.json b/l10n/de.json index 60bcdc5da37..6d2e9fb97a5 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -228,7 +228,7 @@ "Bhutan" : "Bhutan", "Bouvet Island" : "Bouvetinsel", "Botswana" : "Botswana", - "Belarus" : "Weißrussland", + "Belarus" : "Belarus", "Belize" : "Belize", "Canada" : "Kanada", "Cocos (Keeling) Islands" : "Kokosinseln", @@ -431,7 +431,7 @@ "Holy See" : "Vatikanstadt", "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", "Venezuela, Bolivarian Republic of" : "Venezuela", - "Virgin Islands, British" : "Jungferninseln (Britisch)", + "Virgin Islands, British" : "Jungferninseln (britisch)", "Virgin Islands, U.S." : "Jungferninseln, U.S.", "Viet Nam" : "Vietnam", "Vanuatu" : "Vanuatu", @@ -620,7 +620,7 @@ "Mute" : "Stummschalten", "Stop following" : "Nicht mehr folgen", "You need to be logged in to upload files" : "Sie müssen angemeldet sein, um Dateien hochzuladen", - "This conversation is read-only" : "Die Unterhaltung ist schreibgeschützt", + "This conversation is read-only" : "Diese Unterhaltung ist schreibgeschützt", "Drop your files to upload" : "Dateien zum Hochladen hineinziehen", "Call in progress" : "Anruf ist aktiv", "Favorite" : "Favorit", @@ -662,7 +662,7 @@ "An error occurred while performing the search" : "Es ist ein Fehler während der Suche aufgetreten", "Conversation name" : "Name der Unterhaltung", "Allow guests to join via link " : "Gästen die Teilnahme per Link erlauben", - "Search conversations or users" : "Suche nach Unterhaltungen oder Benutzern", + "Search conversations or users" : "Nach Unterhaltungen oder Benutzern suchen", "You are currently waiting in the lobby" : "Du wartest derzeit in der Lobby", "You are currently waiting in the lobby. This meeting is scheduled for {startTime}" : "Du wartest aktuell in der Lobby. Dieses Meeting ist für {startTime} geplant", "Calls are not supported in your browser" : "Anrufe werden von Deinem Browser nicht unterstützt", @@ -679,7 +679,7 @@ "Select camera" : "Kamera auswählen", "Reply" : "Antworten", "Remove" : "Entfernen", - "[Unknown username]" : "[Unknown username]", + "[Unknown username]" : "[Unbekannter Benutzername]", "Scroll to bottom" : "Nach unten blättern", "Today" : "Heute", "Yesterday" : "Gestern", @@ -721,7 +721,7 @@ "Zulip channel" : "Zulip-Kanal", "API token" : "API-Token", "Slack channel" : "Slack-Kanal", - "Server ID or name" : "Server-ID oder Name", + "Server ID or name" : "Server-ID oder -Name", "Channel ID or name" : "Kanal-ID oder -Name", "Chat ID" : "Chat-ID", "Login" : "Anmeldung", @@ -776,7 +776,7 @@ "Attachments folder" : "Ordner für Anhänge", "Keyboard shortcuts" : "Tastaturkürzel", "Speed up your Talk experience with these quick shortcuts." : "Beschleunige Dein Gesprächserlebnis mit diesen Tastaturkürzeln.", - "Focus the chat input" : "Chat-Eingabe fokusieren", + "Focus the chat input" : "Chat-Eingabe in den Vordergrund", "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", "Fullscreen the chat or call" : "Vollbild des Chats oder Anrufs", "Search" : "Suche", @@ -865,11 +865,11 @@ "Contacts" : "Kontakte", "Contacts, groups and circles" : "Kontakte, Gruppen und Kreise", "Contacts and groups" : "Kontakte und Gruppen", - "Contacts and circles" : "Kantakte und Kreise", + "Contacts and circles" : "Kontakte und Kreise", "Loading contacts" : "Lade Kontakte", "Select participants" : "Teilnehmer auswählen", "Search conversations or contacts" : "Suche nach Unterhaltungen oder Kontakten", - "[Unknown user name]" : "[Unknown user name]", + "[Unknown user name]" : "[Unbekannter Benutzername]", "Search for more contacts" : "Weitere Kontakte suchen", "Contacts loading" : "Lade Kontakte", "Add participants to the conversation" : "Teilnehmer zur Unterhaltung hinzufügen", diff --git a/l10n/de_DE.js b/l10n/de_DE.js index 1e33cfeff2e..ca7b7047f5e 100644 --- a/l10n/de_DE.js +++ b/l10n/de_DE.js @@ -230,7 +230,7 @@ OC.L10N.register( "Bhutan" : "Bhutan", "Bouvet Island" : "Bouvetinsel", "Botswana" : "Botswana", - "Belarus" : "Weißrussland", + "Belarus" : "Belarus", "Belize" : "Belize", "Canada" : "Kanada", "Cocos (Keeling) Islands" : "Kokosinseln", @@ -433,7 +433,7 @@ OC.L10N.register( "Holy See" : "Vatikanstadt", "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", "Venezuela, Bolivarian Republic of" : "Venezuela", - "Virgin Islands, British" : "Jungferninseln (Britisch)", + "Virgin Islands, British" : "Jungferninseln (britisch)", "Virgin Islands, U.S." : "Jungferninseln, U.S.", "Viet Nam" : "Vietnam", "Vanuatu" : "Vanuatu", @@ -681,7 +681,7 @@ OC.L10N.register( "Select camera" : "Kamera auswählen", "Reply" : "Antworten", "Remove" : "Entfernen", - "[Unknown username]" : "[Unknown username]", + "[Unknown username]" : "[Unbekannter Benutzername]", "Scroll to bottom" : "Nach unten blättern", "Today" : "Heute", "Yesterday" : "Gestern", @@ -783,7 +783,7 @@ OC.L10N.register( "Fullscreen the chat or call" : "Vollbild des Chats oder Anrufs", "Search" : "Suche", "Shortcuts while in a call" : "Tastaturkürzel während eines Anrufs", - "Video on and off" : "Video ein- und ausschalten", + "Video on and off" : "Kamera ein- und ausschalten", "Microphone on and off" : "Mikrofon an- und ausschalten", "Choose in which folder attachments should be saved." : "Bitte auswählen, in welchen Ordner die Anhänge gespeichert werden sollen.", "Select location for attachments" : "Speicherort für Anhänge auswählen", diff --git a/l10n/de_DE.json b/l10n/de_DE.json index 60b62f9bc4a..8aedeafef6d 100644 --- a/l10n/de_DE.json +++ b/l10n/de_DE.json @@ -228,7 +228,7 @@ "Bhutan" : "Bhutan", "Bouvet Island" : "Bouvetinsel", "Botswana" : "Botswana", - "Belarus" : "Weißrussland", + "Belarus" : "Belarus", "Belize" : "Belize", "Canada" : "Kanada", "Cocos (Keeling) Islands" : "Kokosinseln", @@ -431,7 +431,7 @@ "Holy See" : "Vatikanstadt", "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", "Venezuela, Bolivarian Republic of" : "Venezuela", - "Virgin Islands, British" : "Jungferninseln (Britisch)", + "Virgin Islands, British" : "Jungferninseln (britisch)", "Virgin Islands, U.S." : "Jungferninseln, U.S.", "Viet Nam" : "Vietnam", "Vanuatu" : "Vanuatu", @@ -679,7 +679,7 @@ "Select camera" : "Kamera auswählen", "Reply" : "Antworten", "Remove" : "Entfernen", - "[Unknown username]" : "[Unknown username]", + "[Unknown username]" : "[Unbekannter Benutzername]", "Scroll to bottom" : "Nach unten blättern", "Today" : "Heute", "Yesterday" : "Gestern", @@ -781,7 +781,7 @@ "Fullscreen the chat or call" : "Vollbild des Chats oder Anrufs", "Search" : "Suche", "Shortcuts while in a call" : "Tastaturkürzel während eines Anrufs", - "Video on and off" : "Video ein- und ausschalten", + "Video on and off" : "Kamera ein- und ausschalten", "Microphone on and off" : "Mikrofon an- und ausschalten", "Choose in which folder attachments should be saved." : "Bitte auswählen, in welchen Ordner die Anhänge gespeichert werden sollen.", "Select location for attachments" : "Speicherort für Anhänge auswählen", diff --git a/l10n/pl.js b/l10n/pl.js index 28478d52aee..7b604d6e3fe 100644 --- a/l10n/pl.js +++ b/l10n/pl.js @@ -474,7 +474,7 @@ OC.L10N.register( "Users and moderators" : "Użytkownicy i moderatorzy", "Moderators only" : "Tylko moderatorzy", "Save changes" : "Zapisz zmiany", - "Saving …" : "Zapisywanie...", + "Saving …" : "Zapisywanie…", "Saved!" : "Zapisano!", "None" : "Żaden", "User" : "Użytkownik", @@ -525,11 +525,11 @@ OC.L10N.register( "_%n user_::_%n users_" : ["%n użytkownik","%n użytkowników","%n użytkowników","%n użytkowników"], "Matterbridge integration" : "Integracja z Matterbridge", "Enable Matterbridge integration" : "Włącz integrację Matterbridge", - "Downloading …" : "Pobieranie...", + "Downloading …" : "Pobieranie…", "Install Talk Matterbridge" : "Zainstaluj Talk Matterbridge", "Installed version: {version}" : "Zainstalowana wersja: {version}", "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}appstore{linkend}." : "Możesz zainstalować Matterbridge, aby połączyć Nextcloud Talk z innymi usługami. Odwiedź {linkstart1}stronę GitHub{linkend}, aby uzyskać więcej informacji. Pobieranie i instalowanie aplikacji może chwilę potrwać. W przypadku przekroczenia limitu czasu, zainstaluj ją ręcznie ze {linkstart2}sklepu z aplikacjami{linkend}.", - "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Plik binarny Matterbridge ma nieprawidłowe uprawnienia. Upewnij się, że dany plik należy do właściwego użytkownika i można go uruchomić. Znajduje się on w \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Plik binarny Matterbridge ma nieprawidłowe uprawnienia. Upewnij się, że dany plik należy do właściwego użytkownika i można go uruchomić. Znajduje się on w \"/…/nextcloud/apps/talk_matterbridge/bin/\".", "Matterbridge binary was not found or couldn't be executed." : "Nie znaleziono pliku binarnego Matterbridge lub nie można go uruchomić.", "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Możesz również ustawić ścieżkę do pliku binarnego Matterbridge ręcznie za pomocą pliku config. Więcej informacji znajdziesz w {linkstart}dokumentacji integracji Matterbridge{linkend}.", "An error occurred while installing the Matterbridge app." : "Wystąpił błąd podczas instalowania aplikacji Matterbridge.", @@ -760,7 +760,7 @@ OC.L10N.register( "Add groups" : "Dodaj grupy", "Add emails" : "Dodaj e-maile", "Add circles" : "Dodaj kręgi", - "Searching …" : "Wyszukiwanie...", + "Searching …" : "Wyszukiwanie…", "No results" : "Brak wyników", "Search for more users" : "Wyszukaj więcej użytkowników", "Add users, groups or circles" : "Dodaj użytkowników, grupy lub kręgi", diff --git a/l10n/pl.json b/l10n/pl.json index 82bca8a74e4..87ffae8a39b 100644 --- a/l10n/pl.json +++ b/l10n/pl.json @@ -472,7 +472,7 @@ "Users and moderators" : "Użytkownicy i moderatorzy", "Moderators only" : "Tylko moderatorzy", "Save changes" : "Zapisz zmiany", - "Saving …" : "Zapisywanie...", + "Saving …" : "Zapisywanie…", "Saved!" : "Zapisano!", "None" : "Żaden", "User" : "Użytkownik", @@ -523,11 +523,11 @@ "_%n user_::_%n users_" : ["%n użytkownik","%n użytkowników","%n użytkowników","%n użytkowników"], "Matterbridge integration" : "Integracja z Matterbridge", "Enable Matterbridge integration" : "Włącz integrację Matterbridge", - "Downloading …" : "Pobieranie...", + "Downloading …" : "Pobieranie…", "Install Talk Matterbridge" : "Zainstaluj Talk Matterbridge", "Installed version: {version}" : "Zainstalowana wersja: {version}", "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}appstore{linkend}." : "Możesz zainstalować Matterbridge, aby połączyć Nextcloud Talk z innymi usługami. Odwiedź {linkstart1}stronę GitHub{linkend}, aby uzyskać więcej informacji. Pobieranie i instalowanie aplikacji może chwilę potrwać. W przypadku przekroczenia limitu czasu, zainstaluj ją ręcznie ze {linkstart2}sklepu z aplikacjami{linkend}.", - "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Plik binarny Matterbridge ma nieprawidłowe uprawnienia. Upewnij się, że dany plik należy do właściwego użytkownika i można go uruchomić. Znajduje się on w \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Plik binarny Matterbridge ma nieprawidłowe uprawnienia. Upewnij się, że dany plik należy do właściwego użytkownika i można go uruchomić. Znajduje się on w \"/…/nextcloud/apps/talk_matterbridge/bin/\".", "Matterbridge binary was not found or couldn't be executed." : "Nie znaleziono pliku binarnego Matterbridge lub nie można go uruchomić.", "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Możesz również ustawić ścieżkę do pliku binarnego Matterbridge ręcznie za pomocą pliku config. Więcej informacji znajdziesz w {linkstart}dokumentacji integracji Matterbridge{linkend}.", "An error occurred while installing the Matterbridge app." : "Wystąpił błąd podczas instalowania aplikacji Matterbridge.", @@ -758,7 +758,7 @@ "Add groups" : "Dodaj grupy", "Add emails" : "Dodaj e-maile", "Add circles" : "Dodaj kręgi", - "Searching …" : "Wyszukiwanie...", + "Searching …" : "Wyszukiwanie…", "No results" : "Brak wyników", "Search for more users" : "Wyszukaj więcej użytkowników", "Add users, groups or circles" : "Dodaj użytkowników, grupy lub kręgi", diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js index 17b3aaf4226..bb95ea7dc57 100644 --- a/l10n/zh_CN.js +++ b/l10n/zh_CN.js @@ -595,6 +595,8 @@ OC.L10N.register( "Link to a conversation" : "链接到一个会话", "Select conversation" : "选择会话", "Join a conversation or start a new one" : "加入一个会话或开始新会话", + "Do not disturb" : "请勿打扰", + "Away" : "离开", "Error while sharing file" : "共享文件时出错", "Error while uploading file" : "上传文件时出错", "Sending signaling message has failed." : "发送信令消息失败。", diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json index d2dd079be98..f58f52a9462 100644 --- a/l10n/zh_CN.json +++ b/l10n/zh_CN.json @@ -593,6 +593,8 @@ "Link to a conversation" : "链接到一个会话", "Select conversation" : "选择会话", "Join a conversation or start a new one" : "加入一个会话或开始新会话", + "Do not disturb" : "请勿打扰", + "Away" : "离开", "Error while sharing file" : "共享文件时出错", "Error while uploading file" : "上传文件时出错", "Sending signaling message has failed." : "发送信令消息失败。", From 392529659ca4e23da900a75fa2169e8fd83790fe Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 27 Oct 2020 08:23:02 +0000 Subject: [PATCH 04/81] Bump eslint-plugin-standard from 4.0.1 to 4.0.2 Bumps [eslint-plugin-standard](https://github.com/standard/eslint-plugin-standard) from 4.0.1 to 4.0.2. - [Release notes](https://github.com/standard/eslint-plugin-standard/releases) - [Commits](https://github.com/standard/eslint-plugin-standard/compare/v4.0.1...v4.0.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f5c5625c1b..9f83ad84436 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5294,9 +5294,9 @@ } }, "vue-loader-v16": { - "version": "npm:vue-loader@16.0.0-beta.8", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.8.tgz", - "integrity": "sha512-oouKUQWWHbSihqSD7mhymGPX1OQ4hedzAHyvm8RdyHh6m3oIvoRF+NM45i/bhNOlo8jCnuJhaSUf/6oDjv978g==", + "version": "npm:vue-loader@16.0.0-beta.9", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.9.tgz", + "integrity": "sha512-mu9pg6554GbXDSO8LlxkQM6qUJzUkb/A0FJc9LgRqnU9MCnhzEXwCt1Zx5NObvFpzs2mH2dH/uUCDwL8Qaz9sA==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -10197,9 +10197,9 @@ "dev": true }, "eslint-plugin-standard": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", - "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.2.tgz", + "integrity": "sha512-nKptN8l7jksXkwFk++PhJB3cCDTcXOEyhISIN86Ue2feJ1LFyY3PrY3/xT2keXlJSY5bpmbiTG0f885/YKAvTA==", "dev": true }, "eslint-plugin-vue": { diff --git a/package.json b/package.json index 246da4cb149..6178cb6d5a9 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.1", + "eslint-plugin-standard": "^4.0.2", "eslint-plugin-vue": "^5.2.3", "node-sass": "^4.14.1", "sass-loader": "^10.0.4", From db05c33a7f22df3cb2d37614ccf52295b3950f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20R=C3=B6hrl?= Date: Tue, 27 Oct 2020 10:58:17 +0100 Subject: [PATCH 05/81] change sort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakob Röhrl --- src/views/Dashboard.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue index 98b4c20cc7a..8bd49802888 100644 --- a/src/views/Dashboard.vue +++ b/src/views/Dashboard.vue @@ -163,7 +163,7 @@ export default { this.roomOptions = importantRooms.slice(0, 7) this.hasImportantConversations = true } else { - this.roomOptions = rooms.sort(propertySort(['-lastActivity'])).slice(0, 5) + this.roomOptions = rooms.sort(propertySort(['-isFavorite', '-lastActivity'])).slice(0, 5) this.hasImportantConversations = false } From 615039dbf38c43d5f7c70ddf120b47b29de4775f Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Wed, 28 Oct 2020 03:12:16 +0000 Subject: [PATCH 06/81] [tx-robot] updated from transifex --- l10n/de.js | 6 +++--- l10n/de.json | 6 +++--- l10n/de_DE.js | 2 +- l10n/de_DE.json | 2 +- l10n/eu.js | 2 ++ l10n/eu.json | 2 ++ l10n/sl.js | 5 +++++ l10n/sl.json | 5 +++++ 8 files changed, 22 insertions(+), 8 deletions(-) diff --git a/l10n/de.js b/l10n/de.js index bc7e505d788..190c7345ef1 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -474,7 +474,7 @@ OC.L10N.register( "Users and moderators" : "Benutzer und Moderatoren", "Moderators only" : "Nur Moderatoren", "Save changes" : "Änderungen speichern", - "Saving …" : "Speichern ...", + "Saving …" : "Speichern …", "Saved!" : "Gespeichert!", "None" : "Keine", "User" : "Benutzer", @@ -529,7 +529,7 @@ OC.L10N.register( "Install Talk Matterbridge" : "Talk-Matterbridge installieren", "Installed version: {version}" : "Installierte Version: {version}", "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}appstore{linkend}." : "Du kannst Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuche deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installiere sie bitte manuell über den {linkstart2}appstore{linkend}.", - "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/…/nextcloud/apps/talk_matterbridge/bin/\".", "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder kann nicht ausgeführt werden.", "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kannst den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen findest Du in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", "An error occurred while installing the Matterbridge app." : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", @@ -778,7 +778,7 @@ OC.L10N.register( "Attachments folder" : "Ordner für Anhänge", "Keyboard shortcuts" : "Tastaturkürzel", "Speed up your Talk experience with these quick shortcuts." : "Beschleunige Dein Gesprächserlebnis mit diesen Tastaturkürzeln.", - "Focus the chat input" : "Chat-Eingabe in den Vordergrund", + "Focus the chat input" : "Chat-Eingabe fokusieren", "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", "Fullscreen the chat or call" : "Vollbild des Chats oder Anrufs", "Search" : "Suche", diff --git a/l10n/de.json b/l10n/de.json index 6d2e9fb97a5..96e649636b7 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -472,7 +472,7 @@ "Users and moderators" : "Benutzer und Moderatoren", "Moderators only" : "Nur Moderatoren", "Save changes" : "Änderungen speichern", - "Saving …" : "Speichern ...", + "Saving …" : "Speichern …", "Saved!" : "Gespeichert!", "None" : "Keine", "User" : "Benutzer", @@ -527,7 +527,7 @@ "Install Talk Matterbridge" : "Talk-Matterbridge installieren", "Installed version: {version}" : "Installierte Version: {version}", "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}appstore{linkend}." : "Du kannst Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuche deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installiere sie bitte manuell über den {linkstart2}appstore{linkend}.", - "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/…/nextcloud/apps/talk_matterbridge/bin/\".", "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder kann nicht ausgeführt werden.", "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kannst den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen findest Du in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", "An error occurred while installing the Matterbridge app." : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", @@ -776,7 +776,7 @@ "Attachments folder" : "Ordner für Anhänge", "Keyboard shortcuts" : "Tastaturkürzel", "Speed up your Talk experience with these quick shortcuts." : "Beschleunige Dein Gesprächserlebnis mit diesen Tastaturkürzeln.", - "Focus the chat input" : "Chat-Eingabe in den Vordergrund", + "Focus the chat input" : "Chat-Eingabe fokusieren", "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", "Fullscreen the chat or call" : "Vollbild des Chats oder Anrufs", "Search" : "Suche", diff --git a/l10n/de_DE.js b/l10n/de_DE.js index ca7b7047f5e..f5aebe29488 100644 --- a/l10n/de_DE.js +++ b/l10n/de_DE.js @@ -529,7 +529,7 @@ OC.L10N.register( "Install Talk Matterbridge" : "Talk-Matterbridge installieren", "Installed version: {version}" : "Installierte Version: {version}", "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}appstore{linkend}." : "Sie können Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuchen Sie deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installieren Sie sie bitte manuell über den {linkstart2}appstore{linkend}.", - "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/…/nextcloud/apps/talk_matterbridge/bin/\".", "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder kann nicht ausgeführt werden.", "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Sie können den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen finden Sie in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", "An error occurred while installing the Matterbridge app." : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", diff --git a/l10n/de_DE.json b/l10n/de_DE.json index 8aedeafef6d..9838aee03e7 100644 --- a/l10n/de_DE.json +++ b/l10n/de_DE.json @@ -527,7 +527,7 @@ "Install Talk Matterbridge" : "Talk-Matterbridge installieren", "Installed version: {version}" : "Installierte Version: {version}", "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}appstore{linkend}." : "Sie können Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuchen Sie deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installieren Sie sie bitte manuell über den {linkstart2}appstore{linkend}.", - "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/.../nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge Anwendung hat nicht die richtigen Berechtigungen. Bitte stelle sicher, dass die Matterbridge Anwendung dem richtigen Benutzer gehört und, dass diese ausgeführt werden kann. Die Anwendung liegt unter \"/…/nextcloud/apps/talk_matterbridge/bin/\".", "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder kann nicht ausgeführt werden.", "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Sie können den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen finden Sie in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", "An error occurred while installing the Matterbridge app." : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", diff --git a/l10n/eu.js b/l10n/eu.js index 04a60f32c50..efd8d1350c6 100644 --- a/l10n/eu.js +++ b/l10n/eu.js @@ -713,6 +713,8 @@ OC.L10N.register( "Login" : "Hasi saioa", "Nickname" : "Ezizena", "IRC channel" : "IRC kanala", + "Use TLS" : "Erabili TLS", + "Use SASL" : "Erabili SASL", "Tenant ID" : "Tenant IDa", "Client ID" : "Bezeroaren IDa", "Team ID" : "Taldearen IDa", diff --git a/l10n/eu.json b/l10n/eu.json index 086ce89d6ee..14208155e18 100644 --- a/l10n/eu.json +++ b/l10n/eu.json @@ -711,6 +711,8 @@ "Login" : "Hasi saioa", "Nickname" : "Ezizena", "IRC channel" : "IRC kanala", + "Use TLS" : "Erabili TLS", + "Use SASL" : "Erabili SASL", "Tenant ID" : "Tenant IDa", "Client ID" : "Bezeroaren IDa", "Team ID" : "Taldearen IDa", diff --git a/l10n/sl.js b/l10n/sl.js index 67bcba4840a..5a767622a51 100644 --- a/l10n/sl.js +++ b/l10n/sl.js @@ -617,6 +617,7 @@ OC.L10N.register( "Mute" : "Utišaj", "Stop following" : "Prekini osrednji pogled", "You need to be logged in to upload files" : "Za pošiljanje datotek morate biti prijavljeni v oblak", + "This conversation is read-only" : "Ta pogovor je le za branje", "Drop your files to upload" : "Spustite datoteke za pošiljanje v oblak", "Call in progress" : "Klic je v teku ...", "Favorite" : "Priljubljeno", @@ -686,7 +687,10 @@ OC.L10N.register( "Add emoji" : "Dodaj izrazno ikono", "Send message" : "Pošlji sporočilo", "File to share" : "Datoteka z souporabo", + "This conversation has been locked" : "Ta pogovor je zaklenjen", "Write message, @ to mention someone …" : "Napišite sporočilo, z @ omenite osebo ...", + "No permission to post messages in this conversation" : "Za objavo sporočil v ta pogovor so zahtevana posebna dovoljenja.", + "Could not post message: {errorMessage}" : "Sporočila ni mogoče objaviti: {errorMessage}", "Invalid path selected" : "Izbrana je neveljavna pot", "Bridge with other services" : "Preusmerjaj na druge storitve", "More info on Matterbridge." : "Več podrobnosti o Matterbridge.", @@ -786,6 +790,7 @@ OC.L10N.register( "Share link" : "Povezava za souporabo", "Password protection" : "Zaščiti z geslom", "Enter a password" : "Vpis gesla", + "Lock conversation" : "Zakleni pogovor", "Enable lobby" : "Omogoči čakalnico", "Start time (optional)" : "Čas začetka (izbirno)", "Mute others" : "Utišaj ostale", diff --git a/l10n/sl.json b/l10n/sl.json index 1c1151af77e..0892fa54124 100644 --- a/l10n/sl.json +++ b/l10n/sl.json @@ -615,6 +615,7 @@ "Mute" : "Utišaj", "Stop following" : "Prekini osrednji pogled", "You need to be logged in to upload files" : "Za pošiljanje datotek morate biti prijavljeni v oblak", + "This conversation is read-only" : "Ta pogovor je le za branje", "Drop your files to upload" : "Spustite datoteke za pošiljanje v oblak", "Call in progress" : "Klic je v teku ...", "Favorite" : "Priljubljeno", @@ -684,7 +685,10 @@ "Add emoji" : "Dodaj izrazno ikono", "Send message" : "Pošlji sporočilo", "File to share" : "Datoteka z souporabo", + "This conversation has been locked" : "Ta pogovor je zaklenjen", "Write message, @ to mention someone …" : "Napišite sporočilo, z @ omenite osebo ...", + "No permission to post messages in this conversation" : "Za objavo sporočil v ta pogovor so zahtevana posebna dovoljenja.", + "Could not post message: {errorMessage}" : "Sporočila ni mogoče objaviti: {errorMessage}", "Invalid path selected" : "Izbrana je neveljavna pot", "Bridge with other services" : "Preusmerjaj na druge storitve", "More info on Matterbridge." : "Več podrobnosti o Matterbridge.", @@ -784,6 +788,7 @@ "Share link" : "Povezava za souporabo", "Password protection" : "Zaščiti z geslom", "Enter a password" : "Vpis gesla", + "Lock conversation" : "Zakleni pogovor", "Enable lobby" : "Omogoči čakalnico", "Start time (optional)" : "Čas začetka (izbirno)", "Mute others" : "Utišaj ostale", From 7a5fa70ad2cba93e6796cf401e8d254caf605d83 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 21 Oct 2020 09:25:38 +0200 Subject: [PATCH 07/81] Upstream our comments manager extensions to server Signed-off-by: Joas Schilling --- lib/Chat/CommentsManager.php | 237 ----------------------------------- 1 file changed, 237 deletions(-) diff --git a/lib/Chat/CommentsManager.php b/lib/Chat/CommentsManager.php index afc979ccb4c..12a758e8651 100644 --- a/lib/Chat/CommentsManager.php +++ b/lib/Chat/CommentsManager.php @@ -25,30 +25,9 @@ use OC\Comments\Comment; use OC\Comments\Manager; -use OCP\AppFramework\Utility\ITimeFactory; use OCP\Comments\IComment; -use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\IConfig; -use OCP\IDBConnection; -use OCP\IInitialStateService; -use Psr\Log\LoggerInterface; class CommentsManager extends Manager { - - /** @var ITimeFactory */ - protected $timeFactory; - - public function __construct( - IDBConnection $db, - LoggerInterface $logger, - IConfig $config, - IInitialStateService $initialStateService, - ITimeFactory $timeFactory - ) { - parent::__construct($db, $logger, $config, $initialStateService); - $this->timeFactory = $timeFactory; - } - /** * @param array $data * @return IComment @@ -60,220 +39,4 @@ public function getCommentFromData(array $data): IComment { $comment->setMessage($message, ChatManager::MAX_CHAT_LENGTH); return $comment; } - - /** - * @param string $objectType the object type, e.g. 'files' - * @param string $objectId the id of the object - * @param int $lastKnownCommentId the last known comment (will be used as offset) - * @param string $sortDirection direction of the comments (`asc` or `desc`) - * @param int $limit optional, number of maximum comments to be returned. if - * set to 0, all comments are returned. - * @param bool $includeLastKnown - * @return IComment[] - * @return array - */ - public function getForObjectSince( - string $objectType, - string $objectId, - int $lastKnownCommentId, - string $sortDirection = 'asc', - int $limit = 30, - bool $includeLastKnown = false - ): array { - $comments = []; - - $query = $this->dbConn->getQueryBuilder(); - $query->select('*') - ->from('comments') - ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) - ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId))) - ->orderBy('creation_timestamp', $sortDirection === 'desc' ? 'DESC' : 'ASC') - ->addOrderBy('id', $sortDirection === 'desc' ? 'DESC' : 'ASC'); - - if ($limit > 0) { - $query->setMaxResults($limit); - } - - $lastKnownComment = $lastKnownCommentId > 0 ? $this->getLastKnownComment( - $objectType, - $objectId, - $lastKnownCommentId - ) : null; - if ($lastKnownComment instanceof IComment) { - $lastKnownCommentDateTime = $lastKnownComment->getCreationDateTime(); - if ($sortDirection === 'desc') { - $idComparison = $includeLastKnown ? 'lte' : 'lt'; - $query->andWhere( - $query->expr()->orX( - $query->expr()->lt( - 'creation_timestamp', - $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATE), - IQueryBuilder::PARAM_DATE - ), - $query->expr()->andX( - $query->expr()->eq( - 'creation_timestamp', - $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATE), - IQueryBuilder::PARAM_DATE - ), - $query->expr()->$idComparison('id', $query->createNamedParameter($lastKnownCommentId)) - ) - ) - ); - } else { - $idComparison = $includeLastKnown ? 'gte' : 'gt'; - $query->andWhere( - $query->expr()->orX( - $query->expr()->gt( - 'creation_timestamp', - $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATE), - IQueryBuilder::PARAM_DATE - ), - $query->expr()->andX( - $query->expr()->eq( - 'creation_timestamp', - $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATE), - IQueryBuilder::PARAM_DATE - ), - $query->expr()->$idComparison('id', $query->createNamedParameter($lastKnownCommentId)) - ) - ) - ); - } - } - - $resultStatement = $query->execute(); - while ($data = $resultStatement->fetch()) { - $comment = $this->getCommentFromData($data); - $this->cache($comment); - $comments[] = $comment; - } - $resultStatement->closeCursor(); - - return $comments; - } - - /** - * @param string $objectType - * @param string $objectId - * @param string $verb - * @param string $actorType - * @param string[] $actors - * @return array - */ - public function getLastCommentDateByActor( - string $objectType, - string $objectId, - string $verb, - string $actorType, - array $actors - ): array { - $lastComments = []; - - $query = $this->dbConn->getQueryBuilder(); - $query->select('actor_id') - ->selectAlias($query->createFunction('MAX(' . $query->getColumnName('creation_timestamp') . ')'), 'last_comment') - ->from('comments') - ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) - ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId))) - ->andWhere($query->expr()->eq('verb', $query->createNamedParameter($verb))) - ->andWhere($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) - ->andWhere($query->expr()->in('actor_id', $query->createNamedParameter($actors, IQueryBuilder::PARAM_STR_ARRAY))) - ->groupBy('actor_id'); - - $result = $query->execute(); - while ($row = $result->fetch()) { - $lastComments[$row['actor_id']] = $this->timeFactory->getDateTime($row['last_comment']); - } - $result->closeCursor(); - - return $lastComments; - } - - public function getNumberOfCommentsForObjectSinceComment(string $objectType, string $objectId, int $lastRead, string $verb = ''): int { - $query = $this->dbConn->getQueryBuilder(); - $query->selectAlias($query->createFunction('COUNT(' . $query->getColumnName('id') . ')'), 'num_messages') - ->from('comments') - ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) - ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId))) - ->andWhere($query->expr()->gt('id', $query->createNamedParameter($lastRead))); - - if ($verb !== '') { - $query->andWhere($query->expr()->eq('verb', $query->createNamedParameter($verb))); - } - - $result = $query->execute(); - $data = $result->fetch(); - $result->closeCursor(); - - return (int) ($data['num_messages'] ?? 0); - } - - public function getLastCommentBeforeDate(string $objectType, string $objectId, \DateTime $beforeDate, string $verb = ''): int { - $query = $this->dbConn->getQueryBuilder(); - $query->select('id') - ->from('comments') - ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) - ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId))) - ->andWhere($query->expr()->lt('creation_timestamp', $query->createNamedParameter($beforeDate, IQueryBuilder::PARAM_DATE))) - ->orderBy('creation_timestamp', 'desc'); - - if ($verb !== '') { - $query->andWhere($query->expr()->eq('verb', $query->createNamedParameter($verb))); - } - - $result = $query->execute(); - $data = $result->fetch(); - $result->closeCursor(); - - return (int) ($data['id'] ?? 0); - } - - /** - * Search for comments with a given content - * - * @param string $search content to search for - * @param string $objectType Limit the search by object type - * @param array $objectIds Limit the search by object ids - * @param string $verb Limit the verb of the comment - * @param int $offset - * @param int $limit - * @return IComment[] - */ - public function searchForObjects(string $search, string $objectType, array $objectIds, string $verb, int $offset, int $limit = 50): array { - $query = $this->dbConn->getQueryBuilder(); - - $query->select('*') - ->from('comments') - ->where($query->expr()->iLike('message', $query->createNamedParameter( - '%' . $this->dbConn->escapeLikeParameter($search). '%' - ))) - ->orderBy('creation_timestamp', 'DESC') - ->addOrderBy('id', 'DESC') - ->setMaxResults($limit); - - if ($objectType !== '') { - $query->andWhere($query->expr()->eq('object_type', $query->createNamedParameter($objectType))); - } - if (!empty($objectIds)) { - $query->andWhere($query->expr()->in('object_id', $query->createNamedParameter($objectIds, IQueryBuilder::PARAM_STR_ARRAY))); - } - if ($verb !== '') { - $query->andWhere($query->expr()->eq('verb', $query->createNamedParameter($verb))); - } - if ($offset !== 0) { - $query->setFirstResult($offset); - } - - $comments = []; - $result = $query->execute(); - while ($data = $result->fetch()) { - $comment = $this->getCommentFromData($data); - $this->cache($comment); - $comments[] = $comment; - } - $result->closeCursor(); - - return $comments; - } } From e1814b6816512281f1be7170f0458fcbe1d0d2ea Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 28 Oct 2020 10:10:26 +0100 Subject: [PATCH 08/81] Update christophwurst/nextcloud Signed-off-by: Joas Schilling --- composer.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.lock b/composer.lock index 2948f79d39d..10bdfd6c278 100644 --- a/composer.lock +++ b/composer.lock @@ -163,12 +163,12 @@ "source": { "type": "git", "url": "https://github.com/ChristophWurst/nextcloud_composer.git", - "reference": "40fb20d0ac2cc24a275937b19c7760821ce23b45" + "reference": "b2289bc625ef59b11e2342aebe3afd8328431e9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ChristophWurst/nextcloud_composer/zipball/40fb20d0ac2cc24a275937b19c7760821ce23b45", - "reference": "40fb20d0ac2cc24a275937b19c7760821ce23b45", + "url": "https://api.github.com/repos/ChristophWurst/nextcloud_composer/zipball/b2289bc625ef59b11e2342aebe3afd8328431e9b", + "reference": "b2289bc625ef59b11e2342aebe3afd8328431e9b", "shasum": "" }, "require": { @@ -191,7 +191,7 @@ } ], "description": "Composer package containing Nextcloud's public API (classes, interfaces)", - "time": "2020-10-08T22:05:35+00:00" + "time": "2020-10-27T23:43:29+00:00" }, { "name": "composer/package-versions-deprecated", From 97bd312022bcf34f2e723f0cb41bb2ea5faad0ee Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 28 Oct 2020 10:42:23 +0100 Subject: [PATCH 09/81] Sorter use ICommentsManager directly Since the APIs have been added to the server's interface, we can use the ICommentsManager interface directly. Signed-off-by: Vincent Petry --- lib/Chat/AutoComplete/Sorter.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Chat/AutoComplete/Sorter.php b/lib/Chat/AutoComplete/Sorter.php index e9994e19c14..109c2206eae 100644 --- a/lib/Chat/AutoComplete/Sorter.php +++ b/lib/Chat/AutoComplete/Sorter.php @@ -23,15 +23,15 @@ namespace OCA\Talk\Chat\AutoComplete; -use OCA\Talk\Chat\CommentsManager; +use OCP\Comments\ICommentsManager; use OCP\Collaboration\AutoComplete\ISorter; class Sorter implements ISorter { - /** @var CommentsManager */ + /** @var ICommentsManager */ protected $commentsManager; - public function __construct(CommentsManager $commentsManager) { + public function __construct(ICommentsManager $commentsManager) { $this->commentsManager = $commentsManager; } From f701e943ab7152c6eb64f30ed7d5fb162ffd1b71 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 8 Oct 2020 12:32:17 +0200 Subject: [PATCH 10/81] Only use numeric tokens for conversations when sip is configured Signed-off-by: Joas Schilling --- lib/Manager.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/Manager.php b/lib/Manager.php index 5a4b81eb7cc..95a18b0484b 100644 --- a/lib/Manager.php +++ b/lib/Manager.php @@ -804,10 +804,18 @@ protected function getRoomNameByParticipants(Room $room): string { * @return string */ protected function getNewToken(): string { - $chars = str_replace(['l', '0', '1'], '', ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS); + $sipConfig = $this->config->getAppValue('spreed', 'sip_config', ''); // FIXME adjust config name $entropy = (int) $this->config->getAppValue('spreed', 'token_entropy', 8); $entropy = max(8, $entropy); // For update cases + if ($sipConfig === '') { + $chars = str_replace(['l', '0', '1'], '', ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS); + } else { + $chars = ISecureRandom::CHAR_DIGITS; + // Increase default token length as we only use numbers + $entropy = max(10, $entropy); + } + $query = $this->db->getQueryBuilder(); $query->select('id') ->from('talk_rooms') From 6d9c257572d0e3ab602587afa16c595744cc14f4 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 8 Oct 2020 14:28:01 +0200 Subject: [PATCH 11/81] Add a setting which groups can enable SIP in conversations Signed-off-by: Joas Schilling --- lib/Config.php | 9 ++ lib/Settings/Admin/AdminSettings.php | 5 + src/components/AdminSettings/SIPBridge.vue | 147 +++++++++++++++++++++ src/views/AdminSettings.vue | 19 +-- 4 files changed, 172 insertions(+), 8 deletions(-) create mode 100644 src/components/AdminSettings/SIPBridge.vue diff --git a/lib/Config.php b/lib/Config.php index 6f8abca7ccd..2fe9da2b207 100644 --- a/lib/Config.php +++ b/lib/Config.php @@ -62,6 +62,15 @@ public function getAllowedTalkGroupIds(): array { return \is_array($groups) ? $groups : []; } + /** + * @return string[] + */ + public function getSIPGroups(): array { + $groups = $this->config->getAppValue('spreed', 'sip_bridge_groups', '[]'); + $groups = json_decode($groups, true); + return \is_array($groups) ? $groups : []; + } + public function isDisabledForUser(IUser $user): bool { $allowedGroups = $this->getAllowedTalkGroupIds(); if (empty($allowedGroups)) { diff --git a/lib/Settings/Admin/AdminSettings.php b/lib/Settings/Admin/AdminSettings.php index 94b69e24649..725b2540f08 100644 --- a/lib/Settings/Admin/AdminSettings.php +++ b/lib/Settings/Admin/AdminSettings.php @@ -93,6 +93,7 @@ public function getForm(): TemplateResponse { $this->initTurnServers(); $this->initSignalingServers(); $this->initRequestSignalingServerTrial(); + $this->initSIPBridge(); return new TemplateResponse('spreed', 'settings/admin-settings', [], ''); } @@ -467,6 +468,10 @@ protected function initRequestSignalingServerTrial(): void { ]); } + protected function initSIPBridge(): void { + $this->initialStateService->provideInitialState('talk', 'sip_bridge_groups', $this->talkConfig->getSIPGroups()); + } + /** * @return string the section ID, e.g. 'sharing' */ diff --git a/src/components/AdminSettings/SIPBridge.vue b/src/components/AdminSettings/SIPBridge.vue new file mode 100644 index 00000000000..db90804c46e --- /dev/null +++ b/src/components/AdminSettings/SIPBridge.vue @@ -0,0 +1,147 @@ + + + + + + + diff --git a/src/views/AdminSettings.vue b/src/views/AdminSettings.vue index a3cc105e46a..095c7903b92 100644 --- a/src/views/AdminSettings.vue +++ b/src/views/AdminSettings.vue @@ -30,31 +30,34 @@ + From 2d99a5974ee39aa519fb78bf567f0ba1b77bd6e7 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 8 Oct 2020 16:33:13 +0200 Subject: [PATCH 12/81] Add dial-in info and fix group display names Signed-off-by: Joas Schilling --- lib/Config.php | 4 + lib/Settings/Admin/AdminSettings.php | 21 +++- src/components/AdminSettings/SIPBridge.vue | 119 ++++++++++++--------- 3 files changed, 90 insertions(+), 54 deletions(-) diff --git a/lib/Config.php b/lib/Config.php index 2fe9da2b207..ffbcc1fa8e5 100644 --- a/lib/Config.php +++ b/lib/Config.php @@ -71,6 +71,10 @@ public function getSIPGroups(): array { return \is_array($groups) ? $groups : []; } + public function getDialInInfo(): string { + return $this->config->getAppValue('spreed', 'sip_bridge_dial-in_info', ''); + } + public function isDisabledForUser(IUser $user): bool { $allowedGroups = $this->getAllowedTalkGroupIds(); if (empty($allowedGroups)) { diff --git a/lib/Settings/Admin/AdminSettings.php b/lib/Settings/Admin/AdminSettings.php index 725b2540f08..da2df2f6639 100644 --- a/lib/Settings/Admin/AdminSettings.php +++ b/lib/Settings/Admin/AdminSettings.php @@ -33,6 +33,8 @@ use OCP\AppFramework\Http\TemplateResponse; use OCP\ICacheFactory; use OCP\IConfig; +use OCP\IGroup; +use OCP\IGroupManager; use OCP\IInitialStateService; use OCP\IL10N; use OCP\IUser; @@ -52,6 +54,8 @@ class AdminSettings implements ISettings { private $initialStateService; /** @var ICacheFactory */ private $memcacheFactory; + /** @var IGroupManager */ + private $groupManager; /** @var MatterbridgeManager */ private $bridgeManager; /** @var IUser */ @@ -66,6 +70,7 @@ public function __construct(Config $talkConfig, CommandService $commandService, IInitialStateService $initialStateService, ICacheFactory $memcacheFactory, + IGroupManager $groupManager, MatterbridgeManager $bridgeManager, IUserSession $userSession, IL10N $l10n, @@ -75,6 +80,7 @@ public function __construct(Config $talkConfig, $this->commandService = $commandService; $this->initialStateService = $initialStateService; $this->memcacheFactory = $memcacheFactory; + $this->groupManager = $groupManager; $this->bridgeManager = $bridgeManager; $this->currentUser = $userSession->getUser(); $this->l10n = $l10n; @@ -469,7 +475,20 @@ protected function initRequestSignalingServerTrial(): void { } protected function initSIPBridge(): void { - $this->initialStateService->provideInitialState('talk', 'sip_bridge_groups', $this->talkConfig->getSIPGroups()); + $gids = $this->talkConfig->getSIPGroups(); + $groups = []; + foreach ($gids as $gid) { + $group = $this->groupManager->get($gid); + if ($group instanceof IGroup) { + $groups[] = [ + 'id' => $group->getGID(), + 'displayname' => $group->getDisplayName(), + ]; + } + } + + $this->initialStateService->provideInitialState('talk', 'sip_bridge_groups', $groups); + $this->initialStateService->provideInitialState('talk', 'sip_bridge_dial-in_info', $this->talkConfig->getDialInInfo()); } /** diff --git a/src/components/AdminSettings/SIPBridge.vue b/src/components/AdminSettings/SIPBridge.vue index db90804c46e..56f2064b19c 100644 --- a/src/components/AdminSettings/SIPBridge.vue +++ b/src/components/AdminSettings/SIPBridge.vue @@ -21,31 +21,48 @@ -->