Skip to content

Commit 11e9df3

Browse files
committed
Infer unavailable thumbnail theme from background color
1 parent 47546ba commit 11e9df3

2 files changed

Lines changed: 24 additions & 20 deletions

File tree

src/renderer/helpers/colors.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,27 @@ export function getRandomColor() {
9999
}
100100

101101
export function calculateColorLuminance(colorValue) {
102-
const cutHex = colorValue.substring(1, 7)
103-
const colorValueR = parseInt(cutHex.substring(0, 2), 16)
104-
const colorValueG = parseInt(cutHex.substring(2, 4), 16)
105-
const colorValueB = parseInt(cutHex.substring(4, 6), 16)
102+
let colorValues
103+
104+
if (colorValue.startsWith('#')) {
105+
const cutHex = colorValue.length === 4
106+
? colorValue.slice(1).split('').map(value => value + value).join('')
107+
: colorValue.substring(1, 7)
108+
109+
colorValues = [
110+
parseInt(cutHex.substring(0, 2), 16),
111+
parseInt(cutHex.substring(2, 4), 16),
112+
parseInt(cutHex.substring(4, 6), 16)
113+
]
114+
} else {
115+
colorValues = colorValue.match(/\d+(\.\d+)?/g)?.slice(0, 3).map(Number)
116+
}
117+
118+
if (!colorValues || colorValues.some(value => isNaN(value))) {
119+
return '#FFFFFF'
120+
}
121+
122+
const [colorValueR, colorValueG, colorValueB] = colorValues
106123

107124
const luminance = (0.299 * colorValueR + 0.587 * colorValueG + 0.114 * colorValueB) / 255
108125

src/renderer/views/Watch/Watch.js

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import WatchVideoPlaylist from '../../components/WatchVideoPlaylist/WatchVideoPl
1414
import WatchVideoRecommendations from '../../components/WatchVideoRecommendations/WatchVideoRecommendations.vue'
1515
import FtAgeRestricted from '../../components/FtAgeRestricted/FtAgeRestricted.vue'
1616
import packageDetails from '../../../../package.json'
17+
import { calculateColorLuminance } from '../../helpers/colors'
1718
import {
1819
buildVTTFileLocally,
1920
copyToClipboard,
@@ -60,16 +61,6 @@ const UNAVAILABLE_VIDEO_THUMBNAILS = {
6061
light: 'https://www.youtube.com/img/desktop/unavailable/unavailable_video.png',
6162
dark: 'https://www.youtube.com/img/desktop/unavailable/unavailable_video_dark_theme.png'
6263
}
63-
const LIGHT_BASE_THEMES = new Set([
64-
'light',
65-
'pastelPink',
66-
'catppuccinLatte',
67-
'solarizedLight',
68-
'gruvboxLight',
69-
'everforestLightHard',
70-
'everforestLightMedium',
71-
'everforestLightLow'
72-
])
7364

7465
export default defineComponent({
7566
name: 'Watch',
@@ -206,9 +197,6 @@ export default defineComponent({
206197
backendFallback: function () {
207198
return this.$store.getters.getBackendFallback
208199
},
209-
baseTheme: function () {
210-
return this.$store.getters.getBaseTheme
211-
},
212200
currentInvidiousInstanceUrl: function () {
213201
return this.$store.getters.getCurrentInvidiousInstanceUrl
214202
},
@@ -1094,9 +1082,8 @@ export default defineComponent({
10941082
},
10951083

10961084
getUnavailableVideoThumbnail: function () {
1097-
const baseTheme = this.baseTheme || 'system'
1098-
const isLightTheme = LIGHT_BASE_THEMES.has(baseTheme) ||
1099-
(baseTheme === 'system' && !window.matchMedia('(prefers-color-scheme: dark)').matches)
1085+
const backgroundColor = window.getComputedStyle(document.body).backgroundColor
1086+
const isLightTheme = calculateColorLuminance(backgroundColor) === '#000000'
11001087

11011088
return isLightTheme
11021089
? UNAVAILABLE_VIDEO_THUMBNAILS.light

0 commit comments

Comments
 (0)