fix: lint padding/newline rules

Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
This commit is contained in:
Maksim Sukharev 2025-05-23 09:41:04 +02:00
parent 0cefd79e15
commit 5aa4668f98
121 changed files with 325 additions and 106 deletions

View file

@ -19,7 +19,6 @@ export default [
'@stylistic/array-bracket-spacing': 'off', // changes array formatting
'@stylistic/array-element-newline': 'off', // changes 132 files
'@stylistic/arrow-parens': 'off', // changes 132 files
'@stylistic/block-spacing': 'off',
'@stylistic/comma-dangle': 'off', // changes 125 files
'@stylistic/function-call-argument-newline': 'off', // changes 125 files
'@stylistic/function-paren-newline': 'off', // weird formatting
@ -29,8 +28,6 @@ export default [
'@stylistic/linebreak-style': 'off', // changes 25 files -> indent
'@stylistic/max-statements-per-line': 'off', // non-fixable
'@stylistic/member-delimiter-style': 'off', // removes commas from types
'@stylistic/no-multiple-empty-lines': 'off',
'@stylistic/padded-blocks': 'off',
'@stylistic/quote-props': 'off', // removes quotes from types
'@stylistic/semi': 'off', // changes e2ee files
'@typescript-eslint/no-unused-expressions': 'off', // non-fixable
@ -66,7 +63,6 @@ export default [
'vue/comma-dangle': 'off', // changes commas
'vue/first-attribute-linebreak': 'off', // changes all Vue files
'vue/multi-word-component-names': 'off', // non-fixable
'vue/new-line-between-multi-line-property': 'off',
'vue/no-boolean-default': 'off', // non-fixable
'vue/no-required-prop-with-default': 'off', // non-fixable
'vue/no-unused-properties': 'off', // non-fixable
@ -74,7 +70,6 @@ export default [
'vue/no-useless-mustaches': 'off', // changes template
'vue/object-curly-newline': 'off', // changes newlines
'vue/order-in-components': 'off', // moves code
'vue/padding-line-between-blocks': 'off',
'vue/quote-props': 'off', // changes template
},
},

View file

@ -124,6 +124,7 @@ export default {
mentionsDirect: 0,
})
},
getUserId() {
return this.$store.getters.getUserId()
},
@ -621,6 +622,7 @@ export default {
this.isRefreshingCurrentConversation = false
}
},
// Upon pressing Ctrl+F, focus SearchBox native input in the LeftSidebar
handleAppSearch() {
emit('toggle-navigation', {

View file

@ -32,6 +32,7 @@ export default {
render: (h) => h(LoadingComponent, { class: 'call-loading' }),
},
}),
TopBar: () => import(/* webpackChunkName: "files-sidebar-call-chunk" */'./components/TopBar/TopBar.vue'),
},

View file

@ -58,6 +58,7 @@ export default {
render: (h) => h(LoadingComponent, { class: 'tab-loading' }),
},
}),
NcButton,
},
@ -84,15 +85,19 @@ export default {
fileInfo() {
return this.Talk.fileInfo || {}
},
fileId() {
return this.fileInfo.id
},
token() {
return this.$store.getters.getToken()
},
fileIdForToken() {
return this.$store.getters.getFileIdForToken()
},
isChatTheActiveTab() {
// FIXME check for empty active tab is currently needed because the
// activeTab is not set when opening the sidebar from the "Details"

View file

@ -98,6 +98,7 @@ export default {
this.joinConversation()
}
},
conversation(conversation) {
if (!conversation) {
this.isWaitingToClose = true

View file

@ -116,9 +116,11 @@ export default {
isConversationsFilesChecked() {
return this.conversationsFiles
},
isConversationsFilesPublicSharesChecked() {
return this.conversationsFilesPublicShares
},
canEnableE2EECalls() {
return this.hasFeatureJoinFeatures || !this.hasSIPBridge
},
@ -167,6 +169,7 @@ export default {
},
})
},
saveConversationsFiles(checked) {
this.loadingConversationsFiles = true
this.conversationsFiles = checked
@ -187,6 +190,7 @@ export default {
},
})
},
saveConversationsFilesPublicShares(checked) {
this.loadingConversationsFiles = true
this.conversationsFilesPublicShares = checked
@ -200,6 +204,7 @@ export default {
},
}
</script>
<style scoped lang="scss">
h3 {

View file

@ -171,11 +171,13 @@ export default {
&& this.hostedHPBLanguage !== ''
&& this.hostedHPBCountry !== ''
},
disclaimerHint() {
return t('spreed', 'By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.')
.replace('{linkstart}', '<a target="_blank" rel="noreferrer nofollow" class="external" href="https://www.spreed.eu/nextcloud-talk-high-performance-backend/">')
.replace('{linkend}', ' ↗</a>')
},
translatedStatus() {
switch (this.trialAccount.status) {
case 'pending':
@ -192,9 +194,11 @@ export default {
return ''
},
expiryDate() {
return moment(this.trialAccount.expires).format('L')
},
createdDate() {
return moment(this.trialAccount.created).format('L')
},

View file

@ -78,17 +78,20 @@ export default {
isEnabled() {
return this.matterbridgeEnabled
},
installedVersion() {
return t('spreed', 'Installed version: {version}', {
version: this.matterbridgeVersion,
})
},
description() {
return t('spreed', 'You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.')
.replace('{linkstart1}', '<a target="_blank" rel="noreferrer nofollow" class="external" href="https://github.com/42wim/matterbridge/wiki">')
.replace('{linkstart2}', '<a target="_blank" rel="noreferrer nofollow" class="external" href="https://apps.nextcloud.com/apps/talk_matterbridge">')
.replace(/{linkend}/g, ' ↗</a>')
},
errorText() {
if (this.error === 'binary_permissions') {
return t('spreed', 'Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in "/…/nextcloud/apps/talk_matterbridge/bin/".')
@ -98,11 +101,13 @@ export default {
return ''
}
},
customBinaryText() {
return t('spreed', 'You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.')
.replace('{linkstart}', '<a target="_blank" rel="noreferrer nofollow" class="external" href="https://nextcloud-talk.readthedocs.io/en/latest/matterbridge/">')
.replace(/{linkend}/g, ' ↗</a>')
},
installButtonText() {
return this.isInstalling
? t('spreed', 'Downloading …')

View file

@ -84,16 +84,19 @@ export default {
default: '',
required: true,
},
verify: {
type: Boolean,
default: false,
required: true,
},
index: {
type: Number,
default: -1,
required: true,
},
loading: {
type: Boolean,
default: false,
@ -127,6 +130,7 @@ export default {
get() {
return this.server
},
set(value) {
this.$emit('update:server', value)
}
@ -152,6 +156,7 @@ export default {
removeServer() {
this.$emit('remove-server', this.index)
},
updateVerify(checked) {
this.$emit('update:verify', checked)
},

View file

@ -170,6 +170,7 @@ export default {
showUploadLimitWarning() {
return this.uploadLimit !== 0 && this.uploadLimit < 512 * (1024 ** 2)
},
uploadLimitWarning() {
return t('spreed', 'The PHP settings "upload_max_filesize" or "post_max_size" only will allow to upload files up to {maxUpload}.', {
maxUpload: formatFileSize(this.uploadLimit, true, true),

View file

@ -102,16 +102,19 @@ export default {
default: '',
required: true,
},
verify: {
type: Boolean,
default: false,
required: true,
},
index: {
type: Number,
default: -1,
required: true,
},
loading: {
type: Boolean,
default: false,
@ -150,6 +153,7 @@ export default {
get() {
return this.server
},
set(value) {
this.$emit('update:server', value)
}
@ -175,6 +179,7 @@ export default {
removeServer() {
this.$emit('remove-server', this.index)
},
updateVerify(checked) {
this.$emit('update:verify', checked)
},

View file

@ -61,11 +61,13 @@ export default {
default: '',
required: true,
},
index: {
type: Number,
default: -1,
required: true,
},
loading: {
type: Boolean,
default: false,
@ -79,6 +81,7 @@ export default {
get() {
return this.server
},
set(value) {
this.$emit('update:server', value)
}

View file

@ -107,7 +107,6 @@ export default {
const servers = []
this.servers.forEach((server) => {
if (server.startsWith('https://')) {
server = server.slice(8)
} else if (server.startsWith('http://')) {

View file

@ -112,26 +112,31 @@ export default {
default: '',
required: true,
},
server: {
type: String,
default: '',
required: true,
},
secret: {
type: String,
default: '',
required: true,
},
protocols: {
type: String,
default: '',
required: true,
},
index: {
type: Number,
default: -1,
required: true,
},
loading: {
type: Boolean,
default: false,
@ -154,34 +159,42 @@ export default {
get() {
return this.server
},
set(value) {
this.updateServer(value)
}
},
turnSchemes: {
get() {
return this.schemesOptions.find(i => i.value === this.schemes)
},
set(value) {
this.updateSchemes(value)
}
},
turnProtocols: {
get() {
return this.protocolOptions.find(i => i.value === this.protocols)
},
set(value) {
this.updateProtocols(value)
}
},
turnSecret: {
get() {
return this.secret
},
set(value) {
this.updateSecret(value)
},
},
turnServerError() {
if (this.schemes.includes('turns') && /^(?:\d{1,3}\.){3}\d{1,3}(?::\d{1,5})?$/.test(this.server.trim())) {
return t('spreed', '{schema} scheme must be used with a domain', { schema: 'turns:' })
@ -189,6 +202,7 @@ export default {
return false
},
protocolOptions() {
return [
{ value: 'udp,tcp', label: t('spreed', '{option1} and {option2}', { option1: 'UDP', option2: 'TCP' }) },
@ -196,6 +210,7 @@ export default {
{ value: 'tcp', label: t('spreed', '{option} only', { option: 'TCP' }) },
]
},
schemesOptions() {
return [
{ value: 'turn,turns', label: t('spreed', '{option1} and {option2}', { option1: 'turn:', option2: 'turns:' }) },
@ -203,6 +218,7 @@ export default {
{ value: 'turns', label: t('spreed', '{option} only', { option: 'turns:' }) },
]
},
testIconClasses() {
return {
'icon-category-monitoring': !this.testing && !this.testingError && !this.testingSuccess,
@ -211,6 +227,7 @@ export default {
'icon-checkmark': this.testingSuccess,
}
},
testResult() {
if (this.testingSuccess) {
return t('spreed', 'OK: Successful ICE candidates returned by the TURN server')
@ -221,6 +238,7 @@ export default {
}
return t('spreed', 'Test this server')
},
testAvailable() {
const schemes = this.schemes.split(',')
const protocols = this.protocols.split(',')
@ -275,6 +293,7 @@ export default {
iceServers: [
iceServer,
],
iceTransportPolicy: 'relay',
}
const offerOptions = {
@ -386,18 +405,22 @@ export default {
removeServer() {
this.$emit('remove-server', this.index)
},
updateSchemes(event) {
this.$emit('update:schemes', event.value)
this.debounceTestServer()
},
updateServer(value) {
this.$emit('update:server', value)
this.debounceTestServer()
},
updateSecret(value) {
this.$emit('update:secret', value)
this.debounceTestServer()
},
updateProtocols(event) {
this.$emit('update:protocols', event.value)
this.debounceTestServer()

View file

@ -144,7 +144,6 @@ export default {
},
toggleSave() {
this.saved = true
setTimeout(() => {
this.saved = false

View file

@ -140,6 +140,7 @@ export default {
virtualBackground: {
type: VIRTUAL_BACKGROUND.BACKGROUND_TYPE.BLUR,
},
simd: VirtualBackground.isWasmSimd(),
}

View file

@ -74,58 +74,72 @@ export default {
type: String,
default: null,
},
name: {
type: String,
required: true,
},
id: {
type: String,
default: null,
},
source: {
type: String,
default: null,
},
size: {
type: Number,
default: AVATAR.SIZE.DEFAULT,
},
condensed: {
type: Boolean,
default: false,
},
condensedOverlap: {
type: Number,
default: 2,
},
offline: {
type: Boolean,
default: false,
},
highlighted: {
type: Boolean,
default: false,
},
disableTooltip: {
type: Boolean,
default: false,
},
disableMenu: {
type: Boolean,
default: false,
},
showUserStatus: {
type: Boolean,
default: false,
},
showUserStatusCompact: {
type: Boolean,
default: false,
},
preloadedUserStatus: {
type: Object,
default: undefined,
},
menuContainer: {
type: String,
default: undefined,
@ -177,6 +191,7 @@ export default {
return 'icon-contacts'
}
},
avatarClass() {
return {
'avatar-wrapper--dark': this.isDarkTheme,
@ -185,27 +200,34 @@ export default {
'avatar-wrapper--highlighted': this.highlighted,
}
},
avatarStyle() {
return {
'--avatar-size': this.size + 'px',
'--condensed-overlap': this.condensedOverlap,
}
},
isFederatedUser() {
return this.source === ATTENDEE.ACTOR_TYPE.FEDERATED_USERS
},
isBot() {
return this.source === ATTENDEE.ACTOR_TYPE.BOTS && this.id !== ATTENDEE.CHANGELOG_BOT_ID && this.id !== ATTENDEE.SAMPLE_BOT_ID
},
isGuestUser() {
return [ATTENDEE.ACTOR_TYPE.GUESTS, ATTENDEE.ACTOR_TYPE.EMAILS].includes(this.source)
},
hasCustomName() {
return this.name?.trim() && this.name !== t('spreed', 'Guest')
},
firstLetterOfGuestName() {
return this.name?.trim()?.toUpperCase()?.charAt(0) ?? '?'
},
avatarUrl() {
return getUserProxyAvatarOcsUrl(this.token, this.id, this.isDarkTheme, this.size > AVATAR.SIZE.MEDIUM ? 512 : 64)
},

View file

@ -100,6 +100,7 @@ export default {
get() {
return this.checked
},
set(value) {
if (this.isLocked) {
return

View file

@ -186,11 +186,13 @@ export default {
type: String,
required: true,
},
// Determines whether this component is used in the sidebar
isSidebar: {
type: Boolean,
default: false,
},
// Determines whether this component is used in the recording view
isRecording: {
type: Boolean,
@ -238,6 +240,7 @@ export default {
localSharedData: {
screenVisible: true,
},
showPresenterOverlay: true,
debounceFetchPeers: () => {},
forcePromotedModel: null,
@ -370,7 +373,6 @@ export default {
return (this.showLocalScreen && this.hasLocalVideo)
|| ((this.showRemoteScreen || this.showSelectedScreen)
&& (this.shownRemoteScreenCallParticipantModel?.attributes.videoAvailable || this.isModelWithVideo(this.shownRemoteScreenCallParticipantModel)))
},
presenterModel() {
@ -444,7 +446,6 @@ export default {
screens() {
this._setScreenVisible()
},
callParticipantModelsWithScreen(newValue, previousValue) {
@ -456,6 +457,7 @@ export default {
this.callViewStore.stopPresentation(this.token)
}
},
showLocalScreen(showLocalScreen) {
// Everytime the local screen is shared, switch to promoted view
if (showLocalScreen) {
@ -465,6 +467,7 @@ export default {
this.callViewStore.stopPresentation(this.token)
}
},
hasLocalVideo(newValue) {
if (this.selectedVideoPeerId === 'local') {
if (!newValue) {
@ -732,6 +735,7 @@ export default {
clearLast: false,
})
},
handleClickLocalVideo() {
// DO nothing if no video
if (!this.hasLocalVideo || this.isSidebar) {

View file

@ -203,6 +203,7 @@ export default {
type: Boolean,
default: false,
},
/**
* To be set to true when the grid is in the promoted view.
*/
@ -210,38 +211,47 @@ export default {
type: Boolean,
default: false,
},
isSidebar: {
type: Boolean,
default: false,
},
isRecording: {
type: Boolean,
default: false,
},
callParticipantModels: {
type: Array,
required: true,
},
localMediaModel: {
type: Object,
required: true,
},
localCallParticipantModel: {
type: Object,
required: true,
},
token: {
type: String,
required: true,
},
sharedDatas: {
type: Object,
required: true,
},
isLocalVideoSelectable: {
type: Boolean,
default: false,
},
screens: {
type: Array,
default: () => [],
@ -319,9 +329,11 @@ export default {
return this.videos.length
},
videoWidth() {
return (this.gridWidth - GRID_GAP * (this.columns - 1)) / this.columns
},
videoHeight() {
return (this.gridHeight - GRID_GAP * (this.rows - 1)) / this.rows
},
@ -377,6 +389,7 @@ export default {
minWidth() {
return (this.isStripe || this.isSidebar) ? 200 : 320
},
/**
* Minimum height of the video components
*/
@ -557,6 +570,7 @@ export default {
get() {
return this.isStripe
},
set(value) {
this.callViewStore.setCallViewMode({ token: this.token, isGrid: !value, clearLast: false })
},
@ -827,6 +841,7 @@ export default {
this.currentPage++
console.debug('handleclicknext, ', 'currentPage ', this.currentPage, 'slots ', this.slot, 'videos.length ', this.videos.length)
},
handleClickPrevious() {
this.currentPage--
console.debug('handleclickprevious, ', 'currentPage ', this.currentPage, 'slots ', this.slots, 'videos.length ', this.videos.length)
@ -840,6 +855,7 @@ export default {
// TODO: debounce this
this.setTimerForUiControls()
},
setTimerForUiControls() {
if (this.showVideoOverlayTimer !== null) {
clearTimeout(this.showVideoOverlayTimer)

View file

@ -96,46 +96,57 @@ export default {
type: String,
required: true,
},
localMediaModel: {
type: Object,
required: true,
},
localCallParticipantModel: {
type: Object,
required: true,
},
isGrid: {
type: Boolean,
default: false,
},
isStripe: {
type: Boolean,
default: false,
},
fitVideo: {
type: Boolean,
default: false,
},
isSidebar: {
type: Boolean,
default: false,
},
showControls: {
type: Boolean,
default: true,
},
unSelectable: {
type: Boolean,
default: false,
},
isBig: {
type: Boolean,
default: false,
},
isSmall: {
type: Boolean,
default: false,
},
isPresenterOverlay: {
type: Boolean,
default: false,

View file

@ -52,18 +52,22 @@ export default {
type: String,
required: true,
},
localMediaModel: {
type: Object,
default: null,
},
callParticipantModel: {
type: Object,
default: null,
},
sharedData: {
type: Object,
required: true,
},
isBig: {
type: Boolean,
default: false,

View file

@ -18,6 +18,7 @@ export default {
type: String,
default: null,
},
user: {
type: String,
default: '',

View file

@ -130,44 +130,54 @@ export default {
type: String,
required: true,
},
isSidebar: {
type: Boolean,
default: false,
},
hasShadow: {
type: Boolean,
default: false,
},
isBig: {
type: Boolean,
default: false,
},
participantName: {
type: String,
default: '',
},
showVideoOverlay: {
type: Boolean,
default: true,
},
model: {
type: Object,
required: true,
},
sharedData: {
type: Object,
required: true,
},
// True if the bottom bar is used in the screen component
isScreen: {
type: Boolean,
default: false,
},
// The current promoted participant
isPromoted: {
type: Boolean,
default: false,
},
// Is the current selected participant
isSelected: {
type: Boolean,
@ -198,6 +208,7 @@ export default {
showRaiseHandIndicator() {
return !this.connectionStateFailedNoRestart && this.model.attributes.raisedHand.state
},
showStopFollowingButton() {
return this.isBig && this.callViewStore.selectedVideoPeerId !== null
},
@ -206,12 +217,15 @@ export default {
showAudioIndicator() {
return !this.connectionStateFailedNoRestart && !this.isAudioButtonHidden
},
isAudioButtonHidden() {
return this.model.attributes.audioAvailable && !this.canFullModerate
},
isAudioButtonDisabled() {
return !this.model.attributes.audioAvailable || !this.canFullModerate
},
audioButtonTitle() {
return this.model.attributes.audioAvailable
? t('spreed', 'Mute')
@ -222,12 +236,15 @@ export default {
showVideoIndicator() {
return !this.connectionStateFailedNoRestart && this.model.attributes.videoAvailable
},
isRemoteVideoEnabled() {
return this.sharedData.remoteVideoBlocker?.isVideoEnabled()
},
isRemoteVideoBlocked() {
return this.sharedData.remoteVideoBlocker && !this.sharedData.remoteVideoBlocker.isVideoEnabled()
},
videoButtonTitle() {
return this.isRemoteVideoEnabled
? t('spreed', 'Disable video')
@ -243,6 +260,7 @@ export default {
isCurrentlyActive() {
return this.isSelected || this.model.attributes.speaking
},
showParticipantName() {
return !this.model.attributes.videoAvailable || this.isRemoteVideoBlocked
|| this.showVideoOverlay || this.isPromoted || this.isCurrentlyActive
@ -255,6 +273,7 @@ export default {
? PARTICIPANT.TYPE.USER
: PARTICIPANT.TYPE.GUEST)
},
canFullModerate() {
return this.participantType === PARTICIPANT.TYPE.OWNER || this.participantType === PARTICIPANT.TYPE.MODERATOR
},

View file

@ -129,53 +129,65 @@ export default {
type: String,
required: true,
},
placeholderForPromoted: {
type: Boolean,
default: false,
},
model: {
type: Object,
required: true,
},
sharedData: {
type: Object,
required: true,
},
showVideoOverlay: {
type: Boolean,
default: true,
},
isGrid: {
type: Boolean,
default: false,
},
fitVideo: {
type: Boolean,
default: false,
},
isPresenterOverlay: {
type: Boolean,
default: false,
},
isBig: {
type: Boolean,
default: false,
},
// True if this video component is used in the promoted view's video stripe
isStripe: {
type: Boolean,
default: false,
},
// The current promoted participant
isPromoted: {
type: Boolean,
default: false,
},
// Is the current selected participant
isSelected: {
type: Boolean,
default: false,
},
// True when this component is used as main video in the sidebar
isSidebar: {
type: Boolean,
@ -500,7 +512,6 @@ export default {
} else {
return this.hasVideo
}
}
},
@ -516,7 +527,6 @@ export default {
} else {
return false
}
},
showBackgroundAndAvatar() {
@ -578,7 +588,6 @@ export default {
methods: {
t,
_setStream(stream) {
if (!stream) {
// Do not clear the srcObject of the video element, just leave
// the previous stream as a frozen image.

View file

@ -153,6 +153,7 @@ export default {
return t('spreed', 'Drop your files to upload')
}
},
isReadOnly() {
if (this.conversation) {
return this.conversation.readOnly === CONVERSATION.STATE.READ_ONLY

View file

@ -154,6 +154,7 @@ export default {
type: Object,
required: true,
},
/**
* Shows or hides the editing buttons.
*/
@ -161,6 +162,7 @@ export default {
type: Boolean,
default: false,
},
/**
* Force component to emit signals and be used from parent components
*/
@ -196,6 +198,7 @@ export default {
minContainerWidth: 300,
minContainerHeight: 300,
},
backgroundColor: '',
emojiAvatar: '',
}
@ -233,6 +236,7 @@ export default {
this.$emit('avatar-edited', value)
}
},
emojiAvatar(value) {
if (this.controlled) {
this.$emit('avatar-edited', !!value)

View file

@ -90,6 +90,7 @@ export default {
return option.id === this.conversation.messageExpiration
}) ?? this.expirationOptions.at(-1)
},
set(value) {
this.changeExpiration(value)
}

View file

@ -167,6 +167,7 @@ export default {
// millisecond based.
return this.conversation.lobbyTimer * 1000
},
set(value) {
this.saveLobbyTimer(value)
}

View file

@ -100,22 +100,27 @@ export default {
type: Number,
required: true,
},
part: {
type: Object,
required: true,
},
type: {
type: Object,
required: true,
},
container: {
type: String,
required: true,
},
editing: {
type: Boolean,
default: false,
},
editable: {
type: Boolean,
default: true,

View file

@ -180,6 +180,7 @@ export default {
clearInterval(this.stateLoop)
this.stateLoop = setInterval(() => this.getBridgeProcessState(token), 60000)
},
clickAddPart(event) {
const typeKey = event.type
const type = this.matterbridgeTypes[typeKey]
@ -192,26 +193,31 @@ export default {
}
this.parts.unshift(newPart)
},
onDelete(i) {
this.parts.splice(i, 1)
this.save()
},
onEditClicked(i) {
this.parts[i].editing = !this.parts[i].editing
if (!this.parts[i].editing) {
this.save()
}
},
onEnabled(checked) {
this.enabled = checked
this.save()
},
save() {
if (this.parts.length === 0) {
this.enabled = false
}
this.editBridge(this.token, this.enabled, this.parts)
},
async getBridge(token) {
this.loading = true
try {
@ -226,6 +232,7 @@ export default {
}
this.loading = false
},
async editBridge() {
this.loading = true
this.parts.forEach(part => {
@ -241,6 +248,7 @@ export default {
}
this.loading = false
},
async getBridgeProcessState(token) {
try {
const result = await getBridgeProcessState(token)
@ -250,6 +258,7 @@ export default {
console.error(exception)
}
},
showLogContent() {
this.getBridgeProcessState(this.token)
this.logModal = true

View file

@ -92,7 +92,6 @@ const eventDateLabel = computed(() => {
hour: 'numeric',
minute: 'numeric',
}).formatRange(startDate, endDate)
}
return time
@ -129,6 +128,7 @@ function handleJoin({ call = false } = {}) {
}
</script>
<template>
<div class="event-card"
:class="{
@ -204,6 +204,7 @@ function handleJoin({ call = false } = {}) {
</span>
</div>
</template>
<style scoped lang="scss">
.event-card {
position: relative;

View file

@ -26,6 +26,7 @@ export default {
type: String,
required: true,
},
description: {
type: String,
required: true,

View file

@ -337,6 +337,7 @@ export default {
type: Boolean,
default: false,
},
item: {
type: Object,
default() {

View file

@ -437,7 +437,6 @@ describe('LeftSidebar.vue', () => {
itemsListNames.forEach((name, index) => {
expect(itemsList.at(index).text()).toStrictEqual(name)
})
})
test('does not show circles results when circles are disabled', async () => {
@ -599,7 +598,6 @@ describe('LeftSidebar.vue', () => {
const wrapper = mountComponent()
const newConversationbutton = findNcActionButton(wrapper, 'Create a new conversation')
expect(newConversationbutton.exists()).toBeTruthy()
})
test('does not show new conversation button if user cannot start conversations', () => {
loadStateSettings.start_conversations = false

View file

@ -517,6 +517,7 @@ export default {
this.isNavigating = true
}
},
isCompact(value) {
if (!value) {
// Last messages are likely missing from the store, need to fetch with modifiedSince=0

View file

@ -6,6 +6,7 @@
<template>
<div class="icon-loading spinner" />
</template>
<script>
export default {

View file

@ -210,7 +210,6 @@ export default {
},
async handleFileInput(event) {
// Make file path
const file = event.target.files[0]
@ -240,7 +239,6 @@ export default {
})
this.handleSelectBackground(previewURL)
} catch (error) {
console.debug(error)
showError(t('spreed', 'Error while uploading the file'))

View file

@ -565,7 +565,6 @@ describe('Message.vue', () => {
})
describe('actions', () => {
beforeEach(() => {
store = new Store(testStoreConfig)
})

View file

@ -156,6 +156,7 @@ export default {
type: Object,
required: true,
},
/**
* Specifies if the message is a combined system message.
*/
@ -163,6 +164,7 @@ export default {
type: Boolean,
default: false,
},
/**
* Specifies whether the combined system message is collapsed.
*/
@ -170,6 +172,7 @@ export default {
type: Boolean,
default: undefined,
},
/**
* Specifies if the message is inside a collapsed group.
*/
@ -177,14 +180,17 @@ export default {
type: Boolean,
default: false,
},
lastCollapsedMessageId: {
type: [String, Number],
default: 0,
},
previousMessageId: {
type: [String, Number],
default: 0,
},
nextMessageId: {
type: [String, Number],
default: 0,
@ -449,6 +455,7 @@ export default {
toggleCombinedSystemMessage() {
this.$emit('toggle-combined-system-message')
},
toggleFollowUpEmojiPicker() {
this.isFollowUpEmojiPickerOpen = !this.isFollowUpEmojiPickerOpen
},

View file

@ -372,14 +372,17 @@ export default {
type: Boolean,
required: true,
},
isEmojiPickerOpen: {
type: Boolean,
required: true,
},
isReactionsMenuOpen: {
type: Boolean,
required: true,
},
isForwarderOpen: {
type: Boolean,
required: true,
@ -508,6 +511,7 @@ export default {
get() {
return new Date(this.customReminderTimestamp)
},
set(value) {
if (value !== null) {
this.customReminderTimestamp = value.valueOf()

View file

@ -71,6 +71,7 @@ export default {
type: String,
required: true,
},
id: {
type: [String, Number],
required: true,

View file

@ -98,6 +98,7 @@ export default {
type: String,
required: true,
},
richParameters: {
type: Object,
required: true,
@ -181,6 +182,7 @@ export default {
selectedTo() {
this.translatedMessage = ''
},
selectedFrom() {
this.translatedMessage = ''
},

View file

@ -36,6 +36,7 @@ export default {
type: String,
default: '',
},
/**
* Link share root, includes the file name.
*/
@ -43,6 +44,7 @@ export default {
type: String,
default: '',
},
/**
* File path relative to the user's home storage, used for previewing
* the audio before upload
@ -51,6 +53,7 @@ export default {
type: String,
default: '',
},
/**
* Message ID.
*/
@ -58,6 +61,7 @@ export default {
type: Number,
default: 0,
},
nextMessageId: {
type: Number,
default: 0,

View file

@ -60,15 +60,18 @@ export default {
contactHasPhoto() {
return this.contactPhotoMimetype && this.contactPhoto
},
contactPhotoFromBase64() {
if (!this.contactHasPhoto) {
return OC.MimeType.getIconUrl('text/vcard')
}
return 'data:' + this.contactPhotoMimetype + ';base64,' + this.contactPhoto
},
displayName() {
return this.contactName || this.name
},
contactAriaLabel() {
return t('spreed', 'Contact')
},

View file

@ -34,22 +34,27 @@ export default {
type: String,
required: true,
},
id: {
type: String,
required: true,
},
name: {
type: String,
required: true,
},
boardname: {
type: String,
required: true,
},
stackname: {
type: String,
required: true,
},
link: {
type: String,
required: true,
@ -68,6 +73,7 @@ export default {
board: this.boardname,
})
},
deckCardAriaLabel() {
return t('spreed', 'Deck Card')
},

View file

@ -22,14 +22,17 @@ export default {
type: String,
required: true,
},
id: {
type: String,
required: true,
},
name: {
type: String,
required: true,
},
link: {
type: String,
default: '',

View file

@ -515,7 +515,6 @@ export default {
this.openViewer(this.internalAbsolutePath, list, this.file, loadMore)
} else {
this.openViewer(this.internalAbsolutePath, [this.file], this.file)
}
},
},

View file

@ -34,18 +34,22 @@ export default {
type: String,
required: true,
},
type: {
type: String,
required: true,
},
id: {
type: String,
required: true,
},
name: {
type: String,
required: true,
},
server: {
type: String,
default: '',
@ -70,18 +74,23 @@ export default {
isMentionToAll() {
return this.type === MENTION.TYPE.CALL
},
isGroupMention() {
return [MENTION.TYPE.USERGROUP, MENTION.TYPE.GROUP].includes(this.type)
},
isTeamMention() {
return [MENTION.TYPE.CIRCLE, MENTION.TYPE.TEAM].includes(this.type)
},
isMentionToGuest() {
return this.type === MENTION.TYPE.GUEST || this.type === MENTION.TYPE.EMAIL
},
isRemoteUser() {
return [MENTION.TYPE.USER, MENTION.TYPE.FEDERATED_USER].includes(this.type) && this.server !== ''
},
isCurrentGuest() {
// On mention bubbles the id is actually "guest/ACTOR_ID" for guests
// This is to make sure guests can never collide with users,
@ -93,6 +102,7 @@ export default {
&& (this.id === ('guest/' + this.$store.getters.getActorId())
|| this.id === this.$store.getters.getActorId())
},
isCurrentUser() {
if (this.isRemoteUser) {
// For now, we don't highlight remote users even if they are the one
@ -102,12 +112,15 @@ export default {
return this.$store.getters.isActorUser()
&& this.id === this.$store.getters.getUserId()
},
isCurrentUserGroup() {
return this.isGroupMention && this.$store.getters.isActorMemberOfGroup(this.id)
},
isCurrentUserTeam() {
return this.isTeamMention && this.$store.getters.isActorMemberOfTeam(this.id)
},
primary() {
return this.isMentionToAll
|| this.isCurrentUser
@ -115,6 +128,7 @@ export default {
|| this.isCurrentUserTeam
|| (this.isMentionToGuest && this.isCurrentGuest)
},
avatarUrl() {
if (this.isRemoteUser) {
return this.token

View file

@ -196,14 +196,17 @@ export default {
type: Object,
required: true,
},
richParameters: {
type: Object,
required: true,
},
isDeleting: {
type: Boolean,
default: false,
},
hasCall: {
type: Boolean,
default: false,

View file

@ -51,7 +51,6 @@ describe('Reactions.vue', () => {
let message
beforeEach(() => {
setActivePinia(createPinia())
reactionsStore = useReactionsStore()
localVue = createLocalVue()
@ -110,7 +109,6 @@ describe('Reactions.vue', () => {
canReact: true,
id: messageId,
}
})
afterEach(() => {
@ -139,7 +137,6 @@ describe('Reactions.vue', () => {
// Assert dropdown contains "You" when you have reacted
const summary = wrapper.vm.getReactionSummary('🔥')
expect(summary).toContain('You')
})
test('shows reaction buttons with count but without emoji picker when no react permission', () => {
@ -280,7 +277,6 @@ describe('Reactions.vue', () => {
selectedEmoji: '🔥',
})
})
})
describe('reactions fetching', () => {
test('fetches reactions details when they are not available', async () => {
@ -311,6 +307,5 @@ describe('Reactions.vue', () => {
// Assert
expect(reactionsStore.fetchReactions).toHaveBeenCalled()
})
})
})

View file

@ -112,6 +112,7 @@ export default {
type: String,
required: true,
},
/**
* Whether the current user can react to the message.
*/
@ -119,6 +120,7 @@ export default {
type: Boolean,
default: false,
},
/**
* The message id.
*/
@ -277,6 +279,7 @@ export default {
}
}
</script>
<style lang="scss" scoped>
.reactions-wrapper {
--minimal-button-width: 48px;

View file

@ -163,6 +163,7 @@ export default {
},
}
</script>
<style lang="scss" scoped>
.reactions__modal {
min-height: 450px;

View file

@ -57,6 +57,7 @@ export default {
type: String,
required: true,
},
/**
* The messages object.
*/

View file

@ -260,9 +260,7 @@ describe('MessagesSystemGroup.vue', () => {
previousMessageId: 90,
nextMessageId: 200,
})
})
})
describe('renders grouped system message of user actions', () => {
@ -474,5 +472,4 @@ describe('MessagesSystemGroup.vue', () => {
testGroupedSystemMessages(wrapper, '{actor} demoted {user0} and {user1} from moderators')
})
})
})

View file

@ -54,6 +54,7 @@ export default {
type: String,
required: true,
},
/**
* The messages object.
*/

View file

@ -268,6 +268,7 @@ export default {
this.onWindowFocus()
}
},
chatIdentifier: {
immediate: true,
handler(newValue, oldValue) {
@ -307,7 +308,6 @@ export default {
this.updateTasksCount()
}
})
},
},
@ -596,7 +596,6 @@ export default {
} else {
return moment(startOfDay).format('LL')
}
},
/**
@ -700,7 +699,6 @@ export default {
// Once the history is received, starts looking for new messages.
await this.pollNewMessages(token)
} else {
this.$store.dispatch('cancelPollNewMessages', { requestId: this.chatIdentifier })
}
@ -1195,6 +1193,7 @@ export default {
}
return '0'
},
/**
* gets the first message's id.
*
@ -1218,7 +1217,6 @@ export default {
if (from.name === 'conversation' && to.name === 'conversation'
&& from.params.token === to.params.token
&& from.hash !== to.hash) {
// the hash changed, need to focus/highlight another message
if (to.hash && to.hash.startsWith('#message_')) {
const focusedId = this.getMessageIdFromHash(to.hash)

View file

@ -164,11 +164,13 @@ export default {
isSearching() {
return this.searchText !== ''
},
textFieldLabel() {
return this.canModerateSipDialOut
? t('spreed', 'Search participants or phone numbers')
: t('spreed', 'Search participants')
},
cancelSearchLabel() {
return t('spreed', 'Cancel search')
},

View file

@ -263,6 +263,7 @@ export default {
this.showModal()
},
/**
* Reinitialise the component to it's initial state. This is necessary
* because once the component is mounted its data would persist even if

View file

@ -98,10 +98,12 @@ export default {
type: Object,
required: true,
},
password: {
type: String,
required: true,
},
listable: {
type: Number,
required: true,
@ -122,6 +124,7 @@ export default {
get() {
return this.newConversation.displayName
},
set(displayName) {
this.updateNewConversation({ displayName })
},
@ -131,6 +134,7 @@ export default {
get() {
return this.newConversation.description
},
set(description) {
this.updateNewConversation({ description })
},
@ -154,6 +158,7 @@ export default {
get() {
return this.newConversation.type === CONVERSATION.TYPE.PUBLIC
},
async set(value) {
if (value) {
this.updateNewConversation({ type: CONVERSATION.TYPE.PUBLIC, hasPassword: this.forcePasswordProtection ?? false })
@ -171,6 +176,7 @@ export default {
get() {
return this.newConversation.hasPassword
},
set(value) {
this.updateNewConversation({ hasPassword: value })
if (!value) {
@ -183,6 +189,7 @@ export default {
get() {
return this.password
},
set(value) {
this.$emit('update:password', value)
},
@ -192,6 +199,7 @@ export default {
get() {
return this.listable
},
set(value) {
this.$emit('update:listable', value)
},

View file

@ -156,6 +156,7 @@ export default {
this.newFileTitle = value.label + value.extension
},
},
selectedTemplate: {
deep: true,
handler(value) {

View file

@ -65,30 +65,37 @@ export default {
type: String,
required: true,
},
checked: {
type: Boolean,
default: false,
},
fileid: {
type: [String, Number],
required: true,
},
filename: {
type: String,
required: true,
},
previewUrl: {
type: String,
default: null,
},
hasPreview: {
type: Boolean,
default: true,
},
mime: {
type: String,
required: true,
},
ratio: {
type: Number,
default: null,
@ -142,6 +149,7 @@ export default {
onCheck() {
this.$emit('check', this.fileid)
},
onFailure() {
this.failedPreview = true
},

View file

@ -220,6 +220,7 @@ export default {
}
}
},
/**
* Clicks the hidden file input when clicking the correspondent NcActionButton,
* thus opening the file-picker

View file

@ -232,6 +232,7 @@ export default {
get() {
return this.voteToSubmit
},
set(value) {
this.voteToSubmit = Array.isArray(value) ? value : [value]
},

View file

@ -92,11 +92,13 @@ export default {
type: Object,
required: true,
},
// Whether to show remove / cancel action
canCancel: {
type: Boolean,
default: false,
},
// Whether to show edit actions
editMessage: {
type: Boolean,

View file

@ -940,6 +940,7 @@ export default {
this.disabled = false
}
},
async holdPhoneNumber() {
try {
await callSIPHoldPhone(this.sessionIds[0])
@ -951,6 +952,7 @@ export default {
showError(t('spreed', 'Phone number could not be put on hold'))
}
},
async mutePhoneNumber() {
try {
await callSIPMutePhone(this.sessionIds[0])
@ -962,6 +964,7 @@ export default {
showError(t('spreed', 'Phone number could not be muted'))
}
},
async unmutePhoneNumber() {
try {
await callSIPUnmutePhone(this.sessionIds[0])
@ -973,6 +976,7 @@ export default {
showError(t('spreed', 'Phone number could not be unmuted'))
}
},
async dialType(value) {
try {
await callSIPSendDTMF(this.sessionIds[0], value)

View file

@ -50,7 +50,6 @@ describe('ParticipantPermissionsEditor.vue', () => {
// Add a mock function for the action and see if its called and with which arguments
testStoreConfig.modules.participantsStore.actions.setPermissions = jest.fn()
store = new Vuex.Store(testStoreConfig)
})
afterEach(() => {
@ -117,7 +116,6 @@ describe('ParticipantPermissionsEditor.vue', () => {
})
describe('Dispatches the action to set the right permissions', () => {
test('Dispatches setPermissions with the correct permissions value when a permission is added', async () => {
const wrapper = await mountParticipantPermissionsEditor(participant)

View file

@ -41,10 +41,12 @@ export default {
type: Array,
required: true,
},
loading: {
type: Boolean,
default: false,
},
isSearchResult: {
type: Boolean,
default: false,

View file

@ -119,10 +119,12 @@ export default {
type: Array,
required: true,
},
contactsLoading: {
type: Boolean,
required: true,
},
/**
* Token of current conversation (if provided).
*/
@ -130,6 +132,7 @@ export default {
type: String,
default: '',
},
/**
* Display no-results state instead of list.
*/
@ -137,6 +140,7 @@ export default {
type: Boolean,
default: false,
},
/**
* Display only results from internal users.
*/
@ -144,6 +148,7 @@ export default {
type: Boolean,
default: false,
},
/**
* Display loading state instead of list.
*/
@ -151,14 +156,17 @@ export default {
type: Boolean,
default: false,
},
scrollable: {
type: Boolean,
default: false,
},
showSearchHints: {
type: Boolean,
default: false,
},
searchText: {
type: String,
default: '',
@ -225,15 +233,19 @@ export default {
return this.searchResults.filter(item => item.source === ATTENDEE.ACTOR_TYPE.USERS)
.filter(user => !this.participants.some(participant => user.id === participant.userId))
},
addableGroups() {
return this.searchResults.filter((item) => item.source === ATTENDEE.ACTOR_TYPE.GROUPS)
},
addableEmails() {
return this.searchResults.filter((item) => item.source === ATTENDEE.ACTOR_TYPE.EMAILS)
},
addableCircles() {
return this.searchResults.filter((item) => item.source === ATTENDEE.ACTOR_TYPE.CIRCLES)
},
addableRemotes() {
return this.searchResults.filter((item) => item.source === ATTENDEE.ACTOR_TYPE.REMOTES)
.map((item) => {
@ -254,6 +266,7 @@ export default {
return !this.contactsLoading && this.searchText === ''
},
},
methods: {
t,
handleClickParticipant(participant) {

View file

@ -124,10 +124,12 @@ export default {
type: Boolean,
required: true,
},
canSearch: {
type: Boolean,
required: true,
},
canAdd: {
type: Boolean,
required: true,
@ -205,21 +207,27 @@ export default {
show() {
return this.sidebarStore.show
},
opened() {
return !!this.token && this.show
},
token() {
return this.$store.getters.getToken()
},
conversation() {
return this.$store.getters.conversation(this.token) || this.$store.getters.dummyConversation
},
isOneToOneConversation() {
return [CONVERSATION.TYPE.ONE_TO_ONE, CONVERSATION.TYPE.ONE_TO_ONE_FORMER].includes(this.conversation.type)
},
userId() {
return this.$store.getters.getUserId()
},
canAddPhones() {
const canModerateSipDialOut = hasTalkFeature(this.token, 'sip-support-dialout')
&& getTalkConfig(this.token, 'call', 'sip-enabled')
@ -227,9 +235,11 @@ export default {
&& getTalkConfig(this.token, 'call', 'can-enable-sip')
return canModerateSipDialOut && this.conversation.canEnableSIP
},
isSearching() {
return this.searchText !== ''
},
noResults() {
return this.searchResults.length === 0
},

View file

@ -254,12 +254,15 @@ export default {
isSidebarAvailable() {
return this.token && !this.isInLobby
},
show() {
return this.sidebarStore.show
},
opened() {
return this.isSidebarAvailable && this.show
},
token() {
return this.$store.getters.getToken()
},
@ -358,6 +361,7 @@ export default {
unreadMessagesCounter() {
return this.conversation.unreadMessages
},
hasUnreadMentions() {
return this.conversation.unreadMention
},
@ -453,6 +457,7 @@ export default {
// FIXME collapse for group conversations until we show anything useful there
this.contentModeIndex = this.isOneToOne ? 1 : 0
},
immediate: true,
},

View file

@ -96,21 +96,27 @@ export default {
itemsToDisplay() {
return Object.values(this.items).reverse().slice(0, this.limit)
},
isLocation() {
return this.type === SHARED_ITEM.TYPES.LOCATION
},
isDeckCard() {
return this.type === SHARED_ITEM.TYPES.DECK_CARD
},
isPoll() {
return this.type === SHARED_ITEM.TYPES.POLL
},
isOther() {
return this.type === SHARED_ITEM.TYPES.OTHER
},
isMedia() {
return this.type === SHARED_ITEM.TYPES.MEDIA
},
hasListLayout() {
return !this.isMedia && (this.tabView || (!this.isLocation && !this.isDeckCard && !this.isPoll))
},

View file

@ -78,14 +78,17 @@ export default {
actorDisplayName() {
return this.$store.getters.getDisplayName() || t('spreed', 'Guest')
},
displayNameLabel() {
return t('spreed', 'Display name: {name}', {
name: `<strong>${escapeHtml(this.actorDisplayName)}</strong>`,
}, undefined, { escape: false })
},
actorId() {
return this.$store.getters.getActorId()
},
token() {
return this.$store.getters.getToken()
},
@ -99,6 +102,7 @@ export default {
this.delayHandleUserNameFromBrowserStorage = false
}
},
// Update the input field text
actorDisplayName(newName) {
this.guestUserName = newName

View file

@ -213,16 +213,20 @@ export default {
token() {
return this.$store.getters.getToken()
},
isNextcloudTalkHashDirty() {
return this.talkHashStore.isNextcloudTalkHashDirty
|| this.talkHashStore.isNextcloudTalkProxyHashDirty[this.token]
},
conversation() {
return this.$store.getters.conversation(this.token) || this.$store.getters.dummyConversation
},
showButtonText() {
return !this.hideText && (!this.isMobile || !this.shrinkOnMobile)
},
showRecordingWarning() {
return [CALL.RECORDING.VIDEO_STARTING, CALL.RECORDING.AUDIO_STARTING,
CALL.RECORDING.VIDEO, CALL.RECORDING.AUDIO].includes(this.conversation.callRecording)

View file

@ -201,7 +201,6 @@ export default {
},
showCallDurationHint() {
this.showPopover = true
this.isCallDurationHintShown = true

View file

@ -157,14 +157,17 @@ export default {
type: String,
required: true,
},
model: {
type: Object,
required: true,
},
localCallParticipantModel: {
type: Object,
required: true,
},
isSidebar: {
type: Boolean,
default: false,

View file

@ -33,6 +33,7 @@ export default {
return ['conversations', 'messages', 'participants', 'event-cards'].includes(value)
},
},
count: {
type: Number,
default: 5,

View file

@ -36,6 +36,7 @@ export default {
IconMagnify,
NcTextField,
},
props: {
/**
* The placeholder for the input field
@ -44,6 +45,7 @@ export default {
type: String,
default: t('spreed', 'Search …'),
},
/**
* The value of the input field.
*/
@ -51,6 +53,7 @@ export default {
type: String,
required: true,
},
/**
* If true, this component displays an 'x' button to abort the search
*/
@ -58,6 +61,7 @@ export default {
type: Boolean,
required: true,
},
/**
* Conversations list reference for handling click trigger
*/
@ -84,6 +88,7 @@ export default {
get() {
return this.value
},
set(value) {
this.updateValue(value)
}

View file

@ -153,7 +153,6 @@ describe('message actions', () => {
// Assert
expect(result.isCurrentUserOwnMessage.value).toBe(false)
expect(result.isDeleteable.value).toBe(false)
})
test('can edit own message', () => {
@ -420,5 +419,4 @@ describe('message actions', () => {
expect(result.lastEditor.value).toBe('(edited by you)')
})
})
})

View file

@ -245,7 +245,6 @@ export function useCombinedSystemMessage() {
}
}
}
}
// Handle cases when actor promoted several users to moderators

View file

@ -21,7 +21,6 @@ const experimentalUpdateParticipants = (getTalkConfig('local', 'experiments', 'e
* @param {boolean} isTopBar whether the component is the top bar
*/
export function useGetParticipants(isActive = ref(true), isTopBar = true) {
// Encapsulation
const sessionStore = useSessionStore()
const store = useStore()

View file

@ -667,7 +667,6 @@ const actions = {
} else {
showSuccess(t('spreed', 'Conversation password has been removed'))
}
} catch (error) {
console.error('Error while setting a password for conversation: ', error)
if (error?.response?.data?.ocs?.data?.message) {
@ -675,7 +674,6 @@ const actions = {
} else {
showError(t('spreed', 'Error occurred while saving conversation password'))
}
}
},

View file

@ -1399,7 +1399,6 @@ const actions = {
}
return await postNewMessage(message, { silent: false })
},
async removeExpiredMessages(context, { token }) {

View file

@ -924,7 +924,6 @@ describe('messagesStore', () => {
[false, CHAT.FETCH_NEW, newMessagesList, 100, 102],
]
test.each(testCasesOld)('fetches messages from server: including last known - %s, look into future - %s', async (includeLastKnown, lookIntoFuture, payload, firstKnown, lastKnown) => {
const response = generateOCSResponse({
headers: {
'x-chat-last-common-read': '123',
@ -1887,7 +1886,6 @@ describe('messagesStore', () => {
expect(cancelFunctionMocks[0]).not.toHaveBeenCalled()
})
})
describe('hasMoreMessagesToLoad', () => {
@ -2052,7 +2050,6 @@ describe('messagesStore', () => {
referenceId: '',
},
)
})
test('forwards a message with mentions and remove the latter', () => {
// Arrange

View file

@ -952,7 +952,6 @@ const actions = {
callViewStore.handleJoinCall(getters.conversation(token))
} catch (e) {
console.error('Error while joining call: ', e)
}
},
@ -1010,7 +1009,6 @@ const actions = {
showError(t('spreed', 'Error occurred when sending invitations'))
}
}
},
/**

View file

@ -558,7 +558,6 @@ describe('sessionStore', () => {
{ token: TOKEN, attendeeId: 4, updatedData: { inCall: 0, sessionIds: [] } })
expect(vuexStore.commit).toHaveBeenNthCalledWith(10 + 4, 'updateParticipant',
{ token: TOKEN, attendeeId: 5, updatedData: { inCall: 0, sessionIds: [] } })
})
it('should skip update if participant is not found', () => {

View file

@ -137,7 +137,6 @@ export const useBreakoutRoomsStore = defineStore('breakoutRooms', {
// Get the participants of the breakout rooms
await this.fetchBreakoutRoomsParticipants(token)
} catch (error) {
console.error(error)
showError(t('spreed', 'An error occurred while re-ordering the attendees'))

View file

@ -60,7 +60,6 @@ export const useGuestNameStore = defineStore('guestName', {
addGuestName({ token, actorId, actorDisplayName }, { noUpdate }) {
if (!this.guestNames[token]) {
Vue.set(this.guestNames, token, {})
}
if (!this.guestNames[token][actorId] || actorDisplayName === '') {
Vue.set(this.guestNames[token], actorId, t('spreed', 'Guest'))

View file

@ -19,7 +19,6 @@
* instead).
*/
export default (function() {
/**
* Mixin constructor.
*

View file

@ -13,7 +13,6 @@ import { generateOcsUrl } from '@nextcloud/router'
*/
class StandaloneTest {
constructor(settings, url) {
this.settings = settings
this.features = null
@ -155,7 +154,6 @@ class StandaloneTest {
this.socket.send(JSON.stringify({ type: 'bye', bye: {} }))
}
}
}
/**

View file

@ -190,7 +190,6 @@ export class Context {
const keyIndex = data[encodedFrame.data.byteLength - 1];
if (this._cryptoKeyRing[keyIndex]) {
const decodedFrame = await this._decryptFrame(
encodedFrame,
keyIndex);
@ -216,7 +215,6 @@ export class Context {
keyIndex,
initialKey = undefined,
ratchetCount = 0) {
const { encryptionKey } = this._cryptoKeyRing[keyIndex];
let { material } = this._cryptoKeyRing[keyIndex];
@ -292,7 +290,6 @@ export class Context {
}
}
/**
* Construct the IV used for AES-GCM and sent (in plain) with the packet similar to
* https://tools.ietf.org/html/rfc7714#section-8.1

View file

@ -37,7 +37,6 @@ const TYPE_ENCRYPTION_GOT_KEY = 'encryption.gotkey'
const TYPE_ENCRYPTION_ERROR = 'encryption.error'
class Encryption {
/**
* Check if the current browser supports encryption.
*
@ -680,7 +679,6 @@ class Encryption {
this.context.handleReceiver(receiver, receiver.track.kind, peer.id)
})
}
}
export default Encryption

View file

@ -19,7 +19,6 @@ import { VIRTUAL_BACKGROUND } from '../../../../constants.ts'
* video stream.
*/
export default class JitsiStreamBackgroundEffect {
// _model: Object;
// _options: Object;
// _stream: Object;
@ -220,7 +219,6 @@ export default class JitsiStreamBackgroundEffect {
* @return {void}
*/
runPostProcessing() {
const height = this._inputVideoElement.videoHeight
const width = this._inputVideoElement.videoWidth
const { backgroundType } = this._options.virtualBackground
@ -502,5 +500,4 @@ export default class JitsiStreamBackgroundEffect {
this._virtualVideo.pause()
}
}
}

View file

@ -6,7 +6,6 @@
import JitsiStreamBackgroundEffect from './JitsiStreamBackgroundEffect.js'
describe('JitsiStreamBackgroundEffect', () => {
describe('getSourcePropertiesForDrawingBackgroundImage', () => {
test.each([
['landscape source and landscape destination, wider aspect ratio source, wider and higher source', [1200, 500], [300, 200], [225, 0], [750, 500]],

View file

@ -76,7 +76,6 @@ async function makeTFLite(isSimd) {
self.compiled = true
self.postMessage({ message: 'loaded' })
} catch (error) {
console.error(error)
console.error('JitsiStreamBackgroundEffect.worker: tflite compilation failed. The web server may not be properly configured to send wasm and/or tflite files.')
@ -108,7 +107,6 @@ function runInference(frameId) {
const segmentationMaskData = []
// All consts in Worker in obj array.
for (let i = 0; i < self.segmentationPixelCount; i++) {
const person = self.tflite.HEAPF32[outputMemoryOffset + i]
segmentationMaskData.push({

View file

@ -29,7 +29,6 @@ import TrackSinkSource from './TrackSinkSource.js'
* --------------------
*/
export default class BlackVideoEnforcer extends TrackSinkSource {
constructor() {
super()
@ -149,5 +148,4 @@ export default class BlackVideoEnforcer extends TrackSinkSource {
this._outputStream = null
}
}

View file

@ -34,7 +34,6 @@ import { mediaDevicesManager } from '../../webrtc/index.js'
* --------------------
*/
export default class MediaDevicesSource extends TrackSource {
constructor(outputCount) {
super()
@ -386,5 +385,4 @@ export default class MediaDevicesSource extends TrackSource {
resetPendingVideoInputIdChangedCount()
})
}
}

View file

@ -168,7 +168,6 @@ describe('MediaDevicesSource', () => {
})
describe('start', () => {
/**
* Checks the expected output tracks and event listeners.
*/

View file

@ -36,7 +36,6 @@ import EmitterMixin from '../../EmitterMixin.js'
* -----------------
*/
export default class SpeakingMonitor extends TrackSink {
constructor() {
super()
this._superEmitterMixin()
@ -131,7 +130,6 @@ export default class SpeakingMonitor extends TrackSink {
this._trigger('speakingWhileMuted')
}
}
}
EmitterMixin.apply(SpeakingMonitor.prototype)

View file

@ -26,7 +26,6 @@ import TrackSinkSource from './TrackSinkSource.js'
* ------------------
*/
export default class TrackConstrainer extends TrackSinkSource {
constructor() {
super()
@ -51,5 +50,4 @@ export default class TrackConstrainer extends TrackSinkSource {
_handleInputTrackEnabled(trackId, enabled) {
this._setOutputTrackEnabled('default', enabled)
}
}

Some files were not shown because too many files have changed in this diff Show more