Skip to content

Commit 76b6e1f

Browse files
committed
Merge branch 'development' into custom-builds/current
* development: Bump version number to v0.21.2 Update YouTube.js to 10.2.0 (FreeTubeApp#5465) Update icon for channels button on side nav (FreeTubeApp#5273) Translated using Weblate (Azerbaijani) Fix getRegions script and update the regions (FreeTubeApp#5450) More flexible hardware acceleration for Linux (FreeTubeApp#5438) Bump the eslint group with 3 updates (FreeTubeApp#5441) Bump lefthook from 1.7.2 to 1.7.5 (FreeTubeApp#5445) Bump the fortawesome group with 4 updates (FreeTubeApp#5442) Bump swiper from 11.1.4 to 11.1.5 (FreeTubeApp#5443) Bump electron from 31.2.0 to 31.2.1 (FreeTubeApp#5444) Fix scss deprecation warnings (FreeTubeApp#5429) Bump the stylelint group with 2 updates (FreeTubeApp#5411)
2 parents ec4ed68 + cd5d293 commit 76b6e1f

File tree

93 files changed

+856
-871
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+856
-871
lines changed

_scripts/getRegions.mjs

+26-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const initialResponse = await scrapeLanguage('en')
2828
// Scrape language menu in en-US
2929

3030
/** @type {string[]} */
31-
const youTubeLanguages = initialResponse.data.actions[0].openPopupAction.popup.multiPageMenuRenderer.sections[1].multiPageMenuSectionRenderer.items[1].compactLinkRenderer.serviceEndpoint.signalServiceEndpoint.actions[0].getMultiPageMenuAction.menu.multiPageMenuRenderer.sections[0].multiPageMenuSectionRenderer.items
31+
const youTubeLanguages = initialResponse.data.actions[0].openPopupAction.popup.multiPageMenuRenderer.sections[0].multiPageMenuSectionRenderer.items[2].compactLinkRenderer.serviceEndpoint.signalServiceEndpoint.actions[0].getMultiPageMenuAction.menu.multiPageMenuRenderer.sections[0].multiPageMenuSectionRenderer.items
3232
.map(({ compactLinkRenderer }) => {
3333
return compactLinkRenderer.serviceEndpoint.signalServiceEndpoint.actions[0].selectLanguageCommand.hl
3434
})
@@ -79,11 +79,35 @@ for (const language of youTubeLanguages) {
7979
youTube: 'no',
8080
freeTube: 'nn'
8181
})
82+
} else if (language === 'iw') {
83+
// according to https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
84+
// "iw" is the old/original code for Hebrew, these days it's "he"
85+
foundLanguageNames.push('he')
86+
languagesToScrape.push({
87+
youTube: 'iw',
88+
freeTube: 'he'
89+
})
90+
} else if (language === 'es-419') {
91+
foundLanguageNames.push('es_AR', 'es-MX')
92+
languagesToScrape.push({
93+
youTube: 'es-419',
94+
freeTube: 'es_AR'
95+
})
96+
languagesToScrape.push({
97+
youTube: 'es-419',
98+
freeTube: 'es-MX'
99+
})
82100
} else if (language !== 'en') {
83101
unusedYouTubeLanguageNames.push(language)
84102
}
85103
}
86104

105+
foundLanguageNames.push('pt-BR')
106+
languagesToScrape.push({
107+
youTube: 'pt',
108+
freeTube: 'pt-BR'
109+
})
110+
87111
console.log("Active FreeTube languages that aren't available on YouTube:")
88112
console.log(activeLanguages.filter(lang => !foundLanguageNames.includes(lang)).sort())
89113

@@ -116,7 +140,7 @@ async function scrapeLanguage(youTubeLanguageCode) {
116140
}
117141

118142
function processGeolocations(freeTubeLanguage, youTubeLanguage, response) {
119-
const geolocations = response.data.actions[0].openPopupAction.popup.multiPageMenuRenderer.sections[1].multiPageMenuSectionRenderer.items[3].compactLinkRenderer.serviceEndpoint.signalServiceEndpoint.actions[0].getMultiPageMenuAction.menu.multiPageMenuRenderer.sections[0].multiPageMenuSectionRenderer.items
143+
const geolocations = response.data.actions[0].openPopupAction.popup.multiPageMenuRenderer.sections[0].multiPageMenuSectionRenderer.items[4].compactLinkRenderer.serviceEndpoint.signalServiceEndpoint.actions[0].getMultiPageMenuAction.menu.multiPageMenuRenderer.sections[0].multiPageMenuSectionRenderer.items
120144
.map(({ compactLinkRenderer }) => {
121145
return {
122146
name: new Misc.Text(compactLinkRenderer.title).toString().trim(),

package.json

+14-14
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "freetube",
33
"productName": "FreeTube",
44
"description": "A private YouTube client",
5-
"version": "0.21.1",
5+
"version": "0.21.2",
66
"license": "AGPL-3.0-or-later",
77
"main": "./dist/main.js",
88
"private": true,
@@ -53,10 +53,10 @@
5353
"ci": "yarn install --silent --frozen-lockfile"
5454
},
5555
"dependencies": {
56-
"@fortawesome/fontawesome-svg-core": "^6.5.2",
57-
"@fortawesome/free-brands-svg-icons": "^6.5.2",
58-
"@fortawesome/free-regular-svg-icons": "^6.5.2",
59-
"@fortawesome/free-solid-svg-icons": "^6.5.2",
56+
"@fortawesome/fontawesome-svg-core": "^6.6.0",
57+
"@fortawesome/free-brands-svg-icons": "^6.6.0",
58+
"@fortawesome/free-regular-svg-icons": "^6.6.0",
59+
"@fortawesome/free-solid-svg-icons": "^6.6.0",
6060
"@fortawesome/vue-fontawesome": "^2.0.10",
6161
"@seald-io/nedb": "^4.0.4",
6262
"@silvermine/videojs-quality-selector": "^1.3.1",
@@ -67,7 +67,7 @@
6767
"path-browserify": "^1.0.1",
6868
"portal-vue": "^2.1.7",
6969
"process": "^0.11.10",
70-
"swiper": "^11.1.4",
70+
"swiper": "^11.1.5",
7171
"video.js": "7.21.5",
7272
"videojs-contrib-quality-levels": "^3.0.0",
7373
"videojs-http-source-selector": "^1.1.6",
@@ -79,7 +79,7 @@
7979
"vue-observe-visibility": "^1.0.0",
8080
"vue-router": "^3.6.5",
8181
"vuex": "^3.6.2",
82-
"youtubei.js": "^10.1.0"
82+
"youtubei.js": "^10.2.0"
8383
},
8484
"devDependencies": {
8585
"@babel/core": "^7.24.9",
@@ -92,24 +92,24 @@
9292
"copy-webpack-plugin": "^12.0.2",
9393
"css-loader": "^7.1.2",
9494
"css-minimizer-webpack-plugin": "^7.0.0",
95-
"electron": "^31.2.0",
95+
"electron": "^31.2.1",
9696
"electron-builder": "^24.13.3",
9797
"eslint": "^8.57.0",
9898
"eslint-config-prettier": "^9.1.0",
9999
"eslint-config-standard": "^17.1.0",
100100
"eslint-plugin-import": "^2.29.1",
101101
"eslint-plugin-jsonc": "^2.16.0",
102102
"eslint-plugin-n": "^17.9.0",
103-
"eslint-plugin-prettier": "^5.1.3",
104-
"eslint-plugin-promise": "^6.4.0",
103+
"eslint-plugin-prettier": "^5.2.1",
104+
"eslint-plugin-promise": "^6.6.0",
105105
"eslint-plugin-unicorn": "^54.0.0",
106106
"eslint-plugin-vue": "^9.27.0",
107-
"eslint-plugin-vuejs-accessibility": "^2.3.1",
107+
"eslint-plugin-vuejs-accessibility": "^2.4.0",
108108
"eslint-plugin-yml": "^1.14.0",
109109
"html-webpack-plugin": "^5.6.0",
110110
"js-yaml": "^4.1.0",
111111
"json-minimizer-webpack-plugin": "^5.0.0",
112-
"lefthook": "^1.7.2",
112+
"lefthook": "^1.7.5",
113113
"mini-css-extract-plugin": "^2.9.0",
114114
"npm-run-all2": "^6.2.2",
115115
"postcss": "^8.4.39",
@@ -118,8 +118,8 @@
118118
"rimraf": "^6.0.1",
119119
"sass": "^1.77.8",
120120
"sass-loader": "^14.2.1",
121-
"stylelint": "^16.6.1",
122-
"stylelint-config-sass-guidelines": "^11.1.0",
121+
"stylelint": "^16.7.0",
122+
"stylelint-config-sass-guidelines": "^12.0.0",
123123
"stylelint-config-standard": "^36.0.1",
124124
"stylelint-high-performance-animation": "^1.10.0",
125125
"stylelint-use-logical-spec": "^5.0.1",

src/main/index.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,11 @@ function runApp() {
199199
let startupUrl
200200

201201
if (process.platform === 'linux') {
202-
// Enable hardware acceleration via VA-API
202+
// Enable hardware acceleration via VA-API with OpenGL if no other feature flags are found
203203
// https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/gpu/vaapi.md
204-
app.commandLine.appendSwitch('enable-features', 'VaapiVideoDecodeLinuxGL')
204+
if (!app.commandLine.hasSwitch('enable-features')) {
205+
app.commandLine.appendSwitch('enable-features', 'VaapiVideoDecodeLinuxGL')
206+
}
205207
}
206208

207209
const userDataPath = app.getPath('userData')

src/renderer/App.css

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@font-face {
22
font-family: Roboto;
3-
src: url("assets/font/Roboto-Regular.ttf");
3+
src: url('assets/font/Roboto-Regular.ttf');
44
}
55

66
.app {
@@ -45,11 +45,13 @@
4545
overflow-wrap: break-word;
4646
}
4747

48-
.fade-enter-active, .fade-leave-active {
49-
transition: opacity .15s;
48+
.fade-enter-active,
49+
.fade-leave-active {
50+
transition: opacity 0.15s;
5051
}
5152

52-
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
53+
.fade-enter,
54+
.fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
5355
opacity: 0;
5456
}
5557

Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
.experimental-warning {
22
text-align: center;
33
font-weight: bold;
4-
padding-inline: 4% 4%
4+
padding-inline: 4%;
55
}

src/renderer/components/ft-age-restricted/ft-age-restricted.css

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
padding-block: 20px;
99
}
1010

11-
.message, .frown {
11+
.message,
12+
.frown {
1213
color: var(--primary-text-color);
1314
background-color: var(--card-bg-color);
1415
padding-inline: 0;

src/renderer/components/ft-button/ft-button.css

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
}
3535

3636
.ripple::after {
37-
content: "";
37+
content: '';
3838
display: block;
3939
position: absolute;
4040
inline-size: 100%;
@@ -47,11 +47,11 @@
4747
background-position: 50%;
4848
transform: scale(10, 10);
4949
opacity: 0;
50-
transition: transform .5s, opacity 1s;
50+
transition: transform 0.5s, opacity 1s;
5151
}
5252

5353
.ripple:active::after {
5454
transform: scale(0, 0);
55-
opacity: .3;
55+
opacity: 0.3;
5656
transition: 0s;
5757
}

src/renderer/components/ft-channel-bubble/ft-channel-bubble.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
}
3535

3636
.icon {
37-
color: #EEE;
37+
color: #eee;
3838
font-size: 25px;
3939
position: absolute;
4040
inset-block-start: 12px;

src/renderer/components/ft-checkbox-list/ft-checkbox-list.css

+17-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* stylelint-disable no-descending-specificity */
2-
.pure-checkbox input[type="checkbox"] {
2+
.pure-checkbox input[type='checkbox'] {
33
border: 0;
44
clip: rect(0 0 0 0);
55
block-size: 1px;
@@ -10,13 +10,14 @@
1010
inline-size: 1px;
1111
}
1212

13-
.pure-checkbox input[type="checkbox"]:focus + label::before, .pure-checkbox input[type="checkbox"]:hover + label::before {
13+
.pure-checkbox input[type='checkbox']:focus + label::before,
14+
.pure-checkbox input[type='checkbox']:hover + label::before {
1415
border: 2px solid var(--primary-color);
1516
}
1617

17-
.pure-checkbox input[type="checkbox"]:active + label::before { transition-duration: 0s; }
18+
.pure-checkbox input[type='checkbox']:active + label::before { transition-duration: 0s; }
1819

19-
.pure-checkbox input[type="checkbox"] + label {
20+
.pure-checkbox input[type='checkbox'] + label {
2021
position: relative;
2122
padding-inline-start: 2em;
2223
user-select: none;
@@ -25,7 +26,7 @@
2526
margin-block-start: 10px;
2627
}
2728

28-
.pure-checkbox input[type="checkbox"] + label::before {
29+
.pure-checkbox input[type='checkbox'] + label::before {
2930
box-sizing: content-box;
3031
content: '';
3132
color: var(--primary-text-color);
@@ -40,7 +41,7 @@
4041
transition: all 0.4s ease;
4142
}
4243

43-
.pure-checkbox input[type="checkbox"] + label::after {
44+
.pure-checkbox input[type='checkbox'] + label::after {
4445
box-sizing: content-box;
4546
border-style: solid;
4647
border-image: none;
@@ -58,34 +59,35 @@
5859
transition: transform 200ms ease-out;
5960
}
6061

61-
.pure-checkbox input[type="checkbox"]:disabled + label::before { border-color: #ccc; }
62+
.pure-checkbox input[type='checkbox']:disabled + label::before { border-color: #ccc; }
6263

63-
.pure-checkbox input[type="checkbox"]:disabled:focus + label::before, .pure-checkbox input[type="checkbox"]:disabled:hover + label::before { background-color: inherit; }
64+
.pure-checkbox input[type='checkbox']:disabled:focus + label::before,
65+
.pure-checkbox input[type='checkbox']:disabled:hover + label::before { background-color: inherit; }
6466

65-
.pure-checkbox input[type="checkbox"]:disabled:checked + label::before { background-color: #ccc; }
67+
.pure-checkbox input[type='checkbox']:disabled:checked + label::before { background-color: #ccc; }
6668

67-
.pure-checkbox input[type="checkbox"]:checked + label::after {
69+
.pure-checkbox input[type='checkbox']:checked + label::after {
6870
content: '';
6971
transform: rotate(-45deg) scale(1);
7072
transition: transform 200ms ease-out;
7173
}
7274

73-
.pure-checkbox input[type="checkbox"]:checked + label::before {
75+
.pure-checkbox input[type='checkbox']:checked + label::before {
7476
animation: borderscale 200ms ease-in;
7577
}
7678

7779
@keyframes
78-
borderscale { 50% {
79-
box-shadow: 0 0 0 2px var(--primary-text-color);
80-
}
80+
borderscale { 50% {
81+
box-shadow: 0 0 0 2px var(--primary-text-color);
82+
}
8183
}
8284

8385
.checkboxTitle {
8486
margin-block: 0;
8587
}
8688

8789
@media only screen and (width <= 680px) {
88-
.pure-checkbox input[type="checkbox"] + label {
90+
.pure-checkbox input[type='checkbox'] + label {
8991
margin-block-start: 3px;
9092
}
9193
}

src/renderer/components/ft-community-poll/ft-community-poll.css

+3-2
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
cursor: pointer;
6666
}
6767

68-
.reveal-answer:hover, .reveal-answer:focus {
69-
background-color: var(--side-nav-hover-color)
68+
.reveal-answer:hover,
69+
.reveal-answer:focus {
70+
background-color: var(--side-nav-hover-color);
7071
}

src/renderer/components/ft-icon-button/ft-icon-button.scss

+5-3
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,14 @@
9898
}
9999
}
100100

101-
&.favorite, &.favorite:hover, &.favorite:focus-visible {
101+
&.favorite,
102+
&.favorite:hover,
103+
&.favorite:focus-visible {
104+
color: var(--favorite-icon-color);
105+
102106
&:not(.disabled) {
103107
color: var(--favorite-icon-color);
104108
}
105-
106-
color: var(--favorite-icon-color);
107109
}
108110
}
109111

0 commit comments

Comments
 (0)