Skip to content

Commit 830ac51

Browse files
committed
fix: move version comparison to utils
- post-review refactoring Signed-off-by: Maksim Sukharev <[email protected]>
1 parent f598d4c commit 830ac51

File tree

4 files changed

+91
-21
lines changed

4 files changed

+91
-21
lines changed

src/components/CallView/CallView.vue

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
-->
55

66
<template>
7-
<div id="call-container" :style="callContainerStyle">
7+
<div id="call-container" :class="callContainerClass">
88
<ViewerOverlayCallView v-if="isViewerOverlay"
99
:token="token"
1010
:model="promotedParticipantModel"
@@ -158,11 +158,12 @@ import { getTalkConfig } from '../../services/CapabilitiesManager.ts'
158158
import { EventBus } from '../../services/EventBus.js'
159159
import { useCallViewStore } from '../../stores/callView.js'
160160
import { useSettingsStore } from '../../stores/settings.js'
161+
import { satisfyVersion } from '../../utils/satisfyVersion.ts'
161162
import { localMediaModel, localCallParticipantModel, callParticipantCollection } from '../../utils/webrtc/index.js'
162163
import RemoteVideoBlocker from '../../utils/webrtc/RemoteVideoBlocker.js'
163164
164-
const serverVersion = loadState('core', 'config', {}).versionstring ?? '29.0.0'
165-
const serverSupportsBackgroundBlurred = '29.0.4'.localeCompare(serverVersion) < 1
165+
const serverVersion = loadState('core', 'config', {}).version ?? '29.0.0.0'
166+
const serverSupportsBackgroundBlurred = satisfyVersion(serverVersion, '29.0.4.0')
166167
167168
export default {
168169
name: 'CallView',
@@ -209,9 +210,8 @@ export default {
209210
localMediaModel.disableVideo()
210211
}
211212
212-
const isBackgroundBlurred = ref(serverSupportsBackgroundBlurred
213-
? null
214-
: BrowserStorage.getItem('background-blurred') !== 'false')
213+
// Fallback ref for versions before v29.0.4
214+
const isBackgroundBlurred = ref(BrowserStorage.getItem('background-blurred') !== 'false')
215215
216216
return {
217217
localMediaModel,
@@ -393,14 +393,12 @@ export default {
393393
/**
394394
* Fallback style for versions before v29.0.4
395395
*/
396-
callContainerStyle() {
396+
callContainerClass() {
397397
if (serverSupportsBackgroundBlurred) {
398398
return
399399
}
400400
401-
return {
402-
'backdrop-filter': this.isBackgroundBlurred ? 'blur(25px)' : 'none',
403-
}
401+
return this.isBackgroundBlurred ? 'call-container__blurred' : 'call-container__non-blurred'
404402
}
405403
},
406404
@@ -812,6 +810,13 @@ export default {
812810
// Default value has changed since v29.0.4: 'blur(25px)' => 'none'
813811
backdrop-filter: var(--filter-background-blur);
814812
--grid-gap: calc(var(--default-grid-baseline) * 2);
813+
814+
&.call-container__blurred {
815+
backdrop-filter: blur(25px);
816+
}
817+
&.call-container__non-blurred {
818+
backdrop-filter: none;
819+
}
815820
}
816821
817822
#videos {

src/components/SettingsDialog/SettingsDialog.vue

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,10 @@ import { useCustomSettings } from '../../services/SettingsAPI.ts'
219219
import { setUserConfig } from '../../services/settingsService.js'
220220
import { useSettingsStore } from '../../stores/settings.js'
221221
import { useSoundsStore } from '../../stores/sounds.js'
222+
import { satisfyVersion } from '../../utils/satisfyVersion.ts'
222223
223-
const serverVersion = loadState('core', 'config', {}).versionstring ?? '29.0.0'
224-
const serverSupportsBackgroundBlurred = '29.0.4'.localeCompare(serverVersion) < 1
224+
const serverVersion = loadState('core', 'config', {}).version ?? '29.0.0.0'
225+
const serverSupportsBackgroundBlurred = satisfyVersion(serverVersion, '29.0.4.0')
225226
226227
const isBackgroundBlurredState = serverSupportsBackgroundBlurred
227228
? loadState('spreed', 'force_enable_blur_filter', '') // 'yes', 'no', ''
@@ -326,11 +327,9 @@ export default {
326327
await setUserConfig('theming', 'force_enable_blur_filter', 'no')
327328
}
328329
BrowserStorage.removeItem('background-blurred')
329-
} else {
330+
} else if (blurred === null) {
330331
// Fallback to BrowserStorage
331-
if (blurred === null) {
332-
BrowserStorage.setItem('background-blurred', 'true')
333-
}
332+
BrowserStorage.setItem('background-blurred', 'true')
334333
}
335334
},
336335
@@ -387,12 +386,13 @@ export default {
387386
this.privacyLoading = false
388387
},
389388
389+
/**
390+
* Fallback method for versions before v29.0.4
391+
* @param {boolean} value whether background should be blurred
392+
*/
390393
toggleBackgroundBlurred(value) {
391-
if (serverSupportsBackgroundBlurred) {
392-
return
393-
}
394-
this.isBackgroundBlurred = value ? 'true' : 'false'
395-
BrowserStorage.setItem('background-blurred', value)
394+
this.isBackgroundBlurred = value.toString()
395+
BrowserStorage.setItem('background-blurred', this.isBackgroundBlurred)
396396
emit('set-background-blurred', value)
397397
},
398398
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
import { satisfyVersion } from '../satisfyVersion.ts'
6+
7+
describe('satisfyVersion', () => {
8+
const testCases = [
9+
// Before required
10+
['29.1.4.3', '28.2.5.4', true],
11+
['29.1.4.3', '29.0.15.3', true],
12+
['29.1.4.3', '29.1.1.3', true],
13+
['29.1.4.3', '29.1.4.0', true],
14+
['29.1.4.3', '29.1.4', true],
15+
['29.1.4.3', '29.1', true],
16+
['29.1.4.3', '29', true],
17+
['29.1.4', '29.1.3.9', true],
18+
['29.1', '29.0.9.1', true],
19+
['29', '28.1.5.6', true],
20+
// Exact match
21+
['29.1.4.3', '29.1.4.3', true],
22+
['29', '29.0.0.0', true],
23+
// After required
24+
['29.1.4.3', '29.1.4.4', false],
25+
['29.1.4.3', '29.1.5.0', false],
26+
['29.1.4.3', '29.2.0.0', false],
27+
['29.1.4.3', '30.0.0.0', false],
28+
['29.1.4.3', '29.1.5', false],
29+
['29.1.4.3', '29.2', false],
30+
['29.1.4.3', '30', false],
31+
['29.1.4', '29.1.4.3', false],
32+
['29.1', '29.1.4.3', false],
33+
['29', '29.1.4.3', false],
34+
]
35+
36+
it.each(testCases)('check if %s should satisfy requirement %s returns %s', (a, b, c) => {
37+
expect(satisfyVersion(a, b)).toBe(c)
38+
})
39+
})

src/utils/satisfyVersion.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
6+
/**
7+
* Checks if given version satisfy requirements (newer than)
8+
* Versions are expected to have format like '29.1.4.3'
9+
* @param version given version
10+
* @param requirement version to compare against
11+
*/
12+
function satisfyVersion(version: string, requirement: string): boolean {
13+
const versionMap = version.split('.').map(Number)
14+
const requirementMap = requirement.split('.').map(Number)
15+
16+
for (let i = 0; i < Math.max(versionMap.length, requirementMap.length); i++) {
17+
if ((versionMap[i] ?? 0) !== (requirementMap[i] ?? 0)) {
18+
return (versionMap[i] ?? 0) > (requirementMap[i] ?? 0)
19+
}
20+
}
21+
return true
22+
}
23+
24+
export {
25+
satisfyVersion,
26+
}

0 commit comments

Comments
 (0)