Compare commits

...

7 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé
6d05ac519a TEST - don't merge 2026-03-27 09:17:02 +01:00
damencho
e9daf4395e fix(prosody): Drops not needed config for jigasi-invite module. 2026-03-26 16:35:33 -05:00
damencho
2245e4e747 fix(prosody): Adds some nil checks. 2026-03-26 16:35:33 -05:00
damencho
43132a7eba chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/releases/tag/v2143.0.0+733e66c6
2026-03-26 14:37:40 -05:00
damencho
4f3dc195cf fix(recording): On missing session id, send stop. 2026-03-26 14:37:40 -05:00
damencho
a80a732ec4 fix(webpack-dev-server-proxy): Allow all hosts.
Avoids errors when accessed via a website (the test-lab).
2026-03-26 14:37:40 -05:00
Daniel Nylander
04757f103e lang: Complete Swedish (sv) translation
* l10n: Complete Swedish (sv) translation — add 26 missing strings

Add Swedish translations for 26 missing UI strings:
- File sharing labels (upload, delete notifications)
- Nickname dialog for chat/polls/file sharing features
- Login error messages
- Screen sharing system stop dialog
- Virtual background limit messages
- Toolbar labels (copilot, file sharing, polls)

This brings Swedish translation to 100% coverage (1492/1492 keys).

* l10n(sv): Fix lint + quality improvements

- Add trailing newline (fixes CI Lint check)
- Fix 33 strings: denna/detta/dessa → den här/det här/de här
- Remove 'vänligen' (overly formal)
- Fix English leftover in demoteParticipantDialog
- Fix permission error messages

* l10n(sv): Fix untranslated string (searchResultsTryAgain)

* Fix Swedish translation JSON formatting

- Properly sort and format translation keys per project standards
- Fixes CI lint failure in PR #17206

---------

Co-authored-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-26 09:25:40 -05:00
12 changed files with 95 additions and 72 deletions

View File

@@ -1,4 +1,4 @@
# <p align="center">Jitsi Meet</p>
# <p align="center">Jitsi Meet</p>
Jitsi Meet is a set of Open Source projects which empower users to use and deploy
video conferencing platforms with state-of-the-art video quality and features.

View File

@@ -114,6 +114,9 @@
"error": "Fel: ditt meddelande skickades inte. Orsak: {{error}}",
"everyone": "Alla",
"fieldPlaceHolder": "Skriv ditt meddelande här",
"fileAccessibleTitle": "{{user}} laddade upp en fil",
"fileAccessibleTitleMe": "jag laddade upp en fil",
"fileDeleted": "En fil raderades",
"guestsChatIndicator": "(gäst)",
"lobbyChatMessageTo": "Skicka meddelande",
"message": "Meddelande",
@@ -123,8 +126,16 @@
"messagebox": "Skriv ett meddelande",
"newMessages": "Nytt meddelande",
"nickname": {
"featureChat": "chatt",
"featureClosedCaptions": "textning",
"featureFileSharing": "fildelning",
"featurePolls": "omröstningar",
"popover": "Välj ett namn",
"title": "Skriv in ett namn för att börja använda chatten",
"titleWith1Features": "Ange ett smeknamn för att använda {{feature1}}",
"titleWith2Features": "Ange ett smeknamn för att använda {{feature1}} och {{feature2}}",
"titleWith3Features": "Ange ett smeknamn för att använda {{feature1}}, {{feature2}} och {{feature3}}",
"titleWith4Features": "Ange ett smeknamn för att använda {{feature1}}, {{feature2}}, {{feature3}} och {{feature4}}",
"titleWithCC": "Skriv in ett namn för att börja använda chatten och för undertexter",
"titleWithPolls": "Skriv in ett namn för att börja använda chatten och omröstningar",
"titleWithPollsAndCC": "Skriv in ett namn för att börja använda chatten, omröstningar och undertexter",
@@ -216,6 +227,9 @@
"video_ssrc": "Video SSRC:",
"yes": "Ja"
},
"customPanel": {
"close": "Stäng"
},
"dateUtils": {
"earlier": "Tidigare",
"today": "Idag",
@@ -230,10 +244,10 @@
"downloadMobileApp": "Ladda ner mobilappen",
"ifDoNotHaveApp": "Om du inte har appen än:",
"ifHaveApp": "Om du redan har appen:",
"joinInApp": "Delta i detta möte med din app",
"joinInApp": "Delta i det här mötet med din app",
"joinInAppNew": "Delta i appen",
"joinInBrowser": "Delta på webben",
"launchMeetingLabel": "Hur vill du delta i detta möte?",
"launchMeetingLabel": "Hur vill du delta i det här mötet?",
"launchWebButton": "Starta på webben",
"noDesktopApp": "",
"noMobileApp": "Har du inte appen?",
@@ -280,7 +294,7 @@
"Submit": "Skicka",
"Understand": "Jag förstår, låt min mikrofon vara avstängd tillsvidare",
"UnderstandAndUnmute": "Jag förstår, starta min mikrofon",
"WaitForHostNoAuthMsg": "Konferensen har ännu inte startat eftersom ingen värd har anlänt ännu. Vänligen vänta.",
"WaitForHostNoAuthMsg": "Konferensen har ännu inte startat eftersom ingen värd har anlänt ännu. Var god vänta.",
"WaitingForHostButton": "Vänta på värd",
"WaitingForHostTitle": "Väntar på värden…",
"Yes": "Ja",
@@ -330,7 +344,7 @@
"contactSupport": "Kontakta kundtjänst",
"copied": "Kopierad",
"copy": "Kopiera",
"demoteParticipantDialog": "Are you sure you want to move this participant to viewer? Är du säker på att du vill flytta denna deltagaren till tittare",
"demoteParticipantDialog": "Är du säker på att du vill flytta den här deltagaren till tittare?",
"demoteParticipantTitle": "Flytta till tittare",
"dismiss": "Förkasta",
"displayNameRequired": "Hej, vad heter du?",
@@ -344,18 +358,18 @@
"enterDisplayName": "Ange namn",
"error": "Fel",
"errorRoomCreationRestriction": "Du försökte gå med för snabbt, kom tillbaka om en stund.",
"gracefulShutdown": "Vår tjänst är för tillfället nedstängd för underhåll. Vänligen försök senare.",
"grantModeratorDialog": "Är du säker du vill göra denna deltagare till en moderator?",
"gracefulShutdown": "Vår tjänst är för tillfället nedstängd för underhåll. Försök senare.",
"grantModeratorDialog": "Är du säker på att du vill göra den här deltagaren till moderator?",
"grantModeratorTitle": "Godkänn moderator",
"hide": "Dölj",
"hideShareAudioHelper": "Visa inte denna dialog igen ",
"hideShareAudioHelper": "Visa inte den här dialogen igen ",
"incorrectPassword": "Fel användarnamn eller lösenord",
"incorrectRoomLockPassword": "Felaktigt lösenord",
"internalError": "Ett fel uppstod. Fel: {{error}}",
"internalErrorTitle": "Internt fel",
"kickMessage": "Du kan kontakta {{participantDisplayName}} för mer information.",
"kickParticipantButton": "Ta bort deltagaren från mötet",
"kickParticipantDialog": "Vill du ta bort denna deltagaren från mötet?",
"kickParticipantDialog": "Vill du ta bort den här deltagaren från mötet?",
"kickParticipantTitle": "Tysta deltagaren?",
"kickSystemTitle": "Du har blivit borttagen från mötet",
"kickTitle": "{{participantDisplayName}} tog bort dig från mötet",
@@ -369,6 +383,9 @@
"lockRoom": "Lägg till möte $t(lockRoomPasswordUppercase)",
"lockTitle": "Låsning misslyckades",
"login": "Logga in",
"loginFailed": "Inloggningen misslyckades.",
"loginOnResume": "Din autentiseringssession har gått ut. Du måste logga in igen för att fortsätta mötet.",
"loginPopupBlocked": "Inloggningsfönstret blockerades av din webbläsare.",
"loginQuestion": "Är du säker på att du vill logga in och lämna mötet",
"logoutQuestion": "Är du säker på att du vill logga ut och lämna konferensen?",
"logoutTitle": "Logga ut",
@@ -413,18 +430,18 @@
"muteParticipantsVideoBody": "Du kommer inte att kunna aktivera kameran igen. Däremot kan deltagaren kunna aktivera sin egen kamera när som.",
"muteParticipantsVideoBodyModerationOn": "Du och deltagarna kommer inte att kunna aktivera kameran igen.",
"muteParticipantsVideoButton": "Inaktivera kamera",
"muteParticipantsVideoDialog": "Är du säker du vill inaktivera denna deltagares kamera. Du kommer inte att kunna aktivera den igen. Däremot kan deltagaren kunna aktivera sin egen kamera när som.",
"muteParticipantsVideoDialog": "Är du säker du vill inaktivera den här deltagarens kamera. Du kommer inte att kunna aktivera den igen. Däremot kan deltagaren kunna aktivera sin egen kamera när som.",
"muteParticipantsVideoDialogModerationOn": "Är du säker på att du vill inaktivera den här deltagarens kamera? Du kommer inte att kunna aktivera kameran igen och inte de heller.",
"muteParticipantsVideoTitle": "Inaktivera denna deltagares kamera?",
"muteParticipantsVideoTitle": "Inaktivera den här deltagarens kamera?",
"noDropboxToken": "Ingen giltig dropbox tecken",
"password": "Lösenord",
"passwordLabel": "Mötet har låsts av en deltagare. Ange $t(lockRoomPassword) för att gå med.",
"passwordNotSupported": "Att sätta ett $t(lockRoomPassword) för mötesrummet stöds ej.",
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) stöds inte",
"passwordRequired": "$t(lockRoomPasswordUppercase) krävs",
"permissionCameraRequiredError": "Tillåtelse krävs för att delta med kamera i denna möte. Var god skaffa detta i \"inställningar\".",
"permissionCameraRequiredError": "Behörighet krävs för att delta med kamera i det här mötet. Ändra detta i \"Inställningar\".",
"permissionErrorTitle": "Tillåtelse krävs",
"permissionMicRequiredError": "Tillåtelse krävs för att delta med mikrofon i denna möte. Var god skaffa detta i \"inställningar\".",
"permissionMicRequiredError": "Behörighet krävs för att delta med mikrofon i det här mötet. Ändra detta i \"Inställningar\".",
"readMore": "Mer",
"recentlyUsedObjects": "Dina senaste använda objekt",
"recording": "Inspelning",
@@ -452,12 +469,14 @@
"screenSharingFailed": "Oops! Något gick fel, skärmdelning kunde ej startas.",
"screenSharingFailedTitle": "Skärmdelning misslyckades!",
"screenSharingPermissionDeniedError": "Något är fel med åtkomstinställningarna för skärmdelningen. Ladda om sidan och försök igen.",
"screenshareStoppedDiskSpace": "Det här händer om du använde macOS flytande verktygsfält för att stoppa skärmdelningen. Det har inte stöd för att starta den igen.",
"screenshareStoppedTitle": "Skärmdelningen stoppades via systemet",
"searchInSalesforce": "Sök i Salesforce",
"searchResults": "Sökresultat ({{count}})",
"searchResultsDetailsError": "Något gick fel när ägardata hämtades.",
"searchResultsError": "Något gick fel när data hämtades.",
"searchResultsNotFound": "Inga sökresultat hittades.",
"searchResultsTryAgain": "Try using alternative keywords.",
"searchResultsTryAgain": "Försök med andra sökord.",
"sendPrivateMessage": "Du har fått ett privat meddelande. Tänkte du svara på det privat, eller vill du skicka ditt meddelande till alla deltagare?",
"sendPrivateMessageCancel": "Skicka till alla deltagare",
"sendPrivateMessageOk": "Skicka privat",
@@ -520,7 +539,7 @@
"tokenAuthFailedWithReasons": "Förlåt, du har inte tillåtelse att gå med i det här samtalet. Troliga anledingar: {{reason}}",
"tokenAuthUnsupported": "Token URL är inte tillåten",
"transcribing": "Transkriberar",
"unauthenticatedAccessDisabled": "Detta samtalet kräver identifiering. Logga in för att fortsätta.",
"unauthenticatedAccessDisabled": "Det här samtalet kräver identifiering. Logga in för att fortsätta.",
"unlockRoom": "Ta bort möte $t(lockRoomPassword)",
"user": "Användare",
"userIdentifier": "Användar-ID",
@@ -543,7 +562,7 @@
"title": "Delade dokument"
},
"e2ee": {
"labelToolTip": "Ljud- och videokommunikation för detta samtal är krypterad från dator till dator"
"labelToolTip": "Ljud- och videokommunikation för det här samtalet är krypterad från dator till dator"
},
"embedMeeting": {
"title": "Bädda in möte"
@@ -576,6 +595,7 @@
"newFileNotification": "{{ participantName }} delade '{{ fileName }}'",
"removeFile": "Ta bort",
"removeFileSuccess": "Filen togs bort",
"uploadDisabled": "Inte tillåtet att ladda upp filer. Be en moderator om behörighet för den åtgärden.",
"uploadFailedDescription": "Snälla försök igen.",
"uploadFailedTitle": "Överföring misslyckades",
"uploadFile": "Dela fil"
@@ -603,7 +623,7 @@
"conferenceURL": "Länk:",
"copyNumber": "Kopiera nummer",
"country": "Land",
"dialANumber": "Om du vill gå med i mötet ringer du något av dessa nummer och fyller sedan i PIN-koden.",
"dialANumber": "Om du vill gå med i mötet ringer du något av de här numren och fyller sedan i PIN-koden.",
"dialInConferenceID": "PIN-kod:",
"dialInNotSupported": "Tyvärr stöds inte inringning just nu.",
"dialInNumber": "Inringning:",
@@ -635,14 +655,14 @@
"sipAudioOnly": "SIP endast ljud address",
"title": "Dela",
"tooltip": "Dela länk och information om inringning för mötet",
"upgradeOptions": "Vänligen kontrollera om uppgraderingsalternativen är på",
"upgradeOptions": "Kontrollera om uppgraderingsalternativen är på",
"whiteboardError": "Problem att ladda whiteboard, var god försök senare."
},
"inlineDialogFailure": {
"msg": "Vi slirade lite.",
"retry": "Försök igen",
"support": "Support",
"supportMsg": "Om detta fortsätter hända kontakta"
"supportMsg": "Om det här fortsätter att hända, kontakta"
},
"inviteDialog": {
"alertText": "Det gick inte att bjuda in alla deltagare.",
@@ -709,13 +729,14 @@
"streamIdHelp": "Vad är det här?",
"title": "Direktsändning",
"unavailableTitle": "Livesändning otillgänglig",
"youTubeGoLiveWarning": "Kom ihåg att klicka på \"Gå live\" i YouTube Studio om autostart/autostopp är inaktiverade.",
"youtubeTerms": "Tjänstevillkor för YouTube"
},
"lobby": {
"backToKnockModeButton": "Tillbaka till väntrum",
"chat": "Chatt",
"dialogTitle": "Väntrum",
"disableDialogContent": "Väntrumsläge är för närvarande aktiverat. Denna funktion säkerställer att oönskade deltagare inte kan gå med i ditt möte. Vill du inaktivera det?",
"disableDialogContent": "Väntrumsläge är för närvarande aktiverat. Den här funktionen säkerställer att oönskade deltagare inte kan gå med i ditt möte. Vill du inaktivera det?",
"disableDialogSubmit": "Inaktivera",
"emailField": "Skriv in din mailadress",
"enableDialogPasswordField": "Ange lösenord (valfritt)",
@@ -809,7 +830,7 @@
"desktopMutedRemotelyTitle": "Din skärmdelning har avslutats av {{participantDisplayName}}",
"disabledIframe": "Inbäddning är endast avsedd för demonstrationsändamål, så det här samtalet kommer att kopplas ner om {{timeout}} minuter.",
"disabledIframeSecondaryNative": "Inbäddning {{domain}} är endast avsedd för demonstrationsändamål, så det här samtalet kommer att kopplas ner om {{timeout}} minuter.",
"disabledIframeSecondaryWeb": "Bädda in {{domain}} är bara till för demo, så detta samtal kommer att kopplas bort inom {{timeout}} minuter. Var god använd <a href='{{jaasDomain}}' rel='nooper noreferrer' target='_blank'>Jitsi som tjänst</a> för att bädda in i produktion.",
"disabledIframeSecondaryWeb": "Bädda in {{domain}} är bara till för demo, så det här samtalet kommer att kopplas bort inom {{timeout}} minuter. Var god använd <a href='{{jaasDomain}}' rel='nooper noreferrer' target='_blank'>Jitsi som tjänst</a> för att bädda in i produktion.",
"disconnected": "frånkopplad",
"displayNotifications": "Visa aviseringar för",
"dontRemindMe": "Påminn mig inte",
@@ -832,7 +853,7 @@
"linkToSalesforce": "Länk till Salesforce",
"linkToSalesforceDescription": "Du kan länka mötessammanfattningen till ett Salesforce-objekt.",
"linkToSalesforceError": "Det gick inte att länka mötet till Salesforce",
"linkToSalesforceKey": "Länka detta möte",
"linkToSalesforceKey": "Länka det här mötet",
"linkToSalesforceProgress": "Länkar möte till Salesforce…",
"linkToSalesforceSuccess": "Mötet länkades till Salesforce",
"localRecordingStarted": "{{name}} har påbörjat en lokal inspelning.",
@@ -858,7 +879,7 @@
"newDeviceAudioTitle": "Ny ljudenhet hittad",
"newDeviceCameraTitle": "Ny kamera hittad",
"nextToSpeak": "Du är näst i kö för att prata",
"noiseSuppressionDesktopAudioDescription": "Brusreducering kan inte aktiveras när du delar skrivbordsljud, vänligen inaktivera det och försök igen.",
"noiseSuppressionDesktopAudioDescription": "Brusreducering kan inte aktiveras när du delar skrivbordsljud, inaktivera det och försök igen.",
"noiseSuppressionFailedTitle": "Det gick inte att starta brusreducering",
"noiseSuppressionStereoDescription": "Brusreducering i stereoljud stöds för närvarande inte.",
"oldElectronClientDescription1": "Den version av Jitsi meet som används är gammal och har säkerhetsluckor. Var god uppdatera till den senaste versionen.",
@@ -886,7 +907,7 @@
"suboptimalExperienceTitle": "Webbläsarvarning",
"suggestRecordingAction": "Starta",
"suggestRecordingDescription": "Vill du starta en inspelning?",
"suggestRecordingTitle": "Spela in detta mötet",
"suggestRecordingTitle": "Spela in det här mötett",
"unmute": "Slå på mikrofonen",
"unmuteScreen": "Starta skärmdelning",
"unmuteVideo": "Starta kamera",
@@ -981,7 +1002,7 @@
},
"notification": {
"description": "Öppna fliken omröstningar för att rösta",
"title": "En ny omröstning har blivit tillagd till detta möte"
"title": "En ny omröstning har blivit tillagd till det här mötet"
},
"results": {
"changeVote": "Ändra din röst",
@@ -1014,7 +1035,7 @@
"audioHighQuality": "Vi förväntar oss att ditt ljud har utmärkt kvalitet.",
"audioLowNoVideo": "Vi förväntar oss att din ljudkvalitet är låg och ingen video.",
"goodQuality": "Grymt bra! Din mediekvalitet kommer att bli bra.",
"noMediaConnectivity": "Vi kunde inte hitta ett sätt att upprätta mediaanslutning för detta test. Detta orsakas vanligtvis av en brandvägg eller NAT.",
"noMediaConnectivity": "Vi kunde inte upprätta mediaanslutning för det här testet. Det orsakas vanligtvis av en brandvägg eller NAT.",
"noVideo": "Vi förväntar oss att din video kommer ha låg kvalitet eller inte fungera.",
"testFailed": "Anslutningstestet stötte på oväntade problem, men det behöver inte påverka din upplevelse.",
"undetectable": "Om du fortfarande inte kan ringa i webbläsaren rekommenderar vi att du ser till att dina högtalare, mikrofon och kamera är korrekt inställda, att du har beviljat din webbläsare rättigheter att använda din mikrofon och kamera och att din webbläsarversion är uppdaterad.",
@@ -1028,7 +1049,7 @@
"dialInMeeting": "Ring in till mötet",
"dialInPin": "Ring in till mötet och ange PIN-kod:",
"dialing": "Ringer",
"doNotShow": "Visa inte denna ruta igen",
"doNotShow": "Visa inte den här rutan igen",
"errorDialOut": "Kunde inte ringa ut",
"errorDialOutDisconnected": "Kunde inte ringa ut. Kopplar ner",
"errorDialOutFailed": "Kunde inte ringa ut. Samtal misslyckades",
@@ -1082,7 +1103,7 @@
"raisedHandsLabel": "Antal uppräckta händer",
"record": {
"already": {
"linked": "Mötet är redan länkat till detta Salesforce-objekt."
"linked": "Mötet är redan länkat till det här Salesforce-objekt."
},
"type": {
"account": "Konto",
@@ -1121,7 +1142,7 @@
"localRecordingVideoWarning": "För att spela in din video måste du ha den på när du startar inspelningen",
"localRecordingWarning": "Se till att du väljer den aktuella fliken för att kunna använda rätt video och ljud.",
"loggedIn": "Inloggad som {{userName}}",
"noMicPermission": "Mikrofonspåret kunde inte skapas. Vänligen ge tillstånd att använda mikrofonen.",
"noMicPermission": "Mikrofonspåret kunde inte skapas. Ge tillstånd att använda mikrofonen.",
"noStreams": "Ingen ljud- eller videoström upptäcktes.",
"off": "Inspelningen avslutades",
"offBy": "{{name}} avslutade inspelningen",
@@ -1246,7 +1267,7 @@
"version": "Version"
},
"share": {
"dialInfoText": "\n\n=====\n\nVill du istället ringa in via telefon?\n\n{{defaultDialInNumber}} Klicka på den här länken för att se telefonnumret för detta möte\n{{dialInfoPageUrl}}",
"dialInfoText": "\n\n=====\n\nVill du istället ringa in via telefon?\n\n{{defaultDialInNumber}} Klicka på den här länken för att se telefonnumret för det här mötet\n{{dialInfoPageUrl}}",
"mainText": "Klicka på länken för att delta i mötet:\n{{roomUrl}}"
},
"speaker": "Talare",
@@ -1298,6 +1319,7 @@
"chat": "Öppna eller stäng chattfönster",
"clap": "Applådera",
"closeChat": "Stäng chatten",
"closeCustomPanel": "Stäng",
"closeMoreActions": "Stäng menyn för fler åtgärder",
"closeParticipantsPane": "Stäng deltagarfönstret",
"closedCaptions": "Undertexter",
@@ -1403,9 +1425,11 @@
"chat": "Öppna / stäng chatten",
"clap": "Klappa",
"closeChat": "Stäng chatt",
"closeCustomPanel": "Stäng",
"closeParticipantsPane": "Stäng deltagarrutan",
"closeReactionsMenu": "Stäng meny för reaktioner",
"closedCaptions": "Undertexter",
"copilot": "Copilot",
"disableNoiseSuppression": "Inaktivera brusreducering",
"disableReactionSounds": "Du kan inaktivera reaktionsljud för det här mötet",
"documentClose": "Stäng delat dokument",
@@ -1420,6 +1444,7 @@
"exitFullScreen": "Stäng fullskärm",
"exitTileView": "Stäng panelvy",
"feedback": "Lämna återkoppling",
"fileSharing": "Fildelning",
"giphy": "Växla GIPHY-menyn",
"hangup": "Lämna",
"help": "Hjälp",
@@ -1455,6 +1480,7 @@
"openReactionsMenu": "Öppna meny för reaktioner",
"participants": "Deltagare",
"pip": "Öppna bild-i-bild-läge",
"polls": "Omröstningar",
"privateMessage": "Skicka privat meddelande",
"profile": "Redigera din profil",
"raiseHand": "Räck upp / ta ner din hand",
@@ -1581,6 +1607,7 @@
"addBackground": "Lägg till bakgrund",
"apply": "Tillämpa",
"backgroundEffectError": "Det gick inte att tillämpa bakgrundseffekt.",
"backgroundLimitReached": "Gränsen för anpassade bakgrunder har nåtts",
"blur": "Oskärpa",
"deleteImage": "Ta bort bild",
"desktopShare": "Dela skrivbord",
@@ -1593,7 +1620,8 @@
"image6": "Skog",
"image7": "Soluppgång",
"none": "Ingen",
"pleaseWait": "Vänligen vänta…",
"oldestBackgroundRemoved": "Den äldsta anpassade bakgrunden har tagits bort för att lägga till den nya.",
"pleaseWait": "Var god vänta…",
"removeBackground": "Ta bort bakgrunden",
"slightBlur": "Lätt oskärpa",
"title": "Virtuella bakgrunder",
@@ -1665,7 +1693,7 @@
"recentListEmpty": "Inga tidigare möten. Chatta med ditt team och hitta alla tidigare möten där.",
"recentMeetings": "Dina senaste möten",
"reducedUIText": "Välkommen till {{app}}!",
"roomNameAllowedChars": "Mötesnamn kan inte innehålla dessa tecken: ?, &,:, ', \",%, #.",
"roomNameAllowedChars": "Mötesnamn kan inte innehålla de här tecknen: ?, &,:, ', \",%, #.",
"roomname": "Skriv in rumsnamn",
"roomnameHint": "Ange namnet eller URL:en till mötesrummet du vill ansluta till. Du kan hitta på ett nytt namn, berätta då för de andra du tänker möta så de anger samma namn.",
"sendFeedback": "Ge återkoppling",

View File

@@ -843,12 +843,8 @@ function initCommands() {
const activeSession = getActiveSession(state, mode);
if (activeSession && activeSession.id) {
APP.store.dispatch(toggleScreenshotCaptureSummary(false));
conference.stopRecording(activeSession.id);
} else {
logger.error('No recording or streaming session found');
}
APP.store.dispatch(toggleScreenshotCaptureSummary(false));
conference.stopRecording(activeSession?.id);
},
'initiate-private-chat': participantId => {
const state = APP.store.getState();

10
package-lock.json generated
View File

@@ -66,7 +66,7 @@
"js-md5": "0.6.1",
"js-sha512": "0.8.0",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2140.0.0+fe26afb0/lib-jitsi-meet.tgz",
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2143.0.0+733e66c6/lib-jitsi-meet.tgz",
"lodash-es": "4.17.23",
"null-loader": "4.0.1",
"optional-require": "1.0.3",
@@ -18593,8 +18593,8 @@
},
"node_modules/lib-jitsi-meet": {
"version": "0.0.0",
"resolved": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2140.0.0+fe26afb0/lib-jitsi-meet.tgz",
"integrity": "sha512-kB0VNqd+Ov0aXXY4JssH1A/sb/o5DhKUlfIwsqvqTqlXpX+UI2fmp3OQxB+3dka/SUXvyyeAbzvy7h0Ui5ADqw==",
"resolved": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2143.0.0+733e66c6/lib-jitsi-meet.tgz",
"integrity": "sha512-scK3ziZG0ceS6i2HzAc/SQWktL98TnfXsg7UmE+YueJpScxisE2ZRwLlAAWPidya4es3dbXixg+JdQEICEuZhQ==",
"license": "Apache-2.0",
"dependencies": {
"@jitsi/js-utils": "^2.6.7",
@@ -40145,8 +40145,8 @@
}
},
"lib-jitsi-meet": {
"version": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2140.0.0+fe26afb0/lib-jitsi-meet.tgz",
"integrity": "sha512-kB0VNqd+Ov0aXXY4JssH1A/sb/o5DhKUlfIwsqvqTqlXpX+UI2fmp3OQxB+3dka/SUXvyyeAbzvy7h0Ui5ADqw==",
"version": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2143.0.0+733e66c6/lib-jitsi-meet.tgz",
"integrity": "sha512-scK3ziZG0ceS6i2HzAc/SQWktL98TnfXsg7UmE+YueJpScxisE2ZRwLlAAWPidya4es3dbXixg+JdQEICEuZhQ==",
"requires": {
"@jitsi/js-utils": "^2.6.7",
"@jitsi/logger": "2.1.1",

View File

@@ -72,7 +72,7 @@
"js-md5": "0.6.1",
"js-sha512": "0.8.0",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2140.0.0+fe26afb0/lib-jitsi-meet.tgz",
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2143.0.0+733e66c6/lib-jitsi-meet.tgz",
"lodash-es": "4.17.23",
"null-loader": "4.0.1",
"optional-require": "1.0.3",

View File

@@ -614,13 +614,7 @@ function _registerForNativeEvents(store: IStore) {
const activeSession = getActiveSession(state, mode);
if (!activeSession?.id) {
logger.error('No recording or streaming session found');
return;
}
conference.stopRecording(activeSession.id);
conference.stopRecording(activeSession?.id);
});
eventEmitter.addListener(ExternalAPI.OVERWRITE_CONFIG, ({ config }: any) => {

View File

@@ -57,9 +57,7 @@ export default class AbstractStopLiveStreamDialog extends Component<IProps> {
const { _session } = this.props;
if (_session) {
this.props._conference?.stopRecording(_session.id);
}
this.props._conference?.stopRecording(_session?.id);
return true;
}

View File

@@ -102,8 +102,8 @@ export default class AbstractStopRecordingDialog<P extends IProps>
if (localRecordingVideoStop) {
dispatch(setVideoMuted(true));
}
} else if (_fileRecordingSession) {
_conference?.stopRecording(_fileRecordingSession.id);
} else {
_conference?.stopRecording(_fileRecordingSession?.id);
this._toggleScreenshotCapture();
}

View File

@@ -2,7 +2,7 @@
-- jwt is used to validate access
-- Copyright (C) 2023-present 8x8, Inc.
local jid_split = require "util.jid".split;
local jid = require "util.jid";
local hashes = require "util.hashes";
local random = require "util.random";
local st = require("util.stanza");
@@ -18,7 +18,6 @@ local muc_domain = module:get_option_string("muc_internal_domain_base", 'interna
local jigasi_brewery_room_jid = module:get_option_string("muc_jigasi_brewery_jid", 'jigasibrewery@' .. muc_domain);
local jigasi_bare_jid = module:get_option_string("muc_jigasi_jid", "jigasi@auth." .. muc_domain_base);
local focus_jid = module:get_option_string("muc_jicofo_brewery_jid", jigasi_brewery_room_jid .. "/focus");
local main_muc_service;
@@ -43,9 +42,9 @@ local function invite_jigasi(conference, phone_no)
--select least stressed Jigasi
local least_stressed_value = math.huge;
local least_stressed_jigasi_jid;
local least_stressed_jigasi_occupant;
for occupant_jid, occupant in jigasi_brewery_room:each_occupant() do
local _, _, resource = jid_split(occupant_jid);
local _, _, resource = jid.split(occupant_jid);
if resource ~= 'focus' then
local occ = occupant:get_presence();
local stats_child = occ:get_child("stats", "http://jitsi.org/protocol/colibri")
@@ -63,7 +62,7 @@ local function invite_jigasi(conference, phone_no)
local stress_level = tonumber(stats_tag.attr.value);
module:log("debug", "Stressed level %s %s ", stress_level, occupant_jid)
if stress_level < least_stressed_value then
least_stressed_jigasi_jid = occupant_jid
least_stressed_jigasi_occupant = occupant;
least_stressed_value = stress_level
end
end
@@ -71,18 +70,15 @@ local function invite_jigasi(conference, phone_no)
end
end
end
module:log("debug", "Least stressed jigasi selected jid %s value %s", least_stressed_jigasi_jid, least_stressed_value)
if not least_stressed_jigasi_jid then
module:log("debug", "Least stressed jigasi selected jid %s value %s", least_stressed_jigasi_occupant.jid, least_stressed_value)
if not least_stressed_jigasi_occupant then
module:log("error", "Cannot invite jigasi from room %s", jigasi_brewery_room.jid)
return 404, 'Jigasi not found'
end
-- invite Jigasi to join the conference
local _, _, jigasi_res = jid_split(least_stressed_jigasi_jid)
local jigasi_full_jid = jigasi_bare_jid .. "/" .. jigasi_res;
local stanza_id = hashes.sha256(random.bytes(8), true);
local invite_jigasi_stanza = st.iq({ xmlns = "jabber:client", type = "set", to = jigasi_full_jid, from = focus_jid, id = stanza_id })
local invite_jigasi_stanza = st.iq({ xmlns = "jabber:client", type = "set", to = least_stressed_jigasi_occupant.jid, from = focus_jid, id = stanza_id })
:tag("dial", { xmlns = "urn:xmpp:rayo:1", from = "fromnumber", to = phone_no })
:tag("header", { xmlns = "urn:xmpp:rayo:1", name = "JvbRoomName", value = conference })

View File

@@ -141,6 +141,11 @@ end
local main_room = get_room_by_name_and_subdomain(session.jitsi_web_query_room, session.jitsi_web_query_prefix);
local occupant_jid = stanza.attr.from;
if not main_room then
module:log('warn', 'No main room found for %s %s', session.jitsi_web_query_room, session.jitsi_web_query_prefix);
return;
end
occupant = main_room:get_occupant_by_real_jid(occupant_jid);
if main_room._data.breakout_rooms_active and not occupant then
@@ -148,10 +153,13 @@ end
-- not in main room, let's check breakout rooms
for breakout_room_jid, subject in pairs(main_room._data.breakout_rooms or {}) do
local breakout_room = get_room_from_jid(breakout_room_jid);
occupant = breakout_room:get_occupant_by_real_jid(occupant_jid);
if occupant then
room = breakout_room;
break;
if breakout_room then
occupant = breakout_room:get_occupant_by_real_jid(occupant_jid);
if occupant then
room = breakout_room;
break;
end
end
end
else

View File

@@ -279,7 +279,9 @@ function Util:process_and_verify_token(session)
-- We're fetching an public key from an ASAP server
local dotFirst = session.auth_token:find("%.");
if not dotFirst then return false, "not-allowed", "Invalid token" end
local header, err = json_safe.decode(basexx.from_url64(session.auth_token:sub(1,dotFirst-1)));
local headerPartEncoded = basexx.from_url64(session.auth_token:sub(1,dotFirst-1));
if not headerPartEncoded then return false, "not-allowed", "Invalid token" end
local header, err = json_safe.decode(headerPartEncoded);
if err then
return false, "not-allowed", "bad token format";
end

View File

@@ -257,6 +257,7 @@ function getDevServerConfig() {
warnings: false
}
},
allowedHosts: 'all',
host: 'localhost',
hot: true,
proxy: [