diff options
114 files changed, 368 insertions, 165 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ee18aebbe..0e605f601 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,43 @@ # Changelog All notable changes to this project will be documented in this file. +## 15.0.0-beta.4 – 2022-09-15 +### Added +- Add related_resources UI + +### Changed +- Use Node 16 and NPM 8 to compile the interface +- Several dependency updates +- Unload chat messages when moving to another chat to avoid lagging on return + +### Fixed +- Several fixes to adapt to the UI changes in Nextcloud 25 +- Respect message expiration in the frontend when the user never leaves the conversation +- Fix handling of deleted users in polls +- Allow recalling the owner as a normal moderator + +## 14.0.5 – 2022-09-15 +### Fixed +- Fix notification sending when the user is blocked by the lobby + [#7794](https://github.com/nextcloud/spreed/pull/7794) +- Fix missing local media controls in public share sidebar + [#7758](https://github.com/nextcloud/spreed/pull/7758) +- Fix missing screenshares in sidebar + [#7760](https://github.com/nextcloud/spreed/pull/7760) +- Fix inconsistent state when leaving a call fails + [#7803](https://github.com/nextcloud/spreed/pull/7803) + +## 13.0.9 – 2022-09-15 +### Fixed +- Fix notification sending when the user is blocked by the lobby + [#7796](https://github.com/nextcloud/spreed/pull/7796) +- Fix missing local media controls in public share sidebar + [#7759](https://github.com/nextcloud/spreed/pull/7759) +- Fix missing screenshares in sidebar + [#7763](https://github.com/nextcloud/spreed/pull/7763) +- Fix inconsistent state when leaving a call fails + [#7804](https://github.com/nextcloud/spreed/pull/7804) + ## 15.0.0-beta.3 – 2022-09-09 ### Changed - Finish polls UI diff --git a/appinfo/info.xml b/appinfo/info.xml index 0fc0ac456..f60fb2ceb 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -16,7 +16,7 @@ And in the works for the [coming versions](https://github.com/nextcloud/spreed/m ]]></description> - <version>15.0.0-beta.3</version> + <version>15.0.0-beta.4</version> <licence>agpl</licence> <author>Daniel Calviño Sánchez</author> diff --git a/l10n/bg.js b/l10n/bg.js index 3ddd055ec..f87714abd 100644 --- a/l10n/bg.js +++ b/l10n/bg.js @@ -1024,8 +1024,6 @@ OC.L10N.register( "See results" : "Вижте резултатите", "Submit vote" : "Изпращане на гласуване", "End poll" : "Край на анкетата", - "Poll ・ You voted" : "Анкета ・ Вие гласувахте", - "You voted" : "Вие гласувахте", "Change your vote" : "Променете гласуването си", "Poll ・ Click to vote" : "Анкета ・ Кликнете, за да гласувате", "Poll ・ Ended" : "Анкета ・ Прекратена", diff --git a/l10n/bg.json b/l10n/bg.json index a76c66cec..314cfea8f 100644 --- a/l10n/bg.json +++ b/l10n/bg.json @@ -1022,8 +1022,6 @@ "See results" : "Вижте резултатите", "Submit vote" : "Изпращане на гласуване", "End poll" : "Край на анкетата", - "Poll ・ You voted" : "Анкета ・ Вие гласувахте", - "You voted" : "Вие гласувахте", "Change your vote" : "Променете гласуването си", "Poll ・ Click to vote" : "Анкета ・ Кликнете, за да гласувате", "Poll ・ Ended" : "Анкета ・ Прекратена", diff --git a/l10n/ca.js b/l10n/ca.js index 796e7c805..a501e8cca 100644 --- a/l10n/ca.js +++ b/l10n/ca.js @@ -711,7 +711,6 @@ OC.L10N.register( "Reply" : "Respon", "Go to file" : "Vés al fitxer", "Contact" : "Contacte", - "You voted" : "Has votat", "Scroll to bottom" : "Desplaça al final", "Today" : "Avui", "Yesterday" : "Ahir", diff --git a/l10n/ca.json b/l10n/ca.json index 7d95447c6..17de10e1f 100644 --- a/l10n/ca.json +++ b/l10n/ca.json @@ -709,7 +709,6 @@ "Reply" : "Respon", "Go to file" : "Vés al fitxer", "Contact" : "Contacte", - "You voted" : "Has votat", "Scroll to bottom" : "Desplaça al final", "Today" : "Avui", "Yesterday" : "Ahir", diff --git a/l10n/cs.js b/l10n/cs.js index ce6a119d3..d752f21bb 100644 --- a/l10n/cs.js +++ b/l10n/cs.js @@ -1024,8 +1024,6 @@ OC.L10N.register( "See results" : "Zobrazit výsledky", "Submit vote" : "Odeslat hlas", "End poll" : "Ukončit anketu", - "Poll ・ You voted" : "Anketa ・ hlasovali jste", - "You voted" : "Hlasovali jste", "Change your vote" : "Změňte svůj hlas", "Poll ・ Click to vote" : "Anketa ・ Hlasujte kliknutím", "Poll ・ Ended" : "Anketa ・ Ukončeno", diff --git a/l10n/cs.json b/l10n/cs.json index e28a6ac10..0b3ff3ee5 100644 --- a/l10n/cs.json +++ b/l10n/cs.json @@ -1022,8 +1022,6 @@ "See results" : "Zobrazit výsledky", "Submit vote" : "Odeslat hlas", "End poll" : "Ukončit anketu", - "Poll ・ You voted" : "Anketa ・ hlasovali jste", - "You voted" : "Hlasovali jste", "Change your vote" : "Změňte svůj hlas", "Poll ・ Click to vote" : "Anketa ・ Hlasujte kliknutím", "Poll ・ Ended" : "Anketa ・ Ukončeno", diff --git a/l10n/da.js b/l10n/da.js index b9f88b274..9cc6bc755 100644 --- a/l10n/da.js +++ b/l10n/da.js @@ -386,7 +386,6 @@ OC.L10N.register( "Mark as unread" : "Marker som ulæst", "Go to file" : "Gå til fil", "Contact" : "Kontakt", - "You voted" : "Du stemte", "Today" : "I dag", "Yesterday" : "I går", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/da.json b/l10n/da.json index 863553d84..cab5088a6 100644 --- a/l10n/da.json +++ b/l10n/da.json @@ -384,7 +384,6 @@ "Mark as unread" : "Marker som ulæst", "Go to file" : "Gå til fil", "Contact" : "Kontakt", - "You voted" : "Du stemte", "Today" : "I dag", "Yesterday" : "I går", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/de.js b/l10n/de.js index 84833a565..0a50de04d 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -1021,8 +1021,6 @@ OC.L10N.register( "See results" : "Ergebnisse anzeigen", "Submit vote" : "Stimme übermitteln", "End poll" : "Umfrage beenden", - "Poll ・ You voted" : "Umfrage ・ Du hast abgestimmt", - "You voted" : "Du hast teilgenommen", "Change your vote" : "Ändere deine Stimmabgabe", "Poll ・ Click to vote" : "Umfrage ・ Zur Abstimmung klicken", "Poll ・ Ended" : "Umfrage ・ Beendet", @@ -1097,7 +1095,7 @@ OC.L10N.register( "Joined with video" : "Mit Video beigetreten", "Joined via phone" : "Mit Telefon beigetreten", "Raised their hand" : "Hat die Hand gehoben", - "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} versendet", + "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} gesendet", "Could not send invitation to {actorId}" : "Einladung konnte nicht an {actorId} versendet werden", "Notification was sent to {displayName}" : "Benachrichtigung wurde an {displayName} gesendet", "Could not send notification to {displayName}" : "Benachrichtigung konnte nicht an {displayName} versandt werden", @@ -1283,7 +1281,7 @@ OC.L10N.register( "[Unknown username]" : "[Unbekannter Benutzername]", "Upload new files" : "Neue Dateien hochladen", "Share from Files" : "Aus Dateien heraus teilen", - "Invitation was sent to {actorId}." : "Einladung wurde an {actorId} versendet.", + "Invitation was sent to {actorId}." : "Einladung wurde an {actorId} gesendet.", "Display name: " : "Anzeigename:", "Video on and off" : "Kamera ein- und ausschalten", "Deck card has been posted to the selected <a href=\"{link}\">conversation</a>." : "Deckkarte wurde an die ausgewählte <a href=\"{link}\">Unterhaltung</a> gesendet.", diff --git a/l10n/de.json b/l10n/de.json index 4b73af037..00c10368d 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -1019,8 +1019,6 @@ "See results" : "Ergebnisse anzeigen", "Submit vote" : "Stimme übermitteln", "End poll" : "Umfrage beenden", - "Poll ・ You voted" : "Umfrage ・ Du hast abgestimmt", - "You voted" : "Du hast teilgenommen", "Change your vote" : "Ändere deine Stimmabgabe", "Poll ・ Click to vote" : "Umfrage ・ Zur Abstimmung klicken", "Poll ・ Ended" : "Umfrage ・ Beendet", @@ -1095,7 +1093,7 @@ "Joined with video" : "Mit Video beigetreten", "Joined via phone" : "Mit Telefon beigetreten", "Raised their hand" : "Hat die Hand gehoben", - "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} versendet", + "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} gesendet", "Could not send invitation to {actorId}" : "Einladung konnte nicht an {actorId} versendet werden", "Notification was sent to {displayName}" : "Benachrichtigung wurde an {displayName} gesendet", "Could not send notification to {displayName}" : "Benachrichtigung konnte nicht an {displayName} versandt werden", @@ -1281,7 +1279,7 @@ "[Unknown username]" : "[Unbekannter Benutzername]", "Upload new files" : "Neue Dateien hochladen", "Share from Files" : "Aus Dateien heraus teilen", - "Invitation was sent to {actorId}." : "Einladung wurde an {actorId} versendet.", + "Invitation was sent to {actorId}." : "Einladung wurde an {actorId} gesendet.", "Display name: " : "Anzeigename:", "Video on and off" : "Kamera ein- und ausschalten", "Deck card has been posted to the selected <a href=\"{link}\">conversation</a>." : "Deckkarte wurde an die ausgewählte <a href=\"{link}\">Unterhaltung</a> gesendet.", diff --git a/l10n/de_DE.js b/l10n/de_DE.js index 27739c742..238ac55f8 100644 --- a/l10n/de_DE.js +++ b/l10n/de_DE.js @@ -1024,8 +1024,6 @@ OC.L10N.register( "See results" : "Ergebnisse anzeigen", "Submit vote" : "Stimme senden", "End poll" : "Umfrage beenden", - "Poll ・ You voted" : "Umfrage ・ Sie haben abgestimmt", - "You voted" : "Sie haben abgestimmt", "Change your vote" : "Ihre Stimmabgabe ändern", "Poll ・ Click to vote" : "Umfrage ・ Zur Abstimmung klicken", "Poll ・ Ended" : "Poll ・ Beendet", diff --git a/l10n/de_DE.json b/l10n/de_DE.json index 3f6171199..a5e4b0f2c 100644 --- a/l10n/de_DE.json +++ b/l10n/de_DE.json @@ -1022,8 +1022,6 @@ "See results" : "Ergebnisse anzeigen", "Submit vote" : "Stimme senden", "End poll" : "Umfrage beenden", - "Poll ・ You voted" : "Umfrage ・ Sie haben abgestimmt", - "You voted" : "Sie haben abgestimmt", "Change your vote" : "Ihre Stimmabgabe ändern", "Poll ・ Click to vote" : "Umfrage ・ Zur Abstimmung klicken", "Poll ・ Ended" : "Poll ・ Beendet", diff --git a/l10n/en_GB.js b/l10n/en_GB.js index 48980aa8f..e621c835b 100644 --- a/l10n/en_GB.js +++ b/l10n/en_GB.js @@ -384,7 +384,6 @@ OC.L10N.register( "Conversation name" : "Conversation name", "Reply" : "Reply", "Contact" : "Contact", - "You voted" : "You voted", "Today" : "Today", "Yesterday" : "Yesterday", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/en_GB.json b/l10n/en_GB.json index f25901cba..e63f20d94 100644 --- a/l10n/en_GB.json +++ b/l10n/en_GB.json @@ -382,7 +382,6 @@ "Conversation name" : "Conversation name", "Reply" : "Reply", "Contact" : "Contact", - "You voted" : "You voted", "Today" : "Today", "Yesterday" : "Yesterday", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es.js b/l10n/es.js index 2b3fc1040..3fed9de2b 100644 --- a/l10n/es.js +++ b/l10n/es.js @@ -654,6 +654,7 @@ OC.L10N.register( "Don't warn about connectivity issues in calls with more than 4 participants" : "No avisar de problemas de conectividad en llamadas con más de 4 participantes", "STUN server URL" : "URL del servidor STUN", "STUN servers" : "Servidores STUN", + "Add a new STUN server" : "Agregar un servidor STUN nuevo ", "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se usa para determinar la dirección IP pública de participantes que estén tras un router.", "TURN server schemes" : "Esquemas de servidor TURN (Traversal Using Relays around NAT)", "{option1} and {option2}" : "{option1} y {option2}", @@ -667,6 +668,7 @@ OC.L10N.register( "Testing whether the TURN server returns ICE candidates" : "Probando si el servidor TURN devuelve candidatos ICE", "Test this server" : "Probar este servidor", "TURN servers" : "Servidores TURN.", + "Add a new TURN server" : "Agregar un servidor TURN nuevo ", "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un servidor TURN se utiliza para hacer de proxy del tráfico de los participantes trás un firewall. Si los participantes individuales no pueden conectarse a otros, lo más probable es que se necesite un servidor TURN. Consulte {linkstart}esta documentación{linkend} para obtener instrucciones de configuración.", "Web server setup checks" : "Comprobaciones de la configuración del servidor web", "Files required for background blur can be loaded" : "Los archivos necesarios para background blur se pueden cargar", @@ -997,7 +999,6 @@ OC.L10N.register( "Open this location in OpenStreetMap" : "Abrir esta ubicación en OpenStreetMap", "Poll" : "Encuesta", "End poll" : "Cerrar la encuesta", - "You voted" : "Has votado", "Scroll to bottom" : "Ir al final", "Today" : "Hoy", "Yesterday" : "Ayer", diff --git a/l10n/es.json b/l10n/es.json index 93e23e0c9..610f322ac 100644 --- a/l10n/es.json +++ b/l10n/es.json @@ -652,6 +652,7 @@ "Don't warn about connectivity issues in calls with more than 4 participants" : "No avisar de problemas de conectividad en llamadas con más de 4 participantes", "STUN server URL" : "URL del servidor STUN", "STUN servers" : "Servidores STUN", + "Add a new STUN server" : "Agregar un servidor STUN nuevo ", "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se usa para determinar la dirección IP pública de participantes que estén tras un router.", "TURN server schemes" : "Esquemas de servidor TURN (Traversal Using Relays around NAT)", "{option1} and {option2}" : "{option1} y {option2}", @@ -665,6 +666,7 @@ "Testing whether the TURN server returns ICE candidates" : "Probando si el servidor TURN devuelve candidatos ICE", "Test this server" : "Probar este servidor", "TURN servers" : "Servidores TURN.", + "Add a new TURN server" : "Agregar un servidor TURN nuevo ", "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un servidor TURN se utiliza para hacer de proxy del tráfico de los participantes trás un firewall. Si los participantes individuales no pueden conectarse a otros, lo más probable es que se necesite un servidor TURN. Consulte {linkstart}esta documentación{linkend} para obtener instrucciones de configuración.", "Web server setup checks" : "Comprobaciones de la configuración del servidor web", "Files required for background blur can be loaded" : "Los archivos necesarios para background blur se pueden cargar", @@ -995,7 +997,6 @@ "Open this location in OpenStreetMap" : "Abrir esta ubicación en OpenStreetMap", "Poll" : "Encuesta", "End poll" : "Cerrar la encuesta", - "You voted" : "Has votado", "Scroll to bottom" : "Ir al final", "Today" : "Hoy", "Yesterday" : "Ayer", diff --git a/l10n/es_419.js b/l10n/es_419.js index 457a937bf..7668178f8 100644 --- a/l10n/es_419.js +++ b/l10n/es_419.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_419.json b/l10n/es_419.json index 3b8652253..f81c7687a 100644 --- a/l10n/es_419.json +++ b/l10n/es_419.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_CL.js b/l10n/es_CL.js index 96967c03c..17192bc49 100644 --- a/l10n/es_CL.js +++ b/l10n/es_CL.js @@ -101,7 +101,6 @@ OC.L10N.register( "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_CL.json b/l10n/es_CL.json index b3c66d64f..4cb6823dc 100644 --- a/l10n/es_CL.json +++ b/l10n/es_CL.json @@ -99,7 +99,6 @@ "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_CO.js b/l10n/es_CO.js index 862e6e201..623bb4e73 100644 --- a/l10n/es_CO.js +++ b/l10n/es_CO.js @@ -104,7 +104,6 @@ OC.L10N.register( "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_CO.json b/l10n/es_CO.json index 34bef83e7..6b10ba659 100644 --- a/l10n/es_CO.json +++ b/l10n/es_CO.json @@ -102,7 +102,6 @@ "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_CR.js b/l10n/es_CR.js index 2a7eb6409..e4494df78 100644 --- a/l10n/es_CR.js +++ b/l10n/es_CR.js @@ -101,7 +101,6 @@ OC.L10N.register( "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_CR.json b/l10n/es_CR.json index 3924a29a2..e328514de 100644 --- a/l10n/es_CR.json +++ b/l10n/es_CR.json @@ -99,7 +99,6 @@ "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_DO.js b/l10n/es_DO.js index 0f84a935e..9b65d9a9b 100644 --- a/l10n/es_DO.js +++ b/l10n/es_DO.js @@ -101,7 +101,6 @@ OC.L10N.register( "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_DO.json b/l10n/es_DO.json index 66970d2bf..72a181bb0 100644 --- a/l10n/es_DO.json +++ b/l10n/es_DO.json @@ -99,7 +99,6 @@ "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_EC.js b/l10n/es_EC.js index 750c797a1..38224fba9 100644 --- a/l10n/es_EC.js +++ b/l10n/es_EC.js @@ -139,7 +139,6 @@ OC.L10N.register( "Select camera" : "Seleccione la cámara", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_EC.json b/l10n/es_EC.json index e5db4adb3..62c5c763d 100644 --- a/l10n/es_EC.json +++ b/l10n/es_EC.json @@ -137,7 +137,6 @@ "Select camera" : "Seleccione la cámara", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_GT.js b/l10n/es_GT.js index 6b278c9f2..97f23e9ea 100644 --- a/l10n/es_GT.js +++ b/l10n/es_GT.js @@ -101,7 +101,6 @@ OC.L10N.register( "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_GT.json b/l10n/es_GT.json index 58cc9b56c..d716d0017 100644 --- a/l10n/es_GT.json +++ b/l10n/es_GT.json @@ -99,7 +99,6 @@ "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_HN.js b/l10n/es_HN.js index c87a69033..c785c0fa1 100644 --- a/l10n/es_HN.js +++ b/l10n/es_HN.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_HN.json b/l10n/es_HN.json index 579a59416..1a49a8ed6 100644 --- a/l10n/es_HN.json +++ b/l10n/es_HN.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_MX.js b/l10n/es_MX.js index cd309378a..bc68bb98a 100644 --- a/l10n/es_MX.js +++ b/l10n/es_MX.js @@ -178,7 +178,6 @@ OC.L10N.register( "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_MX.json b/l10n/es_MX.json index bf6c72c17..6bf8d38ad 100644 --- a/l10n/es_MX.json +++ b/l10n/es_MX.json @@ -176,7 +176,6 @@ "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_NI.js b/l10n/es_NI.js index b34e18611..3e3c4cc95 100644 --- a/l10n/es_NI.js +++ b/l10n/es_NI.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_NI.json b/l10n/es_NI.json index 042eb54c4..d42a02b10 100644 --- a/l10n/es_NI.json +++ b/l10n/es_NI.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PA.js b/l10n/es_PA.js index c87a69033..c785c0fa1 100644 --- a/l10n/es_PA.js +++ b/l10n/es_PA.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PA.json b/l10n/es_PA.json index 579a59416..1a49a8ed6 100644 --- a/l10n/es_PA.json +++ b/l10n/es_PA.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PE.js b/l10n/es_PE.js index b34e18611..3e3c4cc95 100644 --- a/l10n/es_PE.js +++ b/l10n/es_PE.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PE.json b/l10n/es_PE.json index 042eb54c4..d42a02b10 100644 --- a/l10n/es_PE.json +++ b/l10n/es_PE.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PR.js b/l10n/es_PR.js index b34e18611..3e3c4cc95 100644 --- a/l10n/es_PR.js +++ b/l10n/es_PR.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PR.json b/l10n/es_PR.json index 042eb54c4..d42a02b10 100644 --- a/l10n/es_PR.json +++ b/l10n/es_PR.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PY.js b/l10n/es_PY.js index 5e4f42aad..18a16a3b6 100644 --- a/l10n/es_PY.js +++ b/l10n/es_PY.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_PY.json b/l10n/es_PY.json index 17900ce92..02deb4e80 100644 --- a/l10n/es_PY.json +++ b/l10n/es_PY.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_SV.js b/l10n/es_SV.js index 2a7eb6409..e4494df78 100644 --- a/l10n/es_SV.js +++ b/l10n/es_SV.js @@ -101,7 +101,6 @@ OC.L10N.register( "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_SV.json b/l10n/es_SV.json index 3924a29a2..e328514de 100644 --- a/l10n/es_SV.json +++ b/l10n/es_SV.json @@ -99,7 +99,6 @@ "Conversation name" : "Nombre de la conversación", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/es_UY.js b/l10n/es_UY.js index f2ef22773..e2ca08721 100644 --- a/l10n/es_UY.js +++ b/l10n/es_UY.js @@ -93,7 +93,6 @@ OC.L10N.register( "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/es_UY.json b/l10n/es_UY.json index 283669486..6dfebd456 100644 --- a/l10n/es_UY.json +++ b/l10n/es_UY.json @@ -91,7 +91,6 @@ "Close" : "Cerrar", "Reply" : "Responder", "Contact" : "Contacto", - "You voted" : "Votaste", "Today" : "Hoy", "Yesterday" : "Ayer", "Create new poll" : "Crear nueva encuesta", diff --git a/l10n/fi.js b/l10n/fi.js index bd4b37746..1cb15555b 100644 --- a/l10n/fi.js +++ b/l10n/fi.js @@ -813,8 +813,6 @@ OC.L10N.register( "See results" : "Näytä tulokset", "Submit vote" : "Lähetä ääni", "End poll" : "Lopeta kysely", - "Poll ・ You voted" : "Kysely ・ Äänestit", - "You voted" : "Äänestit", "Change your vote" : "Muuta antamaasi ääntä", "Poll ・ Click to vote" : "Kysely ・ Napsauta äänestääksesi", "Poll ・ Ended" : "Kysely ・ Päättynyt", diff --git a/l10n/fi.json b/l10n/fi.json index 5b5338f0f..165503451 100644 --- a/l10n/fi.json +++ b/l10n/fi.json @@ -811,8 +811,6 @@ "See results" : "Näytä tulokset", "Submit vote" : "Lähetä ääni", "End poll" : "Lopeta kysely", - "Poll ・ You voted" : "Kysely ・ Äänestit", - "You voted" : "Äänestit", "Change your vote" : "Muuta antamaasi ääntä", "Poll ・ Click to vote" : "Kysely ・ Napsauta äänestääksesi", "Poll ・ Ended" : "Kysely ・ Päättynyt", diff --git a/l10n/fr.js b/l10n/fr.js index d187a4834..66b3e6613 100644 --- a/l10n/fr.js +++ b/l10n/fr.js @@ -1016,7 +1016,6 @@ OC.L10N.register( "Deck Card" : "Carte Deck", "Remove {fileName}" : "Supprimer {fileName}", "Open this location in OpenStreetMap" : "Ouvrir cet emplacement dans OpenStreetMap", - "You voted" : "Vous avez voté", "Poll ・ Click to vote" : "Sondage ・ Cliquez pour participer", "_Poll results • %n vote_::_Poll results • %n votes_" : ["Résultats du sondage • %n participation","Résultats du sondage • %n participations","Résultats du sondage • %n participations"], "Scroll to bottom" : "Défiler jusqu'en bas", diff --git a/l10n/fr.json b/l10n/fr.json index 63f309b84..5213588a7 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -1014,7 +1014,6 @@ "Deck Card" : "Carte Deck", "Remove {fileName}" : "Supprimer {fileName}", "Open this location in OpenStreetMap" : "Ouvrir cet emplacement dans OpenStreetMap", - "You voted" : "Vous avez voté", "Poll ・ Click to vote" : "Sondage ・ Cliquez pour participer", "_Poll results • %n vote_::_Poll results • %n votes_" : ["Résultats du sondage • %n participation","Résultats du sondage • %n participations","Résultats du sondage • %n participations"], "Scroll to bottom" : "Défiler jusqu'en bas", diff --git a/l10n/gl.js b/l10n/gl.js index af1417e3d..00bfde739 100644 --- a/l10n/gl.js +++ b/l10n/gl.js @@ -828,7 +828,6 @@ OC.L10N.register( "Contact" : "Contacto", "{stack} in {board}" : "{stack} en {board}", "Deck Card" : "Tarxeta do Deck", - "You voted" : "Votou", "Scroll to bottom" : "Desprazarse ata o final", "Today" : "Hoxe", "Yesterday" : "Onte", diff --git a/l10n/gl.json b/l10n/gl.json index b9a2dd3c0..4eed3ef9c 100644 --- a/l10n/gl.json +++ b/l10n/gl.json @@ -826,7 +826,6 @@ "Contact" : "Contacto", "{stack} in {board}" : "{stack} en {board}", "Deck Card" : "Tarxeta do Deck", - "You voted" : "Votou", "Scroll to bottom" : "Desprazarse ata o final", "Today" : "Hoxe", "Yesterday" : "Onte", diff --git a/l10n/hu.js b/l10n/hu.js index 11c91d385..cd3500dfb 100644 --- a/l10n/hu.js +++ b/l10n/hu.js @@ -1024,8 +1024,6 @@ OC.L10N.register( "See results" : "Találatok megtekintése", "Submit vote" : "Szavazat leadása", "End poll" : "Szavazás befejezése", - "Poll ・ You voted" : "Szavazás ・ Szavazott", - "You voted" : "Szavazott", "Change your vote" : "Szavazat módosítása", "Poll ・ Click to vote" : "Szavazás ・ Kattintson a szavazáshoz", "Poll ・ Ended" : "Poll ・ Befejezve", diff --git a/l10n/hu.json b/l10n/hu.json index 8d1d04a3c..dac252689 100644 --- a/l10n/hu.json +++ b/l10n/hu.json @@ -1022,8 +1022,6 @@ "See results" : "Találatok megtekintése", "Submit vote" : "Szavazat leadása", "End poll" : "Szavazás befejezése", - "Poll ・ You voted" : "Szavazás ・ Szavazott", - "You voted" : "Szavazott", "Change your vote" : "Szavazat módosítása", "Poll ・ Click to vote" : "Szavazás ・ Kattintson a szavazáshoz", "Poll ・ Ended" : "Poll ・ Befejezve", diff --git a/l10n/is.js b/l10n/is.js index 7d23c073f..3b57d8015 100644 --- a/l10n/is.js +++ b/l10n/is.js @@ -463,7 +463,6 @@ OC.L10N.register( "Contact" : "Tengiliður", "Poll" : "Poll", "End poll" : "End poll", - "You voted" : "Þú kaust", "Today" : "Í dag", "Yesterday" : "Í gær", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/is.json b/l10n/is.json index 4fab8b60e..89804d870 100644 --- a/l10n/is.json +++ b/l10n/is.json @@ -461,7 +461,6 @@ "Contact" : "Tengiliður", "Poll" : "Poll", "End poll" : "End poll", - "You voted" : "Þú kaust", "Today" : "Í dag", "Yesterday" : "Í gær", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/it.js b/l10n/it.js index 324eebec8..7a0685163 100644 --- a/l10n/it.js +++ b/l10n/it.js @@ -956,7 +956,6 @@ OC.L10N.register( "Deck Card" : "Scheda di Deck", "Remove {fileName}" : "Rimuovi {fileName}", "Open this location in OpenStreetMap" : "Apri questa posizione in OpenStreetMap", - "You voted" : "Hai votato", "Scroll to bottom" : "Scorri in fondo", "Today" : "Oggi", "Yesterday" : "Ieri", diff --git a/l10n/it.json b/l10n/it.json index d420bc4f1..95dde8912 100644 --- a/l10n/it.json +++ b/l10n/it.json @@ -954,7 +954,6 @@ "Deck Card" : "Scheda di Deck", "Remove {fileName}" : "Rimuovi {fileName}", "Open this location in OpenStreetMap" : "Apri questa posizione in OpenStreetMap", - "You voted" : "Hai votato", "Scroll to bottom" : "Scorri in fondo", "Today" : "Oggi", "Yesterday" : "Ieri", diff --git a/l10n/ka_GE.js b/l10n/ka_GE.js index 238efbbdd..a1c3111dc 100644 --- a/l10n/ka_GE.js +++ b/l10n/ka_GE.js @@ -98,7 +98,6 @@ OC.L10N.register( "Reply" : "პასუხი", "Mark as unread" : "წაუკითხავად მონიშვნა", "Contact" : "კონტაქტი", - "You voted" : "თქვენ მიეცით ხმა", "Today" : "დღეს", "Yesterday" : "გუშინ", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/ka_GE.json b/l10n/ka_GE.json index 9cb402ffc..dcfbb25f6 100644 --- a/l10n/ka_GE.json +++ b/l10n/ka_GE.json @@ -96,7 +96,6 @@ "Reply" : "პასუხი", "Mark as unread" : "წაუკითხავად მონიშვნა", "Contact" : "კონტაქტი", - "You voted" : "თქვენ მიეცით ხმა", "Today" : "დღეს", "Yesterday" : "გუშინ", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/lt_LT.js b/l10n/lt_LT.js index 61a53c801..85bd7a91c 100644 --- a/l10n/lt_LT.js +++ b/l10n/lt_LT.js @@ -27,6 +27,8 @@ OC.L10N.register( "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Dabar, pokalbių ir dalyvių paieška taip pat filtruos ir jūsų esamus pokalbius, todėl bus žymiai lengviau rasti ankstesnius pokalbius", "- You can now add custom user groups to conversations when the circles app is installed" : "- Nuo šiol, kai turite įdiegtą ratų programėlę, galite pridėti į pokalbius tinkintas naudotojų grupes", "- Spice up your messages with emojis from the emoji picker" : "- Praturtinkite savo žinutes šypsenėlėmis iš šypsenėlių parinkiklio", + "- You can now react to chat message" : "- Dabar galite reaguoti į žinutę pokalbyje", + "- In the sidebar you can now find an overview of the latest shared items" : "- Dabar šoninėje juostoje galite rasti paskutinių bendrintų elementų apžvalgą", "There are currently no commands available." : "Šiuo metu nėra prieinamų komandų.", "The command does not exist" : "Komandos nėra", "An error occurred while running the command. Please ask an administrator to check the logs." : "Vykdant komandą, įvyko klaida. Paprašykite administratoriaus, kad patikrintų žurnalus.", @@ -86,6 +88,9 @@ OC.L10N.register( "You removed {user}" : "Jūs pašalinote naudotoją {user}", "{actor} removed you" : "{actor} jus pašalino", "An administrator removed {user}" : "Administratorius pašalino naudotoją {user}", + "{actor} invited {user}" : "{actor} pakvietė naudotoją {user}", + "You invited {user}" : "Jūs pakvietėte naudotoją {user}", + "An administrator invited {user}" : "Administratorius pakvietė naudotoją {user}", "{actor} removed group {group}" : "{actor} pašalino grupę {group}", "You removed group {group}" : "Jūs pašalinote grupę {group}", "An administrator removed group {group}" : "Administratorius pašalino grupę {group}", @@ -680,8 +685,10 @@ OC.L10N.register( "Participants" : "Dalyviai", "Chat" : "Pokalbis", "Details" : "Išsamiau", + "Shared items" : "Bendrinami elementai", "Participants ({count})" : "Dalyviai ({count})", "Projects" : "Projektai", + "No shared items" : "Nėra bendrinamų elementų", "Show all media" : "Rodyti visą mediją", "Show all files" : "Rodyti visus failus", "Meeting ID: {meetingId}" : "Susitikimo ID: {meetingId}", @@ -689,8 +696,12 @@ OC.L10N.register( "Attachments folder" : "Priedų aplankas", "Privacy" : "Privatumas", "Sounds" : "Garsai", - "Keyboard shortcuts" : "Klavišų kombinacijos", + "Keyboard shortcuts" : "Spartieji klavišai", + "Fullscreen the chat or call" : "Rodyti pokalbį ar skambutį visame ekrane", "Search" : "Ieškoti", + "Shortcuts while in a call" : "Spartieji klavišai dalyvaujant skambutyje", + "Camera on and off" : "Įjungti ar išjungti kamerą", + "Microphone on and off" : "Įjungti ar išjungti mikrofoną", "Space bar" : "Tarpas", "Raise or lower hand" : "Pakelti ar nuleisti ranką", "Choose the folder in which attachments should be saved." : "Pasirinkite aplanką į kurį bus įrašomi priedai.", diff --git a/l10n/lt_LT.json b/l10n/lt_LT.json index cdbe4c9aa..9007b842f 100644 --- a/l10n/lt_LT.json +++ b/l10n/lt_LT.json @@ -25,6 +25,8 @@ "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Dabar, pokalbių ir dalyvių paieška taip pat filtruos ir jūsų esamus pokalbius, todėl bus žymiai lengviau rasti ankstesnius pokalbius", "- You can now add custom user groups to conversations when the circles app is installed" : "- Nuo šiol, kai turite įdiegtą ratų programėlę, galite pridėti į pokalbius tinkintas naudotojų grupes", "- Spice up your messages with emojis from the emoji picker" : "- Praturtinkite savo žinutes šypsenėlėmis iš šypsenėlių parinkiklio", + "- You can now react to chat message" : "- Dabar galite reaguoti į žinutę pokalbyje", + "- In the sidebar you can now find an overview of the latest shared items" : "- Dabar šoninėje juostoje galite rasti paskutinių bendrintų elementų apžvalgą", "There are currently no commands available." : "Šiuo metu nėra prieinamų komandų.", "The command does not exist" : "Komandos nėra", "An error occurred while running the command. Please ask an administrator to check the logs." : "Vykdant komandą, įvyko klaida. Paprašykite administratoriaus, kad patikrintų žurnalus.", @@ -84,6 +86,9 @@ "You removed {user}" : "Jūs pašalinote naudotoją {user}", "{actor} removed you" : "{actor} jus pašalino", "An administrator removed {user}" : "Administratorius pašalino naudotoją {user}", + "{actor} invited {user}" : "{actor} pakvietė naudotoją {user}", + "You invited {user}" : "Jūs pakvietėte naudotoją {user}", + "An administrator invited {user}" : "Administratorius pakvietė naudotoją {user}", "{actor} removed group {group}" : "{actor} pašalino grupę {group}", "You removed group {group}" : "Jūs pašalinote grupę {group}", "An administrator removed group {group}" : "Administratorius pašalino grupę {group}", @@ -678,8 +683,10 @@ "Participants" : "Dalyviai", "Chat" : "Pokalbis", "Details" : "Išsamiau", + "Shared items" : "Bendrinami elementai", "Participants ({count})" : "Dalyviai ({count})", "Projects" : "Projektai", + "No shared items" : "Nėra bendrinamų elementų", "Show all media" : "Rodyti visą mediją", "Show all files" : "Rodyti visus failus", "Meeting ID: {meetingId}" : "Susitikimo ID: {meetingId}", @@ -687,8 +694,12 @@ "Attachments folder" : "Priedų aplankas", "Privacy" : "Privatumas", "Sounds" : "Garsai", - "Keyboard shortcuts" : "Klavišų kombinacijos", + "Keyboard shortcuts" : "Spartieji klavišai", + "Fullscreen the chat or call" : "Rodyti pokalbį ar skambutį visame ekrane", "Search" : "Ieškoti", + "Shortcuts while in a call" : "Spartieji klavišai dalyvaujant skambutyje", + "Camera on and off" : "Įjungti ar išjungti kamerą", + "Microphone on and off" : "Įjungti ar išjungti mikrofoną", "Space bar" : "Tarpas", "Raise or lower hand" : "Pakelti ar nuleisti ranką", "Choose the folder in which attachments should be saved." : "Pasirinkite aplanką į kurį bus įrašomi priedai.", diff --git a/l10n/nb.js b/l10n/nb.js index 2fb6b4490..69f018765 100644 --- a/l10n/nb.js +++ b/l10n/nb.js @@ -526,7 +526,6 @@ OC.L10N.register( "Mark as unread" : "Merk som ulest", "Contact" : "Kontakt", "Poll" : "Avstemning", - "You voted" : "Du stemte", "Today" : "I dag", "Yesterday" : "I går", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/nb.json b/l10n/nb.json index d26f921bf..c156390c2 100644 --- a/l10n/nb.json +++ b/l10n/nb.json @@ -524,7 +524,6 @@ "Mark as unread" : "Merk som ulest", "Contact" : "Kontakt", "Poll" : "Avstemning", - "You voted" : "Du stemte", "Today" : "I dag", "Yesterday" : "I går", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/nl.js b/l10n/nl.js index ab27abf96..a483a0cd0 100644 --- a/l10n/nl.js +++ b/l10n/nl.js @@ -1008,7 +1008,6 @@ OC.L10N.register( "Deck Card" : "Deck kaart", "Remove {fileName}" : "Verwijderen {fileName}", "Open this location in OpenStreetMap" : "Open deze locatie in Openstreetmap", - "You voted" : "Je hebt gestemd", "Scroll to bottom" : "Scroll naar beneden", "Today" : "Vandaag", "Yesterday" : "Gisteren", diff --git a/l10n/nl.json b/l10n/nl.json index 8596314fd..de54efa96 100644 --- a/l10n/nl.json +++ b/l10n/nl.json @@ -1006,7 +1006,6 @@ "Deck Card" : "Deck kaart", "Remove {fileName}" : "Verwijderen {fileName}", "Open this location in OpenStreetMap" : "Open deze locatie in Openstreetmap", - "You voted" : "Je hebt gestemd", "Scroll to bottom" : "Scroll naar beneden", "Today" : "Vandaag", "Yesterday" : "Gisteren", diff --git a/l10n/pl.js b/l10n/pl.js index 8c1c62e1f..cd705efa6 100644 --- a/l10n/pl.js +++ b/l10n/pl.js @@ -1024,8 +1024,6 @@ OC.L10N.register( "See results" : "Zobacz wyniki", "Submit vote" : "Wyślij głos", "End poll" : "Zakończ sondę", - "Poll ・ You voted" : "Sonda ・ Zagłosowałeś", - "You voted" : "Zagłosowałeś", "Change your vote" : "Zmień swój głos", "Poll ・ Click to vote" : "Sonda ・ Kliknij, aby zagłosować", "Poll ・ Ended" : "Sonda ・ Zakończona", diff --git a/l10n/pl.json b/l10n/pl.json index b41a62628..bb07d239f 100644 --- a/l10n/pl.json +++ b/l10n/pl.json @@ -1022,8 +1022,6 @@ "See results" : "Zobacz wyniki", "Submit vote" : "Wyślij głos", "End poll" : "Zakończ sondę", - "Poll ・ You voted" : "Sonda ・ Zagłosowałeś", - "You voted" : "Zagłosowałeś", "Change your vote" : "Zmień swój głos", "Poll ・ Click to vote" : "Sonda ・ Kliknij, aby zagłosować", "Poll ・ Ended" : "Sonda ・ Zakończona", diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js index e94cdda69..b56a9ee3f 100644 --- a/l10n/pt_BR.js +++ b/l10n/pt_BR.js @@ -1018,7 +1018,6 @@ OC.L10N.register( "Open this location in OpenStreetMap" : "Abra este local no OpenStreetMap", "Poll" : "Enquete", "End poll" : "Encerrar enquete", - "You voted" : "Você votou", "Poll ・ Click to vote" : "Enquete ・ Clique para votar", "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultado da enquete • %n voto","Resultado da enquete • %n votes","Resultado da enquete • %n votos"], "Scroll to bottom" : "Rolar para baixo", diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json index 891aa745b..bfbcff1a4 100644 --- a/l10n/pt_BR.json +++ b/l10n/pt_BR.json @@ -1016,7 +1016,6 @@ "Open this location in OpenStreetMap" : "Abra este local no OpenStreetMap", "Poll" : "Enquete", "End poll" : "Encerrar enquete", - "You voted" : "Você votou", "Poll ・ Click to vote" : "Enquete ・ Clique para votar", "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultado da enquete • %n voto","Resultado da enquete • %n votes","Resultado da enquete • %n votos"], "Scroll to bottom" : "Rolar para baixo", diff --git a/l10n/ru.js b/l10n/ru.js index 823c9b6a3..134a2cfe0 100644 --- a/l10n/ru.js +++ b/l10n/ru.js @@ -961,7 +961,6 @@ OC.L10N.register( "Deck Card" : "Карточка", "Remove {fileName}" : "Удалить {fileName}", "Open this location in OpenStreetMap" : "Открыть местоположение в OpenStreetMap", - "You voted" : "Вы проголосовали", "Scroll to bottom" : "Прокрутить вниз", "Today" : "Сегодня", "Yesterday" : "Вчера", diff --git a/l10n/ru.json b/l10n/ru.json index 807ff302c..85b92b0c9 100644 --- a/l10n/ru.json +++ b/l10n/ru.json @@ -959,7 +959,6 @@ "Deck Card" : "Карточка", "Remove {fileName}" : "Удалить {fileName}", "Open this location in OpenStreetMap" : "Открыть местоположение в OpenStreetMap", - "You voted" : "Вы проголосовали", "Scroll to bottom" : "Прокрутить вниз", "Today" : "Сегодня", "Yesterday" : "Вчера", diff --git a/l10n/sk.js b/l10n/sk.js index f5a5956fd..3c2491bac 100644 --- a/l10n/sk.js +++ b/l10n/sk.js @@ -960,7 +960,6 @@ OC.L10N.register( "Deck Card" : "Karta aplikácie Deck", "Remove {fileName}" : "Dostrániť {fileName}", "Open this location in OpenStreetMap" : "Otvoriť toto umiestnenie v Openstreetmap", - "You voted" : "Hlasovali ste", "Scroll to bottom" : "Posuňte sa nadol", "Today" : "Dnes", "Yesterday" : "Včera", diff --git a/l10n/sk.json b/l10n/sk.json index 40b8639b2..68e232a02 100644 --- a/l10n/sk.json +++ b/l10n/sk.json @@ -958,7 +958,6 @@ "Deck Card" : "Karta aplikácie Deck", "Remove {fileName}" : "Dostrániť {fileName}", "Open this location in OpenStreetMap" : "Otvoriť toto umiestnenie v Openstreetmap", - "You voted" : "Hlasovali ste", "Scroll to bottom" : "Posuňte sa nadol", "Today" : "Dnes", "Yesterday" : "Včera", diff --git a/l10n/sr.js b/l10n/sr.js index 40472be03..7503f08d5 100644 --- a/l10n/sr.js +++ b/l10n/sr.js @@ -498,7 +498,6 @@ OC.L10N.register( "Mark as unread" : "Означи као непрочитано", "Go to file" : "Иди на фајл", "Contact" : "Контакт", - "You voted" : "Гласали сте", "Today" : "Данас", "Yesterday" : "Јуче", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/sr.json b/l10n/sr.json index 51266b967..dc22749ef 100644 --- a/l10n/sr.json +++ b/l10n/sr.json @@ -496,7 +496,6 @@ "Mark as unread" : "Означи као непрочитано", "Go to file" : "Иди на фајл", "Contact" : "Контакт", - "You voted" : "Гласали сте", "Today" : "Данас", "Yesterday" : "Јуче", "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", diff --git a/l10n/tr.js b/l10n/tr.js index e6162f2ce..3b26fdc61 100644 --- a/l10n/tr.js +++ b/l10n/tr.js @@ -1024,8 +1024,6 @@ OC.L10N.register( "See results" : "Sonuçları görüntüle", "Submit vote" : "Oyu gönder", "End poll" : "Anketi sonlandır", - "Poll ・ You voted" : "Anket ・ Oyladınız", - "You voted" : "Oyladınız", "Change your vote" : "Oyunuzu değiştirin", "Poll ・ Click to vote" : "Anket - Oylamak için tıklayın", "Poll ・ Ended" : "Anket ・ Sona ermiş", diff --git a/l10n/tr.json b/l10n/tr.json index d1dc66a58..a26df87e9 100644 --- a/l10n/tr.json +++ b/l10n/tr.json @@ -1022,8 +1022,6 @@ "See results" : "Sonuçları görüntüle", "Submit vote" : "Oyu gönder", "End poll" : "Anketi sonlandır", - "Poll ・ You voted" : "Anket ・ Oyladınız", - "You voted" : "Oyladınız", "Change your vote" : "Oyunuzu değiştirin", "Poll ・ Click to vote" : "Anket - Oylamak için tıklayın", "Poll ・ Ended" : "Anket ・ Sona ermiş", diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js index c0096206f..e66c1ea00 100644 --- a/l10n/zh_CN.js +++ b/l10n/zh_CN.js @@ -951,7 +951,6 @@ OC.L10N.register( "Deck Card" : "Deck 卡片", "Remove {fileName}" : "删除 {fileName}", "Open this location in OpenStreetMap" : "在 OpenStreetMap 中打开此位置", - "You voted" : "你投了票", "Scroll to bottom" : "滚动到底部", "Today" : "今天", "Yesterday" : "昨天", diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json index 5ccdf6abe..802be908c 100644 --- a/l10n/zh_CN.json +++ b/l10n/zh_CN.json @@ -949,7 +949,6 @@ "Deck Card" : "Deck 卡片", "Remove {fileName}" : "删除 {fileName}", "Open this location in OpenStreetMap" : "在 OpenStreetMap 中打开此位置", - "You voted" : "你投了票", "Scroll to bottom" : "滚动到底部", "Today" : "今天", "Yesterday" : "昨天", diff --git a/l10n/zh_HK.js b/l10n/zh_HK.js index 6c864eeec..afc5680f2 100644 --- a/l10n/zh_HK.js +++ b/l10n/zh_HK.js @@ -1024,8 +1024,6 @@ OC.L10N.register( "See results" : "查看結果", "Submit vote" : "遞交投票", "End poll" : "結束民意調查", - "Poll ・ You voted" : "民意調查・已投票", - "You voted" : "您已投票", "Change your vote" : "更改您的投票", "Poll ・ Click to vote" : "民意調查 · 點擊投票", "Poll ・ Ended" : "民意調查・ 已結束", diff --git a/l10n/zh_HK.json b/l10n/zh_HK.json index 1c2e2d9d8..4765e44d6 100644 --- a/l10n/zh_HK.json +++ b/l10n/zh_HK.json @@ -1022,8 +1022,6 @@ "See results" : "查看結果", "Submit vote" : "遞交投票", "End poll" : "結束民意調查", - "Poll ・ You voted" : "民意調查・已投票", - "You voted" : "您已投票", "Change your vote" : "更改您的投票", "Poll ・ Click to vote" : "民意調查 · 點擊投票", "Poll ・ Ended" : "民意調查・ 已結束", diff --git a/l10n/zh_TW.js b/l10n/zh_TW.js index eabd47494..3885cd3b1 100644 --- a/l10n/zh_TW.js +++ b/l10n/zh_TW.js @@ -383,7 +383,6 @@ OC.L10N.register( "Mark as unread" : "標為未讀", "Contact" : "聯絡人", "{stack} in {board}" : "{stack} 於 {board}", - "You voted" : "您已投票", "Today" : "今天", "Yesterday" : "昨天", "Record voice message" : "錄製語音訊息", diff --git a/l10n/zh_TW.json b/l10n/zh_TW.json index f7c206758..3bb3c3ca1 100644 --- a/l10n/zh_TW.json +++ b/l10n/zh_TW.json @@ -381,7 +381,6 @@ "Mark as unread" : "標為未讀", "Contact" : "聯絡人", "{stack} in {board}" : "{stack} 於 {board}", - "You voted" : "您已投票", "Today" : "今天", "Yesterday" : "昨天", "Record voice message" : "錄製語音訊息", diff --git a/lib/Listener/UserDeletedListener.php b/lib/Listener/UserDeletedListener.php index 17a589f4c..229616ecb 100644 --- a/lib/Listener/UserDeletedListener.php +++ b/lib/Listener/UserDeletedListener.php @@ -24,15 +24,19 @@ declare(strict_types=1); namespace OCA\Talk\Listener; use OCA\Talk\Manager; +use OCA\Talk\Model\Attendee; +use OCA\Talk\Service\PollService; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\User\Events\UserDeletedEvent; class UserDeletedListener implements IEventListener { private Manager $manager; + private PollService $pollService; - public function __construct(Manager $manager) { + public function __construct(Manager $manager, PollService $pollService) { $this->manager = $manager; + $this->pollService = $pollService; } public function handle(Event $event): void { @@ -43,5 +47,7 @@ class UserDeletedListener implements IEventListener { $user = $event->getUser(); $this->manager->removeUserFromAllRooms($user); + + $this->pollService->neutralizeDeletedUser(Attendee::ACTOR_USERS, $user->getUID()); } } diff --git a/lib/Service/PollService.php b/lib/Service/PollService.php index 78cdb87fc..10f6cdda1 100644 --- a/lib/Service/PollService.php +++ b/lib/Service/PollService.php @@ -333,4 +333,24 @@ class PollService { ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); $update->executeStatement(); } + + public function neutralizeDeletedUser(string $actorType, string $actorId): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_polls') + ->set('display_name', $update->createNamedParameter('')) + ->set('actor_type', $update->createNamedParameter('deleted_users')) + ->set('actor_id', $update->createNamedParameter('deleted_users')) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_poll_votes') + ->set('display_name', $update->createNamedParameter('')) + ->set('actor_type', $update->createNamedParameter('deleted_users')) + ->set('actor_id', $update->createNamedParameter('deleted_users')) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + } } diff --git a/package-lock.json b/package-lock.json index 141495000..e37136f03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,9 +20,9 @@ "@nextcloud/moment": "^1.2.1", "@nextcloud/paths": "^2.1.0", "@nextcloud/router": "^2.0.0", - "@nextcloud/vue": "^7.0.0-beta.3", + "@nextcloud/vue": "^7.0.0-beta.4", "@nextcloud/vue-dashboard": "^2.0.1", - "@nextcloud/vue-richtext": "^2.0.0", + "@nextcloud/vue-richtext": "^2.0.1", "attachmediastream": "^2.1.0", "color.js": "^1.2.0", "crypto-js": "^4.1.1", @@ -3388,9 +3388,9 @@ } }, "node_modules/@nextcloud/vue": { - "version": "7.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-7.0.0-beta.3.tgz", - "integrity": "sha512-lnEVzPPt4eGLHrSwsft5oBg7pEqVZA2DteWR/Bq02+jptqE7at6W8sV7PMBR0N5VRI2yNsm7sMIJLsHXvxmpfg==", + "version": "7.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-7.0.0-beta.4.tgz", + "integrity": "sha512-uGRtiFzGaSjWmUN4cKXgnoJc/NViVHTOo7tsZI+B+FhlS5ZpEsWHeR2TkOaL5gk9dwdsKjY7c8uc+48fsFXQJg==", "dependencies": { "@nextcloud/auth": "^2.0.0", "@nextcloud/axios": "^2.0.0", @@ -3599,9 +3599,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@nextcloud/vue-richtext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nextcloud/vue-richtext/-/vue-richtext-2.0.0.tgz", - "integrity": "sha512-Z/AbweVmIB8shWZVLI0kUPrJnkCBlU5xIkkfv+RPFepLY7eZ+ttm5HRhLGqgFyXFNf4RIM7yGt/l6K35XcEX2A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nextcloud/vue-richtext/-/vue-richtext-2.0.1.tgz", + "integrity": "sha512-/44HTGBqokWXyRQJyh2YJgnJK7xv0nKdHxwHqvVAmcnsp7tipc6C1aPRJeHGXgbHoo+DbdpVp4l3+hlVqeUkFA==", "dependencies": { "@nextcloud/axios": "^2.0.0", "@nextcloud/router": "^2.0.0", @@ -24287,9 +24287,9 @@ } }, "@nextcloud/vue": { - "version": "7.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-7.0.0-beta.3.tgz", - "integrity": "sha512-lnEVzPPt4eGLHrSwsft5oBg7pEqVZA2DteWR/Bq02+jptqE7at6W8sV7PMBR0N5VRI2yNsm7sMIJLsHXvxmpfg==", + "version": "7.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-7.0.0-beta.4.tgz", + "integrity": "sha512-uGRtiFzGaSjWmUN4cKXgnoJc/NViVHTOo7tsZI+B+FhlS5ZpEsWHeR2TkOaL5gk9dwdsKjY7c8uc+48fsFXQJg==", "requires": { "@nextcloud/auth": "^2.0.0", "@nextcloud/axios": "^2.0.0", @@ -24529,9 +24529,9 @@ } }, "@nextcloud/vue-richtext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nextcloud/vue-richtext/-/vue-richtext-2.0.0.tgz", - "integrity": "sha512-Z/AbweVmIB8shWZVLI0kUPrJnkCBlU5xIkkfv+RPFepLY7eZ+ttm5HRhLGqgFyXFNf4RIM7yGt/l6K35XcEX2A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nextcloud/vue-richtext/-/vue-richtext-2.0.1.tgz", + "integrity": "sha512-/44HTGBqokWXyRQJyh2YJgnJK7xv0nKdHxwHqvVAmcnsp7tipc6C1aPRJeHGXgbHoo+DbdpVp4l3+hlVqeUkFA==", "requires": { "@nextcloud/axios": "^2.0.0", "@nextcloud/router": "^2.0.0", diff --git a/package.json b/package.json index 8f801b8e6..7384e90b5 100644 --- a/package.json +++ b/package.json @@ -28,9 +28,9 @@ "@nextcloud/moment": "^1.2.1", "@nextcloud/paths": "^2.1.0", "@nextcloud/router": "^2.0.0", - "@nextcloud/vue": "^7.0.0-beta.3", + "@nextcloud/vue": "^7.0.0-beta.4", "@nextcloud/vue-dashboard": "^2.0.1", - "@nextcloud/vue-richtext": "^2.0.0", + "@nextcloud/vue-richtext": "^2.0.1", "attachmediastream": "^2.1.0", "color.js": "^1.2.0", "crypto-js": "^4.1.1", diff --git a/src/components/AvatarWrapper/AvatarWrapperSmall.vue b/src/components/AvatarWrapper/AvatarWrapperSmall.vue index 952450dd8..9c88832ad 100644 --- a/src/components/AvatarWrapper/AvatarWrapperSmall.vue +++ b/src/components/AvatarWrapper/AvatarWrapperSmall.vue @@ -28,6 +28,11 @@ <div v-if="iconClass" class="icon" :class="[`avatar-${sizeToString}px`, iconClass]" /> + <div v-else-if="isDeletedUser" + class="guest" + :class="`avatar-${sizeToString}px`"> + X + </div> <NcAvatar v-else-if="!isGuest" :user="id" :display-name="name" @@ -98,7 +103,7 @@ export default { computed: { // Determines which icon is displayed iconClass() { - if (!this.source || this.source === 'users' || this.isGuest) { + if (!this.source || this.source === 'users' || this.isGuest || this.isDeletedUser) { return '' } if (this.source === 'emails') { @@ -110,6 +115,9 @@ export default { isGuest() { return this.source === 'guests' }, + isDeletedUser() { + return this.source === 'deleted_users' + }, firstLetterOfGuestName() { const customName = this.name !== t('spreed', 'Guest') ? this.name : '?' return customName.charAt(0) diff --git a/src/components/CallView/CallView.vue b/src/components/CallView/CallView.vue index b6f15695b..7e9533206 100644 --- a/src/components/CallView/CallView.vue +++ b/src/components/CallView/CallView.vue @@ -39,6 +39,7 @@ :show-talking-highlight="false" :is-grid="true" :is-big="true" + :is-one-to-one="isOneToOne" :fit-video="true" /> </template> </div> diff --git a/src/components/CallView/shared/LocalVideo.vue b/src/components/CallView/shared/LocalVideo.vue index 81bfc7fe7..1aa791652 100644 --- a/src/components/CallView/shared/LocalVideo.vue +++ b/src/components/CallView/shared/LocalVideo.vue @@ -409,6 +409,7 @@ export default { #localVideoContainer { grid-row-end: -1; border-radius: calc(var(--default-clickable-area)/2); + z-index: 1; } </style> diff --git a/src/components/ConversationSettings/ConversationSettingsDialog.vue b/src/components/ConversationSettings/ConversationSettingsDialog.vue index 58077429a..bb3896f1b 100644 --- a/src/components/ConversationSettings/ConversationSettingsDialog.vue +++ b/src/components/ConversationSettings/ConversationSettingsDialog.vue @@ -226,7 +226,7 @@ export default { this.$store.dispatch('updateConversationSettingsToken', token) this.showSettings = true this.$nextTick(() => { - this.$refs.linkShareSettings.focus() + this.$refs.linkShareSettings.$el.focus() }) }, diff --git a/src/components/LeftSidebar/NewGroupConversation/SetContacts/SetContacts.vue b/src/components/LeftSidebar/NewGroupConversation/SetContacts/SetContacts.vue index 9b8f40197..5b95db2a5 100644 --- a/src/components/LeftSidebar/NewGroupConversation/SetContacts/SetContacts.vue +++ b/src/components/LeftSidebar/NewGroupConversation/SetContacts/SetContacts.vue @@ -23,8 +23,8 @@ <div class="set-contacts"> <!-- Search --> <NcTextField ref="setContacts" - v-model="searchText" v-observe-visibility="visibilityChanged" + :value.sync="searchText" type="text" :placeholder="t('spreed', 'Search participants')" @input="handleInput"> diff --git a/src/components/LeftSidebar/NewGroupConversation/SetConversationName/SetConversationName.vue b/src/components/LeftSidebar/NewGroupConversation/SetConversationName/SetConversationName.vue index 8609423c9..3298557c8 100644 --- a/src/components/LeftSidebar/NewGroupConversation/SetConversationName/SetConversationName.vue +++ b/src/components/LeftSidebar/NewGroupConversation/SetConversationName/SetConversationName.vue @@ -27,8 +27,7 @@ :value="value" :placeholder="t('spreed', 'Conversation name')" @input="handleInput" - @keydown.enter="handleKeydown"> - </NcTextField> + @keydown.enter="handleKeydown" /> </div> </template> diff --git a/src/components/MessagesList/MessagesGroup/Message/Message.vue b/src/components/MessagesList/MessagesGroup/Message/Message.vue index 9cb6b1cf9..41497f55c 100644 --- a/src/components/MessagesList/MessagesGroup/Message/Message.vue +++ b/src/components/MessagesList/MessagesGroup/Message/Message.vue @@ -174,6 +174,7 @@ the main body of the message as well as a quote. :is-action-menu-open.sync="isActionMenuOpen" :is-emoji-picker-open.sync="isEmojiPickerOpen" :is-reactions-menu-open.sync="isReactionsMenuOpen" + :is-forwarder-open.sync="isForwarderOpen" :message-api-data="messageApiData" :message-object="messageObject" :is-last-read="isLastReadMessage" @@ -400,6 +401,7 @@ export default { isActionMenuOpen: false, isEmojiPickerOpen: false, isReactionsMenuOpen: false, + isForwarderOpen: false, detailedReactionsLoading: false, } }, @@ -566,7 +568,7 @@ export default { }, showMessageButtonsBar() { - return !this.isSystemMessage && !this.isTemporary && (this.isHovered || this.isActionMenuOpen || this.isEmojiPickerOpen || this.isReactionsMenuOpen) + return !this.isSystemMessage && !this.isTemporary && (this.isHovered || this.isActionMenuOpen || this.isEmojiPickerOpen || this.isReactionsMenuOpen || this.isForwarderOpen) }, isTemporaryUpload() { diff --git a/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/Forwarder.vue b/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/Forwarder.vue index ca5dc99b6..2366e21bf 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/Forwarder.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/Forwarder.vue @@ -118,7 +118,7 @@ export default { }, selectedConversationName() { - return this.$store.getters?.conversation(this.selectedConversationToken).name + return this.$store.getters?.conversation(this.selectedConversationToken).displayName }, /** diff --git a/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.vue b/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.vue index 81bdd8ea9..de1967658 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessageButtonsBar/MessageButtonsBar.vue @@ -72,9 +72,10 @@ </NcActionLink> <NcActionButton v-if="!isCurrentGuest && !isFileShare && !isDeletedMessage" :close-after-click="true" - @click.stop="showForwarder = true"> - <Share slot="icon" - :size="16" /> + @click.stop="openForwarder"> + <template #icon> + <Share :size="16" /> + </template> {{ t('spreed', 'Forward message') }} </NcActionButton> <NcActionSeparator v-if="messageActions.length > 0" /> @@ -131,9 +132,9 @@ </NcButton> </NcEmojiPicker> </template> - <Forwarder v-if="showForwarder" + <Forwarder v-if="isForwarderOpen" :message-object="messageObject" - @close="showForwarder = false" /> + @close="closeForwarder" /> </div> </template> @@ -294,6 +295,11 @@ export default { required: true, }, + isForwarderOpen: { + type: Boolean, + required: true, + }, + canReact: { type: Boolean, required: true, @@ -310,13 +316,6 @@ export default { }, }, - data() { - return { - // Shows/hides the message forwarder component - showForwarder: false, - } - }, - computed: { conversation() { return this.$store.getters.conversation(this.token) @@ -474,6 +473,14 @@ export default { this.$emit('update:isReactionsMenuOpen', true) }, + openForwarder() { + this.$emit('update:isForwarderOpen', true) + }, + + closeForwarder() { + this.$emit('update:isForwarderOpen', false) + }, + // Making sure that the click is outside the MessageButtonsBar handleClickOutside(event) { if (event.composedPath().indexOf(this.$el) !== -1) { diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Poll.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Poll.vue index 3fd1e7b79..982343b3b 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Poll.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Poll.vue @@ -116,7 +116,7 @@ {{ n('spreed', 'Poll results • %n vote', 'Poll results • %n votes', votersNumber) }} </template> <template v-else-if="selfHasVoted"> - {{ t('spreed', 'Poll ・ You voted') }} + {{ t('spreed', 'Poll ・ You voted already') }} </template> </div> <div class="results__options"> @@ -136,7 +136,7 @@ <PollVotersDetails v-if="details" :details="getFilteredDetails(index)" /> <p v-if="selfHasVotedOption(index)" class="results__option-subtitle"> - {{ t('spreed','You voted') }} + {{ t('spreed','You voted for this option') }} </p> </div> <NcProgressBar class="results__option-progress" @@ -349,7 +349,7 @@ export default { pollFooterText() { if (this.pollIsOpen) { - return this.selfHasVoted ? t('spreed', 'Poll ・ You voted') : t('spreed', 'Poll ・ Click to vote') + return this.selfHasVoted ? t('spreed', 'Poll ・ You voted already') : t('spreed', 'Poll ・ Click to vote') } else if (this.pollIsClosed) { return t('spreed', 'Poll ・ Ended') } diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/PollVotersDetails.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/PollVotersDetails.vue index 0c30c076b..865a1df91 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/PollVotersDetails.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/PollVotersDetails.vue @@ -80,6 +80,10 @@ export default { return t('spreed', 'Guest') } + if (item.actorType === 'deleted_users') { + return t('spreed', 'Deleted user') + } + return item.actorDisplayName }, }, diff --git a/src/components/MessagesList/MessagesList.vue b/src/components/MessagesList/MessagesList.vue index c81c407ed..74a3138d9 100644 --- a/src/components/MessagesList/MessagesList.vue +++ b/src/components/MessagesList/MessagesList.vue @@ -129,6 +129,8 @@ export default { loadingOldMessages: false, destroying: false, + + expirationInterval: null, } }, @@ -247,8 +249,16 @@ export default { this.$store.dispatch('cancelLookForNewMessages', { requestId: oldValue }) } this.handleStartGettingMessagesPreconditions() + + // Remove expired messages when joining a room + this.removeExpiredMessagesFromStore() }, }, + + token(newToken, oldToken) { + // Expire older messages when navigating to another conversation + this.$store.dispatch('easeMessageList', { token: oldToken }) + }, }, mounted() { @@ -261,6 +271,13 @@ export default { subscribe('networkOffline', this.handleNetworkOffline) subscribe('networkOnline', this.handleNetworkOnline) window.addEventListener('focus', this.onWindowFocus) + + /** + * Every 30 seconds we remove expired messages from the store + */ + this.expirationInterval = window.setInterval(() => { + this.removeExpiredMessagesFromStore() + }, 30000) }, beforeDestroy() { @@ -275,9 +292,20 @@ export default { unsubscribe('networkOffline', this.handleNetworkOffline) unsubscribe('networkOnline', this.handleNetworkOnline) + + if (this.expirationInterval) { + clearInterval(this.expirationInterval) + this.expirationInterval = null + } }, methods: { + removeExpiredMessagesFromStore() { + this.$store.dispatch('removeExpiredMessages', { + token: this.token, + }) + }, + /** * Compare two messages to decide if they should be grouped * diff --git a/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue b/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue index c44ca0371..e62e560ea 100644 --- a/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue +++ b/src/components/RightSidebar/Participants/ParticipantsList/Participant/Participant.vue @@ -49,7 +49,7 @@ <div class="participant-row__user-wrapper" :class="{ 'has-call-icon': callIcon, - 'has-menu-icon': canBeModerated && !isSearched + 'has-menu-icon': (canBeModerated || canSendCallNotification) && !isSearched }"> <!-- First line: participant's name and type --> <div ref="userName" @@ -89,7 +89,7 @@ </div> <!-- Participant's actions menu --> - <NcActions v-if="canBeModerated && !isSearched" + <NcActions v-if="(canBeModerated || canSendCallNotification) && !isSearched" :container="container" :aria-label="participantSettingsAriaLabel" :force-menu="true" @@ -159,7 +159,7 @@ {{ t('spreed', 'Edit permissions') }} </NcActionButton> </template> - <NcActionButton v-if="isEmailActor" + <NcActionButton v-if="canBeModerated && isEmailActor" icon="icon-mail" :close-after-click="true" @click="resendInvitation"> @@ -174,7 +174,8 @@ {{ t('spreed', 'Send call notification') }} </NcActionButton> <NcActionSeparator v-if="attendeePin || canBePromoted || canBeDemoted || isEmailActor" /> - <NcActionButton icon="icon-delete" + <NcActionButton v-if="canBeModerated" + icon="icon-delete" :close-after-click="true" @click="removeParticipant"> <template v-if="isGroup"> @@ -472,7 +473,7 @@ export default { }, attendeePin() { - return this.participant.attendeePin ? this.readableNumber(this.participant.attendeePin) : '' + return this.canBeModerated && this.participant.attendeePin ? this.readableNumber(this.participant.attendeePin) : '' }, token() { @@ -528,7 +529,7 @@ export default { }, showPermissionsOptions() { - return this.selfIsModerator + return this.canBeModerated && !this.isModerator && (this.participant.actorType === ATTENDEE.ACTOR_TYPE.USERS || this.participant.actorType === ATTENDEE.ACTOR_TYPE.GUESTS diff --git a/src/components/RightSidebar/SharedItems/SharedItems.vue b/src/components/RightSidebar/SharedItems/SharedItems.vue index ffc1a147a..5fa632d4f 100644 --- a/src/components/RightSidebar/SharedItems/SharedItems.vue +++ b/src/components/RightSidebar/SharedItems/SharedItems.vue @@ -32,10 +32,18 @@ <div v-else-if="type === 'deckcard'" :key="item.id" class="shared-items__deckcard" - :class="{ 'shared-items__location--nolimit': limit === 0 }"> + :class="{ 'shared-items__deckcard--nolimit': limit === 0 }"> <DeckCard :wide="true" v-bind="item.messageParameters.object" /> </div> + <div v-else-if="type === 'poll'" + :key="item.id" + class="shared-items__poll" + :class="{ 'shared-items__poll--nolimit': limit === 0 }"> + <Poll v-bind="item.messageParameters.object" + :token="$store.getters.getToken()" + :poll-name="item.messageParameters.object.name" /> + </div> <template v-else-if="type === 'other'"> <div :key="item.id" class="shared-items__other"> @@ -60,18 +68,20 @@ </template> <script> +import DeckCard from '../../MessagesList/MessagesGroup/Message/MessagePart/DeckCard.vue' import FilePreview from '../../MessagesList/MessagesGroup/Message/MessagePart/FilePreview.vue' -import { SHARED_ITEM } from '../../../constants.js' import Location from '../../MessagesList/MessagesGroup/Message/MessagePart/Location.vue' -import DeckCard from '../../MessagesList/MessagesGroup/Message/MessagePart/DeckCard.vue' +import Poll from '../../MessagesList/MessagesGroup/Message/MessagePart/Poll.vue' +import { SHARED_ITEM } from '../../../constants.js' export default { name: 'SharedItems', components: { + DeckCard, FilePreview, Location, - DeckCard, + Poll, }, props: { @@ -119,10 +129,12 @@ export default { grid-template-rows: 1fr 1fr; grid-gap: 4px; margin: auto; + &__list { display: flex; flex-wrap: wrap; } + &__location { width: 100%; height: 150px; @@ -132,8 +144,14 @@ export default { width: 33%; } } + + &__poll, &__deckcard { width: 100%; + + &--nolimit { + width: 33%; + } } &__other { diff --git a/src/components/RightSidebar/SharedItems/SharedItemsTab.vue b/src/components/RightSidebar/SharedItems/SharedItemsTab.vue index 0ba4bcfe8..79e3fe9fd 100644 --- a/src/components/RightSidebar/SharedItems/SharedItemsTab.vue +++ b/src/components/RightSidebar/SharedItems/SharedItemsTab.vue @@ -27,7 +27,7 @@ <SharedItems :type="type" :limit="limit(type)" :items="sharedItems[type]" /> - <NcButton v-if="hasMore(sharedItems[type])" + <NcButton v-if="hasMore(type, sharedItems[type])" type="tertiary-no-background" class="more" :wide="true" @@ -39,6 +39,10 @@ </NcButton> </div> </template> + <NcRelatedResourcesPanel class="related-resources" + provider-id="talk" + :item-id="conversation.token" + @has-resources="value => hasRelatedResources = value" /> <template v-if="projectsEnabled"> <NcAppNavigationCaption :title="t('spreed', 'Projects')" /> <CollectionList v-if="getUserId && token" @@ -47,7 +51,7 @@ :name="conversation.displayName" :is-active="active" /> </template> - <NcEmptyContent v-else-if="!hasSharedItems" + <NcEmptyContent v-else-if="!hasSharedItems && !hasRelatedResources" :title="t('spreed', 'No shared items')"> <template #icon> <FolderMultipleImage :size="20" /> @@ -67,6 +71,7 @@ import { loadState } from '@nextcloud/initial-state' import SharedItems from './SharedItems.vue' import { SHARED_ITEM } from '../../../constants.js' import NcAppNavigationCaption from '@nextcloud/vue/dist/Components/NcAppNavigationCaption.js' +import NcRelatedResourcesPanel from '@nextcloud/vue/dist/Components/NcRelatedResourcesPanel.js' import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js' import SharedItemsBrowser from './SharedItemsBrowser/SharedItemsBrowser.vue' import DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue' @@ -82,6 +87,7 @@ export default { SharedItems, CollectionList, NcAppNavigationCaption, + NcRelatedResourcesPanel, NcButton, NcEmptyContent, SharedItemsBrowser, @@ -104,6 +110,7 @@ export default { showSharedItemsBrowser: false, browserActiveTab: '', projectsEnabled: loadState('core', 'projects_enabled', false), + hasRelatedResources: false, } }, @@ -146,8 +153,8 @@ export default { this.$store.dispatch('getSharedItemsOverview', { token: this.token }) }, - hasMore(items) { - return Object.values(items).length > 6 + hasMore(type, items) { + return Object.values(items).length > this.limit(type) }, showMore(type) { @@ -156,7 +163,7 @@ export default { }, limit(type) { - if (type === SHARED_ITEM.TYPES.DECK_CARD || type === SHARED_ITEM.TYPES.LOCATION) { + if (type === SHARED_ITEM.TYPES.DECK_CARD || type === SHARED_ITEM.TYPES.LOCATION || type === SHARED_ITEM.TYPES.POLL) { return 2 } else { return 6 @@ -169,6 +176,8 @@ export default { return t('spreed', 'Show all media') case SHARED_ITEM.TYPES.FILE: return t('spreed', 'Show all files') + case SHARED_ITEM.TYPES.POLL: + return t('spreed', 'Show all polls') case SHARED_ITEM.TYPES.DECK_CARD: return t('spreed', 'Show all deck cards') case SHARED_ITEM.TYPES.VOICE: @@ -187,9 +196,22 @@ export default { </script> <style lang="scss" scoped> +@use 'sass:math'; +@import '../../../assets/variables'; .more { margin-top: 8px; } +// Override default NcRelatedResourcesPanel styles +.related-resources { + &::v-deep .related-resources__header { + margin: 14px 0 !important; + padding: 0 8px 0 math.div($clickable-area, 2) !important; + h5 { + opacity: .7 !important; + color: var(--color-primary-element) !important; + } + } +} </style> diff --git a/src/components/UploadEditor.vue b/src/components/UploadEditor.vue index a17e6d9ac..7b4068170 100644 --- a/src/components/UploadEditor.vue +++ b/src/components/UploadEditor.vue @@ -158,7 +158,7 @@ export default { methods: { focus() { this.$nextTick(() => { - this.$refs.submitButton.focus() + this.$refs.submitButton.$el.focus() }) }, diff --git a/src/constants.js b/src/constants.js index 09ec679ab..bacf04c7d 100644 --- a/src/constants.js +++ b/src/constants.js @@ -113,6 +113,7 @@ export const SHARED_ITEM = { LOCATION: 'location', MEDIA: 'media', OTHER: 'other', + POLL: 'poll', VOICE: 'voice', }, } diff --git a/src/mixins/sharedItems.js b/src/mixins/sharedItems.js index bf8772caa..93db849ed 100644 --- a/src/mixins/sharedItems.js +++ b/src/mixins/sharedItems.js @@ -26,7 +26,7 @@ const sharedItems = { computed: { // Defines the order of the sections sharedItemsOrder() { - return [SHARED_ITEM.TYPES.MEDIA, SHARED_ITEM.TYPES.FILE, SHARED_ITEM.TYPES.VOICE, SHARED_ITEM.TYPES.AUDIO, SHARED_ITEM.TYPES.LOCATION, SHARED_ITEM.TYPES.DECK_CARD, SHARED_ITEM.TYPES.OTHER] + return [SHARED_ITEM.TYPES.MEDIA, SHARED_ITEM.TYPES.FILE, SHARED_ITEM.TYPES.POLL, SHARED_ITEM.TYPES.VOICE, SHARED_ITEM.TYPES.AUDIO, SHARED_ITEM.TYPES.LOCATION, SHARED_ITEM.TYPES.DECK_CARD, SHARED_ITEM.TYPES.OTHER] }, }, @@ -37,6 +37,8 @@ const sharedItems = { return t('spreed', 'Media') case SHARED_ITEM.TYPES.FILE: return t('spreed', 'Files') + case SHARED_ITEM.TYPES.POLL: + return t('spreed', 'Polls') case SHARED_ITEM.TYPES.DECK_CARD: return t('spreed', 'Deck cards') case SHARED_ITEM.TYPES.VOICE: diff --git a/src/store/messagesStore.js b/src/store/messagesStore.js index b19b00545..d6b64ead3 100644 --- a/src/store/messagesStore.js +++ b/src/store/messagesStore.js @@ -382,6 +382,43 @@ const mutations = { } } }, + + removeExpiredMessages(state, { token }) { + if (!state.messages[token]) { + return + } + + const timestamp = (new Date()) / 1000 + const messageIds = Object.keys(state.messages[token]) + messageIds.forEach((messageId) => { + if (state.messages[token][messageId].expirationTimestamp + && timestamp > state.messages[token][messageId].expirationTimestamp) { + Vue.delete(state.messages[token], messageId) + } + }) + }, + + easeMessageList(state, { token }) { + if (!state.messages[token]) { + return + } + + const messageIds = Object.keys(state.messages[token]) + if (messageIds.length < 300) { + return + } + + const messagesToRemove = messageIds.sort().reverse().slice(199) + const newFirstKnown = messagesToRemove.shift() + + messagesToRemove.forEach((messageId) => { + Vue.delete(state.messages[token], messageId) + }) + + if (state.firstKnown[token] && messagesToRemove.includes(state.firstKnown[token])) { + Vue.set(state.firstKnown, token, newFirstKnown) + } + }, } const actions = { @@ -1079,6 +1116,14 @@ const actions = { showError(t('spreed', 'Failed to remove reaction')) } }, + + async removeExpiredMessages(context, { token }) { + context.commit('removeExpiredMessages', { token }) + }, + + async easeMessageList(context, { token }) { + context.commit('easeMessageList', { token }) + }, } export default { state, mutations, getters, actions } diff --git a/src/store/sharedItemsStore.js b/src/store/sharedItemsStore.js index f1f903d35..8e1d1c6b7 100644 --- a/src/store/sharedItemsStore.js +++ b/src/store/sharedItemsStore.js @@ -30,6 +30,8 @@ const getItemTypeFromMessage = function(message) { return SHARED_ITEM.TYPES.LOCATION } else if (message.messageParameters.object.type === 'deck-card') { return SHARED_ITEM.TYPES.DECK_CARD + } else if (message.messageParameters.object.type === 'talk-poll') { + return SHARED_ITEM.TYPES.POLL } else { return SHARED_ITEM.TYPES.OTHER } diff --git a/tests/integration/features/chat/poll.feature b/tests/integration/features/chat/poll.feature index d7acc1692..ab77b2194 100644 --- a/tests/integration/features/chat/poll.feature +++ b/tests/integration/features/chat/poll.feature @@ -589,3 +589,56 @@ Feature: chat/poll | options | ["Empty question is not","allowed either"] | | resultMode | public | | maxVotes | unlimited | + + Scenario: Deleting a user neutralizes their details + Given user "participant1" creates room "room" (v4) + | roomType | 2 | + | roomName | room | + And user "participant1" adds user "participant2" to room "room" with 200 (v4) + And user "participant2" creates a poll in room "room" with 201 + | question | What is the question? | + | options | ["Where are you?","How much is the fish?"] | + | resultMode | public | + | maxVotes | unlimited | + And user "participant2" votes for options "[0]" on poll "What is the question?" in room "room" with 200 + | id | POLL_ID(What is the question?) | + | question | What is the question? | + | options | ["Where are you?","How much is the fish?"] | + | votes | {"option-0":1} | + | numVoters | 1 | + | resultMode | public | + | maxVotes | unlimited | + | actorType | users | + | actorId | participant2 | + | actorDisplayName | participant2-displayname | + | status | open | + | votedSelf | [0] | + And user "participant2" closes poll "What is the question?" in room "room" with 200 + | id | POLL_ID(What is the question?) | + | question | What is the question? | + | options | ["Where are you?","How much is the fish?"] | + | votes | {"option-0":1} | + | numVoters | 1 | + | resultMode | public | + | maxVotes | unlimited | + | actorType | users | + | actorId | participant2 | + | actorDisplayName | participant2-displayname | + | status | closed | + | votedSelf | [0] | + | details | [{"actorType":"users","actorId":"participant2","actorDisplayName":"participant2-displayname","optionId":0}] | + When user "participant2" is deleted + Then user "participant1" sees poll "What is the question?" in room "room" with 200 + | id | POLL_ID(What is the question?) | + | question | What is the question? | + | options | ["Where are you?","How much is the fish?"] | + | votes | {"option-0":1} | + | numVoters | 1 | + | resultMode | public | + | maxVotes | unlimited | + | actorType | deleted_users | + | actorId | deleted_users | + | actorDisplayName | | + | status | closed | + | votedSelf | [] | + | details | [{"actorType":"deleted_users","actorId":"deleted_users","actorDisplayName":"","optionId":0}] | diff --git a/tests/integration/features/reaction/react.feature b/tests/integration/features/reaction/react.feature index ebd6ef063..31fbca93a 100644 --- a/tests/integration/features/reaction/react.feature +++ b/tests/integration/features/reaction/react.feature @@ -164,3 +164,25 @@ Feature: reaction/react And user "participant1" sees the following messages in room "room" with 200 | room | actorType | actorId | actorDisplayName | message | messageParameters | reactions | | room | users | participant1 | participant1-displayname | Message deleted by you | {"actor":{"type":"user","id":"participant1","name":"participant1-displayname"}} | [] | + + Scenario: Deleting a user neutralizes their details + Given user "participant1" creates room "room" (v4) + | roomType | 3 | + | roomName | room | + And user "participant1" adds user "participant2" to room "room" with 200 (v4) + And user "participant1" sends message "Message 1" to room "room" with 201 + And user "participant2" react with "👍" on message "Message 1" to room "room" with 201 + | actorType | actorId | actorDisplayName | reaction | + | users | participant2 | participant2-displayname | 👍 | + And user "participant2" react with "👎" on message "Message 1" to room "room" with 201 + | actorType | actorId | actorDisplayName | reaction | + | users | participant2 | participant2-displayname | 👎 | + | users | participant2 | participant2-displayname | 👍 | + When user "participant2" is deleted + And user "participant1" retrieve reactions "👎" of message "Message 1" in room "room" with 200 + | actorType | actorId | actorDisplayName | reaction | + | deleted_users | deleted_users | | 👎 | + And user "participant1" retrieve reactions "all" of message "Message 1" in room "room" with 200 + | actorType | actorId | actorDisplayName | reaction | + | deleted_users | deleted_users | | 👎 | + | deleted_users | deleted_users | | 👍 | |