Skip to content

Commit dec3b96

Browse files
committed
Merge branch 'development' into feature/subscription-cache
* development: (59 commits) Bump the stylelint group with 2 updates (FreeTubeApp#5411) Bump rimraf from 5.0.8 to 6.0.1 (FreeTubeApp#5412) Translated using Weblate (Indonesian) Bump the babel group across 1 directory with 3 updates (FreeTubeApp#5419) Bump sass from 1.77.6 to 1.77.8 (FreeTubeApp#5413) Bump webpack from 5.92.1 to 5.93.0 (FreeTubeApp#5414) Bump lefthook from 1.7.1 to 1.7.2 (FreeTubeApp#5415) Bump electron from 31.1.0 to 31.2.0 (FreeTubeApp#5416) Fix about page not reacting to locale changes (FreeTubeApp#5393) Delete .github/workflows/report.yml (FreeTubeApp#5395) Bump version number to v0.21.1 Fix Invidious DASH manifest generation (FreeTubeApp#5387) ^ Update YouTube.js to 10.1.0 (FreeTubeApp#5384) Fix Invidious API error toasts saying undefined (FreeTubeApp#5380) Bump lefthook from 1.6.18 to 1.7.1 (FreeTubeApp#5376) Bump eslint-plugin-vue from 9.26.0 to 9.27.0 in the eslint group (FreeTubeApp#5371) Bump rimraf from 5.0.7 to 5.0.8 (FreeTubeApp#5373) Bump npm-run-all2 from 6.2.0 to 6.2.2 (FreeTubeApp#5374) Bump marked from 13.0.1 to 13.0.2 (FreeTubeApp#5375) Translated using Weblate (Portuguese (Brazil)) ...
2 parents 5a08fd0 + 10c7aae commit dec3b96

File tree

83 files changed

+1374
-1113
lines changed

Some content is hidden

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

83 files changed

+1374
-1113
lines changed

.github/workflows/report.yml

-70
This file was deleted.

_scripts/webpack.renderer.config.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,9 @@ const config = {
150150
resolve: {
151151
alias: {
152152
vue$: 'vue/dist/vue.runtime.esm.js',
153+
'portal-vue$': 'portal-vue/dist/portal-vue.esm.js',
153154

154-
'DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$': path.resolve(__dirname, '../src/datastores/handlers/electron.js'),
155+
DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$: path.resolve(__dirname, '../src/datastores/handlers/electron.js'),
155156

156157
'youtubei.js$': 'youtubei.js/web',
157158

_scripts/webpack.web.config.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,9 @@ const config = {
159159
resolve: {
160160
alias: {
161161
vue$: 'vue/dist/vue.runtime.esm.js',
162+
'portal-vue$': 'portal-vue/dist/portal-vue.esm.js',
162163

163-
'DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$': path.resolve(__dirname, '../src/datastores/handlers/web.js'),
164+
DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$: path.resolve(__dirname, '../src/datastores/handlers/web.js'),
164165

165166
// video.js's mpd-parser uses @xmldom/xmldom so that it can support both node and web browsers
166167
// As FreeTube only runs in electron and web browsers, we can use the native DOMParser class, instead of the "polyfill"

package.json

+20-20
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.0",
5+
"version": "0.21.1",
66
"license": "AGPL-3.0-or-later",
77
"main": "./dist/main.js",
88
"private": true,
@@ -61,9 +61,9 @@
6161
"@seald-io/nedb": "^4.0.4",
6262
"@silvermine/videojs-quality-selector": "^1.3.1",
6363
"autolinker": "^4.0.0",
64-
"electron-context-menu": "^4.0.0",
64+
"electron-context-menu": "^4.0.1",
6565
"lodash.debounce": "^4.0.8",
66-
"marked": "^13.0.0",
66+
"marked": "^13.0.2",
6767
"path-browserify": "^1.0.1",
6868
"portal-vue": "^2.1.7",
6969
"process": "^0.11.10",
@@ -79,20 +79,20 @@
7979
"vue-observe-visibility": "^1.0.0",
8080
"vue-router": "^3.6.5",
8181
"vuex": "^3.6.2",
82-
"youtubei.js": "^10.0.0"
82+
"youtubei.js": "^10.1.0"
8383
},
8484
"devDependencies": {
85-
"@babel/core": "^7.24.7",
86-
"@babel/eslint-parser": "^7.24.7",
85+
"@babel/core": "^7.24.9",
86+
"@babel/eslint-parser": "^7.24.8",
8787
"@babel/plugin-proposal-class-properties": "^7.18.6",
88-
"@babel/preset-env": "^7.24.7",
88+
"@babel/preset-env": "^7.24.8",
8989
"@double-great/stylelint-a11y": "^3.0.2",
9090
"@intlify/eslint-plugin-vue-i18n": "^3.0.0",
9191
"babel-loader": "^9.1.3",
9292
"copy-webpack-plugin": "^12.0.2",
9393
"css-loader": "^7.1.2",
9494
"css-minimizer-webpack-plugin": "^7.0.0",
95-
"electron": "^31.0.1",
95+
"electron": "^31.2.0",
9696
"electron-builder": "^24.13.3",
9797
"eslint": "^8.57.0",
9898
"eslint-config-prettier": "^9.1.0",
@@ -101,33 +101,33 @@
101101
"eslint-plugin-jsonc": "^2.16.0",
102102
"eslint-plugin-n": "^17.9.0",
103103
"eslint-plugin-prettier": "^5.1.3",
104-
"eslint-plugin-promise": "^6.2.0",
104+
"eslint-plugin-promise": "^6.4.0",
105105
"eslint-plugin-unicorn": "^54.0.0",
106-
"eslint-plugin-vue": "^9.26.0",
107-
"eslint-plugin-vuejs-accessibility": "^2.3.0",
106+
"eslint-plugin-vue": "^9.27.0",
107+
"eslint-plugin-vuejs-accessibility": "^2.3.1",
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.6.16",
112+
"lefthook": "^1.7.2",
113113
"mini-css-extract-plugin": "^2.9.0",
114-
"npm-run-all2": "^6.2.0",
115-
"postcss": "^8.4.38",
114+
"npm-run-all2": "^6.2.2",
115+
"postcss": "^8.4.39",
116116
"postcss-scss": "^4.0.9",
117117
"prettier": "^2.8.8",
118-
"rimraf": "^5.0.7",
119-
"sass": "^1.77.5",
118+
"rimraf": "^6.0.1",
119+
"sass": "^1.77.8",
120120
"sass-loader": "^14.2.1",
121-
"stylelint": "^16.6.1",
122-
"stylelint-config-sass-guidelines": "^11.1.0",
123-
"stylelint-config-standard": "^36.0.0",
121+
"stylelint": "^16.7.0",
122+
"stylelint-config-sass-guidelines": "^12.0.0",
123+
"stylelint-config-standard": "^36.0.1",
124124
"stylelint-high-performance-animation": "^1.10.0",
125125
"stylelint-use-logical-spec": "^5.0.1",
126126
"tree-kill": "1.2.2",
127127
"vue-devtools": "^5.1.4",
128128
"vue-eslint-parser": "^9.4.3",
129129
"vue-loader": "^15.10.0",
130-
"webpack": "^5.92.0",
130+
"webpack": "^5.93.0",
131131
"webpack-cli": "^5.1.4",
132132
"webpack-dev-server": "^5.0.4",
133133
"yaml-eslint-parser": "^1.2.3"

src/main/index.js

+9
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,8 @@ function runApp() {
409409

410410
if (url.startsWith('https://www.youtube.com/youtubei/')) {
411411
requestHeaders['Sec-Fetch-Site'] = 'same-origin'
412+
requestHeaders['Sec-Fetch-Mode'] = 'same-origin'
413+
requestHeaders['X-Youtube-Bootstrap-Logged-In'] = 'false'
412414
} else {
413415
// YouTube doesn't send the Content-Type header for the media requests, so we shouldn't either
414416
delete requestHeaders['Content-Type']
@@ -974,6 +976,13 @@ function runApp() {
974976

975977
try {
976978
const contents = await asyncFs.readFile(filePath)
979+
980+
// Probably a corrupted/broken cache entry, pretend it's absent
981+
// A valid entry should be a few KB large
982+
if (contents.byteLength < 500) {
983+
return undefined
984+
}
985+
977986
return contents.buffer
978987
} catch (e) {
979988
console.error(e)

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@
9898
}
9999
}
100100

101-
&.favorite, &.favorite:hover, &.favorite:focus-visible {
101+
&.favorite,
102+
&.favorite:hover,
103+
&.favorite:focus-visible {
102104
&:not(.disabled) {
103105
color: var(--favorite-icon-color);
104106
}

0 commit comments

Comments
 (0)