Compare commits

...

1248 Commits

Author SHA1 Message Date
dependabot[bot]
c3941f219c Bump shaka-player from 4.16.9 to 4.16.10 (#8345)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.16.9 to 4.16.10.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.16.10/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.16.9...v4.16.10)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.16.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 23:16:53 +01:00
dependabot[bot]
f87892c7bf Bump the stylelint group with 2 updates (#8334)
Bumps the stylelint group with 2 updates: [@double-great/stylelint-a11y](https://github.com/double-great/stylelint-a11y) and [stylelint](https://github.com/stylelint/stylelint).


Updates `@double-great/stylelint-a11y` from 3.4.0 to 3.4.1
- [Release notes](https://github.com/double-great/stylelint-a11y/releases)
- [Changelog](https://github.com/double-great/stylelint-a11y/blob/main/CHANGELOG.md)
- [Commits](https://github.com/double-great/stylelint-a11y/compare/v3.4.0...v3.4.1)

Updates `stylelint` from 16.25.0 to 16.26.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.25.0...16.26.0)

---
updated-dependencies:
- dependency-name: "@double-great/stylelint-a11y"
  dependency-version: 3.4.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: stylelint
- dependency-name: stylelint
  dependency-version: 16.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 23:16:11 +01:00
dependabot[bot]
905c308ff5 Bump the eslint group with 2 updates (#8333)
Bumps the eslint group with 2 updates: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue).


Updates `eslint-plugin-jsdoc` from 61.2.1 to 61.4.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.2.1...v61.4.1)

Updates `eslint-plugin-vue` from 10.5.1 to 10.6.0
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Changelog](https://github.com/vuejs/eslint-plugin-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v10.5.1...v10.6.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 61.4.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-vue
  dependency-version: 10.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 22:45:04 +01:00
dependabot[bot]
a3693ecb1e Bump vue from 3.5.24 to 3.5.25 (#8336)
Bumps [vue](https://github.com/vuejs/core) from 3.5.24 to 3.5.25.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.5.24...v3.5.25)

---
updated-dependencies:
- dependency-name: vue
  dependency-version: 3.5.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 22:42:43 +01:00
dependabot[bot]
5de006bca5 Bump electron-builder from 26.2.0 to 26.3.0 (#8341)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.2.0 to 26.3.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-builder@26.3.0/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 19:45:19 +01:00
dependabot[bot]
52cb9b7f94 Bump marked from 17.0.0 to 17.0.1 (#8339)
Bumps [marked](https://github.com/markedjs/marked) from 17.0.0 to 17.0.1.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v17.0.0...v17.0.1)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 17.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 19:29:01 +01:00
dependabot[bot]
c4dd47bedd Bump webpack from 5.102.1 to 5.103.0 (#8340)
Bumps [webpack](https://github.com/webpack/webpack) from 5.102.1 to 5.103.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.102.1...v5.103.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.103.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 19:23:11 +01:00
Hosted Weblate
b12c3527c5 Merge branch 'origin/development' into Weblate. 2025-11-24 18:51:27 +01:00
Andi Chandler
fb78cf5240 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Andi Chandler <andi@gowling.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
Translation: FreeTube/Translations
2025-11-24 18:51:18 +01:00
dependabot[bot]
863eb9e760 Bump html-webpack-plugin from 5.6.4 to 5.6.5 (#8342)
Bumps [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin) from 5.6.4 to 5.6.5.
- [Release notes](https://github.com/jantimon/html-webpack-plugin/releases)
- [Changelog](https://github.com/jantimon/html-webpack-plugin/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.4...v5.6.5)

---
updated-dependencies:
- dependency-name: html-webpack-plugin
  dependency-version: 5.6.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 17:25:28 +01:00
dependabot[bot]
654e24ec4c Bump mikefarah/yq from 4.48.1 to 4.49.1 (#8343)
Bumps [mikefarah/yq](https://github.com/mikefarah/yq) from 4.48.1 to 4.49.1.
- [Release notes](https://github.com/mikefarah/yq/releases)
- [Changelog](https://github.com/mikefarah/yq/blob/master/release_notes.txt)
- [Commits](https://github.com/mikefarah/yq/compare/v4.48.1...v4.49.1)

---
updated-dependencies:
- dependency-name: mikefarah/yq
  dependency-version: 4.49.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 17:25:06 +01:00
dependabot[bot]
92cac18c39 Bump actions/checkout from 5 to 6 (#8344)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 17:24:49 +01:00
dependabot[bot]
8847b35e81 Bump electron from 39.2.1 to 39.2.3 (#8337)
Bumps [electron](https://github.com/electron/electron) from 39.2.1 to 39.2.3.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v39.2.1...v39.2.3)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 39.2.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 17:18:16 +01:00
dependabot[bot]
2354fb0a88 Bump sass from 1.94.0 to 1.94.2 (#8335)
Bumps [sass](https://github.com/sass/dart-sass) from 1.94.0 to 1.94.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.94.0...1.94.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.94.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 15:38:18 +00:00
daangamz
585d63f543 Translated using Weblate (Dutch)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: daangamz <daandenhartog@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
Translation: FreeTube/Translations
2025-11-24 13:51:19 +00:00
Jeff Huang
b59323dacc Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-11-24 03:51:19 +00:00
absidue
e71a824e6b Fix dropdownShown error on the watch page for live streams (#8331) 2025-11-24 09:31:35 +08:00
absidue
663273ea02 Fix view count with RSS feeds (#8328) 2025-11-23 19:50:36 -05:00
absidue
1453e0bf8d Add support for exporting watch history in YouTube's JSON format (#8323) 2025-11-23 19:49:21 -05:00
efb4f5ff-1298-471a-8973-3d47447115dc
605febdafa Cleanup leftover import toast (#8325)
* cleanup leftover toast

* cleanup locales
2025-11-23 19:48:11 -05:00
delvani
6f27f2429f Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-11-23 23:51:18 +00:00
absidue
36501ba563 Wrap interactive FontAwesomeIcons in FtInput in actual buttons (#8324) 2025-11-23 23:39:23 +00:00
PikachuEXE
66e9fb74d8 Fix playlist page width & long playlist name handling (#8313)
* ! Fix playlist page width & long playlist name handling

* ! Fix layout issue in some widths

Also use `gap` instead of `margin-inline` for spacing

* ! Fix layout issue for local playlist in some widths
2025-11-23 18:04:20 +01:00
Milan
6db9c7352d Translated using Weblate (Slovak)
Currently translated at 67.5% (661 of 978 strings)

Co-authored-by: Milan <mobrcian@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
Translation: FreeTube/Translations
2025-11-23 16:51:18 +00:00
Milan
5dcc7b5dde Translated using Weblate (Slovak)
Currently translated at 67.5% (661 of 978 strings)

Co-authored-by: Milan <mobrcian@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
Translation: FreeTube/Translations
2025-11-23 15:51:19 +01:00
Milan
6452db219b Translated using Weblate (Slovak)
Currently translated at 59.5% (582 of 978 strings)

Co-authored-by: Milan <mobrcian@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
Translation: FreeTube/Translations
2025-11-23 12:51:18 +00:00
Sveinn í Felli
6590a18c46 Translated using Weblate (Icelandic)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-11-23 11:51:19 +01:00
Eder Etxebarria Rojo
34f0f54faf Translated using Weblate (Basque)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-11-23 08:51:34 +01:00
cyberboh
9f5637215a Translated using Weblate (Indonesian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: cyberboh <cybermay686@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/id/
Translation: FreeTube/Translations
2025-11-23 08:51:32 +01:00
Massimo Pissarello
deef6d8f53 Translated using Weblate (Italian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-11-23 08:51:31 +01:00
SquattedWasp747
13d4acf664 Translated using Weblate (Russian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: SquattedWasp747 <squattedwasp747@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-11-23 01:51:21 +00:00
Maxim
1137add185 Translated using Weblate (Russian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Maxim <lixngmax@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-11-23 01:51:19 +00:00
Grzegorz Wójcicki
64796c3e6a Translated using Weblate (Polish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-11-22 23:51:23 +01:00
Telaneo
aa0b576388 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-11-22 23:51:21 +01:00
Mickaël Binos
d1362205d9 Translated using Weblate (French)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-22 18:51:19 +00:00
Ghost of Sparta
bf9c5cdaca Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-22 16:51:17 +00:00
ColorfulRhino
602d8d41e8 Translated using Weblate (German)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-11-22 14:51:23 +01:00
Oğuz Ersen
8f89e39926 Translated using Weblate (Turkish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-11-22 14:51:22 +01:00
Fjuro
85c38edefb Translated using Weblate (Czech)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-11-22 14:51:20 +01:00
Loc Huynh
50c7d0f2e4 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Loc Huynh <huynhloc.contact@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vi/
Translation: FreeTube/Translations
2025-11-22 12:51:26 +01:00
summoner001
888c007573 Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: summoner001 <summoner@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-22 12:51:24 +01:00
Cloud Esp
d7ca9f658a Translated using Weblate (French)
Currently translated at 99.8% (977 of 978 strings)

Co-authored-by: Cloud Esp <Frederic.Darboux@inrae.fr>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-22 12:51:22 +01:00
大王叫我来巡山
636a50be46 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-11-22 10:51:29 +01:00
Priit Jõerüüt
a95276784b Translated using Weblate (Estonian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-11-22 10:51:27 +01:00
Ghost of Sparta
5dc1270787 Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-22 10:51:25 +01:00
Sveinn í Felli
facc91546a Translated using Weblate (Icelandic)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-11-22 10:51:23 +01:00
Aditya Mishra
4a5d8fa453 feat: added share button to community posts (#8317)
* feat: add share button to community posts

* Updated FtCommunityPost.scss so share button UI is consistant

* Shifted CSS code to FtCommunityPost.scss

* Move FtShareButton to a new position in the template

* Refactor FtCommunityPost.scss styles

Removed header share button styling and adjusted bottom section layout.

* Cleanup

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-11-22 16:43:20 +08:00
Oğuz Ersen
7c28dbb0d4 Translated using Weblate (Turkish)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-11-22 07:51:18 +01:00
Mona Lisa
105d9b7d0c Translated using Weblate (Swedish)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Mona Lisa <nickwick@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
Translation: FreeTube/Translations
2025-11-22 04:51:18 +00:00
大王叫我来巡山
5e599ea721 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-11-22 03:51:21 +01:00
Massimo Pissarello
44f0e5ca92 Translated using Weblate (Italian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-11-22 03:51:19 +01:00
ozrendev
4253ada1e5 Fix number of videos to be added to playlist is wrong (#8262)
* change toast popup var

* remove videoCount from toast popup

* update locale labels

* remove videoCount var from locales

* fix linter

* use only one locale for toast

* remove un-used locale

* update correct locale value

* remove updated locale values

* fix blank values to empty values linter

* Apply suggestion from @PikachuEXE

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-11-22 00:00:17 +01:00
absidue
c6722b8714 Fix the spacing between playlist metadata entries (#8311) 2025-11-21 23:14:22 +01:00
Andi Chandler
39bf9126bd Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Andi Chandler <andi@gowling.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
Translation: FreeTube/Translations
2025-11-20 18:51:19 +00:00
Juan Carlos Alfonso Vina
5bf3a5a796 Translated using Weblate (Spanish)
Currently translated at 97.4% (953 of 978 strings)

Co-authored-by: Juan Carlos Alfonso Vina <jalfo53@wgu.edu>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-11-20 17:51:17 +01:00
ColorfulRhino
e303ff8b56 Translated using Weblate (German)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-11-20 12:51:18 +00:00
Jeff Huang
bcaf110d6d Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-11-20 04:51:19 +01:00
Maxim
f076a552df Translated using Weblate (Russian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Maxim <lixngmax@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-11-19 21:54:56 +01:00
Loc Huynh
2e9aeae057 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Loc Huynh <huynhloc.contact@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vi/
Translation: FreeTube/Translations
2025-11-19 17:51:23 +00:00
Andi Chandler
bd792a1f2f Translated using Weblate (English (United Kingdom))
Currently translated at 99.3% (972 of 978 strings)

Co-authored-by: Andi Chandler <andi@gowling.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
Translation: FreeTube/Translations
2025-11-19 17:51:21 +00:00
Andi Chandler
035a1c4748 Translated using Weblate (English (United Kingdom))
Currently translated at 97.6% (955 of 978 strings)

Co-authored-by: Andi Chandler <andi@gowling.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
Translation: FreeTube/Translations
2025-11-19 13:51:19 +00:00
Andi Chandler
bf64152ff0 Translated using Weblate (English (United Kingdom))
Currently translated at 97.5% (954 of 978 strings)

Co-authored-by: Andi Chandler <andi@gowling.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
Translation: FreeTube/Translations
2025-11-19 11:51:24 +01:00
Eder Etxebarria Rojo
e1bae5dc27 Translated using Weblate (Basque)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-11-19 11:51:21 +01:00
Grzegorz Wójcicki
31bc5c541b Translated using Weblate (Polish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-11-19 01:51:20 +01:00
Rusi Dimitrov
3fdbd43b8a Translated using Weblate (Bulgarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Rusi Dimitrov <astral_86@mail.bg>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
Translation: FreeTube/Translations
2025-11-19 01:51:18 +01:00
Sveinn í Felli
b91a15277f Translated using Weblate (Icelandic)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-11-18 18:51:33 +00:00
Oğuz Ersen
35d9663d95 Translated using Weblate (Turkish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-11-18 17:52:50 +01:00
Hosted Weblate
ec724382de Merge branch 'origin/development' into Weblate. 2025-11-18 15:51:48 +01:00
Fjuro
e9c48fbb58 Translated using Weblate (Czech)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-11-18 15:51:27 +01:00
Priit Jõerüüt
aa745d5ead Translated using Weblate (Estonian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-11-18 15:51:24 +01:00
dependabot[bot]
ee2ff267d1 Bump sass from 1.93.3 to 1.94.0 (#8300)
Bumps [sass](https://github.com/sass/dart-sass) from 1.93.3 to 1.94.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.93.3...1.94.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.94.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 12:42:02 +00:00
absidue
24593d425e Switch to Vue's useTemplateRef() function (#8308) 2025-11-18 06:09:36 -05:00
Massimo Pissarello
92f79616d1 Translated using Weblate (Italian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-11-18 03:51:17 +01:00
delvani
c092104596 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-11-18 03:51:17 +01:00
大王叫我来巡山
ac0a8b0134 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-11-18 01:51:20 +01:00
absidue
f1d4991ca6 Workaround ready-to-show not firing consistently on wayland (#8294) 2025-11-18 08:29:14 +08:00
dependabot[bot]
c14e332051 Bump electron from 38.4.0 to 39.2.1 (#8303)
Bumps [electron](https://github.com/electron/electron) from 38.4.0 to 39.2.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v38.4.0...v39.2.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 39.2.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-18 08:28:19 +08:00
absidue
e7280db2b9 Migrate the WatchVideoInfo component to the composition API (#8295) 2025-11-17 19:04:22 -05:00
summoner001
bf340071ad Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: summoner001 <summoner@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-17 22:51:34 +01:00
Telaneo
ea71f45be5 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-11-17 22:51:32 +01:00
Mickaël Binos
549e3f918a Translated using Weblate (French)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-17 22:51:30 +01:00
dependabot[bot]
3b379dbcb4 Bump eslint-plugin-jsdoc from 61.1.12 to 61.2.1 in the eslint group (#8298)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 61.1.12 to 61.2.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.1.12...v61.2.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 61.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-17 20:55:29 +01:00
absidue
8695da836b Replace broken trending with a local API only equivalent (#8289) 2025-11-17 14:42:31 -05:00
absidue
a711a9730b Fix settings layout issues after the Vue 3 migration (#8292) 2025-11-17 20:17:49 +01:00
dependabot[bot]
cb14c8c4ce Bump lefthook from 2.0.3 to 2.0.4 (#8299)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v2.0.3...v2.0.4)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 2.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-17 17:51:39 +01:00
dependabot[bot]
8be984c2fc Bump shaka-player from 4.16.8 to 4.16.9 (#8301)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.16.8 to 4.16.9.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.16.9/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.16.8...v4.16.9)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.16.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-17 17:43:38 +01:00
dependabot[bot]
fadaa2457b Bump electron-builder from 26.1.0 to 26.2.0 (#8302)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.1.0 to 26.2.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-builder@26.2.0/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-17 17:35:14 +01:00
absidue
fde2ade504 Fix playlist video view counts on the local API (#8290) 2025-11-16 20:39:52 -05:00
ozrendev
5e243c68ec change hardcoded color app text logoColor (#8288) 2025-11-17 09:07:19 +08:00
Maxim
44850093cb Translated using Weblate (Russian)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Maxim <lixngmax@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-11-16 13:51:16 +01:00
ColorfulRhino
05cb312818 Translated using Weblate (German)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-11-16 01:51:16 +01:00
ozrendev
9e832a1302 wrap long playlist strings (#8275) 2025-11-16 08:30:56 +08:00
Rusi Dimitrov
1bc8e8861e Translated using Weblate (Bulgarian)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Rusi Dimitrov <astral_86@mail.bg>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
Translation: FreeTube/Translations
2025-11-15 21:51:19 +01:00
dependabot[bot]
30bca40908 Bump js-yaml from 4.1.0 to 4.1.1 (#8284)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-15 16:29:50 +01:00
efb4f5ff-1298-471a-8973-3d47447115dc
010aa50acd bump workflows node-version to 24 (#8279) 2025-11-15 00:00:06 +00:00
Eder Etxebarria Rojo
774e370981 Translated using Weblate (Basque)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-11-14 12:51:24 +01:00
Dao Duy Tin
2aef9ad424 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Dao Duy Tin <duytin095@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vi/
Translation: FreeTube/Translations
2025-11-13 14:51:28 +01:00
Ghost of Sparta
7d24561df9 Translated using Weblate (Hungarian)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-12 22:52:49 +01:00
Ghost of Sparta
94693c9f00 Translated using Weblate (Hungarian)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-12 07:51:21 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
ec473ab875 Remove upperCase on various places (#8267)
* remove uppercase on various places

* bring back user-select for upcoming and watched

Co-Authored-By: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>

---------

Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
2025-11-12 01:29:19 +00:00
Mickaël Binos
050611cae3 Translated using Weblate (French)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-11 19:51:15 +01:00
PikachuEXE
8e66ac2550 Fix subscription count display on watch page with IV API (#8255)
* ! Fix subscription count display on watch page with IV API

* * Use same subscription count handling as local API
2025-11-11 18:26:02 +01:00
absidue
10829adc08 Specify window position in constructor for better wayland compatibility (#8238) 2025-11-11 12:21:06 -05:00
efb4f5ff-1298-471a-8973-3d47447115dc
d50e3d4da4 Change profile icon to include lowercase letters (#8253)
* change profile icon

* fix subscribe button
2025-11-11 08:31:26 -05:00
Markus Gaugg
1ed5cd584e Translated using Weblate (German)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Markus Gaugg <gaugg@gmx.at>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-11-11 12:51:27 +00:00
Jeff Huang
a0bb74fedc Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-11-11 04:51:21 +00:00
delvani
4b1bb5d651 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-11-11 02:51:22 +01:00
Oğuz Ersen
cf4f48b17f Translated using Weblate (Turkish)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-11-10 19:51:22 +01:00
PikachuEXE
047c3e6d28 ! Fix top nav cannot search in new window (#8254) 2025-11-10 16:52:11 +01:00
dependabot[bot]
a5b7e77588 Bump vue from 3.5.22 to 3.5.24 (#8257)
Bumps [vue](https://github.com/vuejs/core) from 3.5.22 to 3.5.24.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.5.22...v3.5.24)

---
updated-dependencies:
- dependency-name: vue
  dependency-version: 3.5.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-10 16:42:08 +01:00
Fjuro
9895c8b563 Translated using Weblate (Czech)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-11-10 15:51:29 +01:00
Massimo Pissarello
a9c6df7256 Translated using Weblate (Italian)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-11-10 15:51:28 +01:00
Grzegorz Wójcicki
60d5f61785 Translated using Weblate (Polish)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-11-10 15:51:26 +01:00
Hosted Weblate
1f59f22231 Merge branch 'origin/development' into Weblate. 2025-11-10 12:51:49 +00:00
Ghost of Sparta
c06738b1ae Translated using Weblate (Hungarian)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-10 13:51:37 +01:00
Telaneo
ae5deb9844 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-11-10 13:51:35 +01:00
dependabot[bot]
c687a1c9f3 Bump lefthook from 2.0.2 to 2.0.3 (#8258)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v2.0.2...v2.0.3)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 2.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-10 05:51:55 -05:00
dependabot[bot]
17650fdf34 Bump the eslint group with 2 updates (#8256)
Bumps the eslint group with 2 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) and [eslint](https://github.com/eslint/eslint).


Updates `@eslint/js` from 9.39.0 to 9.39.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.39.1/packages/js)

Updates `eslint` from 9.39.0 to 9.39.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.0...v9.39.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.39.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.39.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-10 05:45:39 -05:00
dependabot[bot]
7352534ed0 Bump marked from 16.4.1 to 17.0.0 (#8260)
Bumps [marked](https://github.com/markedjs/marked) from 16.4.1 to 17.0.0.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.4.1...v17.0.0)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 17.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-10 05:43:59 -05:00
Florent
0f3ae6e720 Translated using Weblate (Breton)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-11-10 10:51:22 +01:00
Priit Jõerüüt
26d62ba8e2 Translated using Weblate (Estonian)
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-11-10 10:51:22 +01:00
Cloud Esp
b3c14bf2b4 Translated using Weblate (French)
Currently translated at 99.7% (978 of 980 strings)

Co-authored-by: Cloud Esp <Frederic.Darboux@inrae.fr>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-10 10:51:21 +01:00
大王叫我来巡山
80a0af668b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (980 of 980 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-11-10 10:51:21 +01:00
absidue
676cf13159 Add support for importing and exporting search history (#8237)
* Add support for importing and exporting search history

* Fix errors caused by passing reactive objects through IPC channels
2025-11-10 15:09:08 +08:00
absidue
075c111eb5 Invidious API: Fix published dates on recommended videos (#8251) 2025-11-10 13:12:15 +08:00
大王叫我来巡山
13c2c87122 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (974 of 974 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-11-10 04:51:20 +01:00
PikachuEXE
0c1ffe2d38 ! Fix playlist progress bar preview broken in IV API (#8245) 2025-11-10 03:33:54 +00:00
absidue
fcb311b26d Wrap interactive FontAwesomeIcons in actual buttons (#8206)
* Wrap interactive FontAwesomeIcons in actual buttons

* Fix notification banner and top nav arrows
2025-11-10 09:59:05 +08:00
ozrendev
31290be062 Add Catpuccin Latte Theme (#7943)
* feat: add catppuccin latte theme

* add case to index.js

* remove metadata from svg

* fix alphabet order

* remove colors that don't conform to WCAG 4.5:1

* Update src/renderer/themes.css

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* set scrollbar-color

---------

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-11-09 20:54:25 -05:00
absidue
eff85a5f06 Validate sender in all IPC event handlers (#8248) 2025-11-09 20:52:37 -05:00
Priit Jõerüüt
d584ad350d Translated using Weblate (Estonian)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-11-10 00:51:21 +00:00
Telaneo
b8599c655d Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-11-09 22:51:21 +00:00
Mickaël Binos
d2b13d75d9 Translated using Weblate (French)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-09 17:51:22 +00:00
Fjuro
00be448e3f Translated using Weblate (Czech)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-11-09 15:51:18 +00:00
PikachuEXE
09c265e445 ! Fix watch page playlist component not scrolled to current video on load (#8239) 2025-11-09 14:41:04 +00:00
Rusi Dimitrov
d9e3461cdc Translated using Weblate (Bulgarian)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Rusi Dimitrov <astral_86@mail.bg>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
Translation: FreeTube/Translations
2025-11-09 13:51:18 +00:00
summoner001
81cc935ecf Translated using Weblate (Hungarian)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: summoner001 <summoner@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-09 12:51:34 +01:00
Cloud Esp
a71a6b69ae Translated using Weblate (French)
Currently translated at 99.5% (967 of 971 strings)

Co-authored-by: Cloud Esp <Frederic.Darboux@inrae.fr>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-09 12:51:32 +01:00
ColorfulRhino
5f2a951645 Translated using Weblate (German)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-11-09 12:51:29 +01:00
Massimo Pissarello
61ac1559c0 Translated using Weblate (Italian)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-11-09 09:51:18 +01:00
Oğuz Ersen
eff357772f Translated using Weblate (Turkish)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-11-09 07:51:15 +01:00
大王叫我来巡山
655074f102 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-11-09 03:51:21 +01:00
delvani
e0bdbb1fcf Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-11-09 00:51:15 +01:00
Florent
3abd8e6a27 Translated using Weblate (Breton)
Currently translated at 100.0% (971 of 971 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-11-08 22:53:56 +01:00
PikachuEXE
b01f851d1c Fix comment toggle link text (#8210)
* ! Fix comment toggle link text

* - Remove unused locale entries

* fix linter warning

* ! Fix incorrect nesting in template

* $ Use function to generate link text instead of using if-else in template

Also add/update type definition for comment objects

---------

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-11-08 15:43:51 -05:00
PikachuEXE
614da2880f Fix scroll to current chapter on expand (#8242)
* ! Fix scroll to current chapter on expand

* Reuse existing variable

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-11-08 17:05:17 +00:00
ozrendev
f98d411fc5 Fix: Large fast forward/rewind value popup on player (#8236)
* round playback value

* Update src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js

Co-authored-by: PikachuEXE <git@pikachuexe.net>

---------

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-11-08 13:40:22 +01:00
Ramón Ortiz Castañeda
f503b0b71c Translated using Weblate (Spanish (Mexico))
Currently translated at 61.8% (602 of 974 strings)

Co-authored-by: Ramón Ortiz Castañeda <ramon.o@ciencias.unam.mx>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
Translation: FreeTube/Translations
2025-11-08 03:51:21 +01:00
ozrendev
03c75f373e add and set show-tags for ext vid args (#8232) 2025-11-08 09:05:50 +08:00
ozrendev
2bdce9b98a Change clear filter button from text to icon (#8205)
* change clear filter button text to icon

* wrap icon in button elem

* add hover css

* refactor css

* Update src/renderer/components/FtSearchFilters/FtSearchFilters.vue

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* Update src/renderer/components/FtSearchFilters/FtSearchFilters.css

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* Apply suggestion from @PikachuEXE

* Apply suggestion from @PikachuEXE

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-11-05 23:53:17 +01:00
Nish Patel
fa79120f0a Feat clickable playlist progress bar (#7782)
* Feat clickable playlist progress bar

* * Make clicking on progress bar scroll the view instead of playing the video

* * Update thumbnail size to be slightly bigger w/ aspect ratio 4/3 like small width one

* * Use smaller iamges for preview

* * Use template ref instead of querySelector

* $ Refactor style & remove outdated comment

* * Remove usage of template ref array as ordered array

* ! Workaround preview covered by other elements when previewing earlier items

* ! Fix preview out of screen

* ! Fix preview out of screen 2

* ! Fix preview out of screen 3

* ! Fix preview out of screen 4

* * Update preview box box-shadow, remove arrow below & "ticks"

* * Use fixed width preview box (diff value for smaller view port)

* * Disable the preview for pointing device of limited accuracy

* * Update preview style for smaller width viewport

* $ Refactor style

* ! Fix children elements handling when scrolling to current video

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-11-05 23:09:30 +01:00
ozrendev
5e4a93b730 Add Hide channels based on text (#7948)
* add toggle to hide channels based on text

* fix lint warnings

* hide channels by default, remove toggle

* change label text to include channels

* hide videos on community tab

* hide posts on community tab

* filter subscription posts array

* filter subscription posts array on refresh

* set forbiddenTitles toLowerCase

* set forbiddenTitles toLowerCase in Watch.js

* Update src/renderer/components/SubscriptionsPosts.vue

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* rename translation keys

* one other translation key renamed

* changed translation keys after latest merge

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-11-05 23:05:11 +01:00
absidue
f2f2e9325c Clean up defunct shaka-player types patching (#8224) 2025-11-04 09:59:46 +01:00
ColorfulRhino
621a9ad30a Translated using Weblate (German)
Currently translated at 100.0% (974 of 974 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-11-03 23:51:19 +01:00
Markus Gaugg
93eb7394b2 Translated using Weblate (German)
Currently translated at 100.0% (974 of 974 strings)

Co-authored-by: Markus Gaugg <gaugg@gmx.at>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-11-03 23:51:16 +01:00
dependabot[bot]
fff5cb89d0 Bump shaka-player from 4.16.6 to 4.16.8 (#8223)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.16.6 to 4.16.8.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.16.8/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.16.6...v4.16.8)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.16.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 06:13:45 +08:00
Milo Ivir
c34d8e934d Translated using Weblate (Croatian)
Currently translated at 100.0% (974 of 974 strings)

Co-authored-by: Milo Ivir <mail@milotype.de>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
Translation: FreeTube/Translations
2025-11-03 21:51:14 +01:00
dependabot[bot]
3b08213ab1 Bump globals from 16.4.0 to 16.5.0 (#8216)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.4.0 to 16.5.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.4.0...v16.5.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-03 17:57:59 +01:00
dependabot[bot]
bde7acfd10 Bump eslint-plugin-jsdoc from 61.1.11 to 61.1.12 in the eslint group (#8222)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 61.1.11 to 61.1.12
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.1.11...v61.1.12)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 61.1.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-03 16:47:00 +00:00
Fjuro
2b2869a3d4 Translated using Weblate (Czech)
Currently translated at 100.0% (974 of 974 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-11-03 15:51:21 +00:00
Priit Jõerüüt
6a736d4b5e Translated using Weblate (Estonian)
Currently translated at 100.0% (974 of 974 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-11-03 15:51:19 +00:00
dependabot[bot]
ebae6b9875 Bump lefthook from 2.0.1 to 2.0.2 (#8213)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v2.0.1...v2.0.2)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 2.0.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-03 05:57:57 -05:00
dependabot[bot]
d01c864c2f Bump sass from 1.93.2 to 1.93.3 (#8214)
Bumps [sass](https://github.com/sass/dart-sass) from 1.93.2 to 1.93.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.93.2...1.93.3)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.93.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-03 05:55:00 -05:00
dependabot[bot]
06a4aa4dc5 Bump the eslint group with 3 updates (#8211)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `@eslint/js` from 9.38.0 to 9.39.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.39.0/packages/js)

Updates `eslint` from 9.38.0 to 9.39.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.38.0...v9.39.0)

Updates `eslint-plugin-jsdoc` from 61.1.9 to 61.1.11
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.1.9...v61.1.11)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.39.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.39.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 61.1.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-03 05:53:13 -05:00
absidue
caf2db57fb Remove broken restart window keyboard shortcut (#7281) 2025-11-03 05:52:52 -05:00
Loc Huynh
6dd00feb16 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Loc Huynh <huynhloc.contact@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vi/
Translation: FreeTube/Translations
2025-11-03 06:51:11 +01:00
Yaron Shahrabani
0d36e7b89f Translated using Weblate (Hebrew)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
Translation: FreeTube/Translations
2025-11-03 04:51:20 +01:00
Jeff Huang
e6b1c20f42 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-11-03 04:51:18 +01:00
absidue
bf2f9b4fb3 Migrate FtInput to the composition API (#8208) 2025-11-03 03:37:43 +00:00
absidue
4c72a2358d Replace vue-portal dependency with Vue's built-in <Teleport> component (#8207) 2025-11-03 09:05:42 +08:00
absidue
d829cc2b16 Update to Vue 3 (#8094)
* Update to Vue 3

* Fix toasts and removing videos from playlists

* Fix duplicate app ID

* Simplify aria-selected handling now that false doesn't remove attributes

* Fix various errors

* Fix toasts and hiding watched videos

* Update vue-router to 4.6.3

---------

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-11-02 18:11:41 +00:00
Eder Etxebarria Rojo
ad669b3678 Translated using Weblate (Basque)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-11-02 14:52:42 +01:00
summoner001
a8061f0131 Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: summoner001 <summoner@disroot.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-11-02 12:51:15 +01:00
Sveinn í Felli
b1ea445456 Translated using Weblate (Icelandic)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-11-02 08:51:18 +01:00
Oğuz Ersen
500438debe Translated using Weblate (Turkish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-11-02 08:51:16 +01:00
absidue
796fc4eda0 Properly fix CORS in PO token web views (#8203) 2025-11-02 03:29:35 +00:00
Massimo Pissarello
9ede2a3019 Translated using Weblate (Italian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-11-02 02:51:22 +00:00
Telaneo
7ea2d6fdb4 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-11-02 02:51:19 +00:00
Mickaël Binos
1ec73aa173 Translated using Weblate (French)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-11-02 01:51:15 +01:00
absidue
293ea3f47a Configure nedb to always clean up corrupted data (#8202) 2025-11-02 08:41:54 +08:00
delvani
3fa5ccd199 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-11-01 19:51:16 +01:00
efb4f5ff-1298-471a-8973-3d47447115dc
075f0c6df1 Add video paused check to frame shortcuts (#8200) 2025-11-01 18:40:34 +00:00
PikachuEXE
41830bf91d Fix toast with timeout 0 will be displayed for default 3s (#8168)
* ! Fix toast with timeout 0 will be displayed for default 3s

* * Stop calling `showToast` with zero, add warning if it happens
2025-11-01 14:08:58 -04:00
大王叫我来巡山
2ef1ff7a18 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-11-01 16:54:53 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
eacc5ceca4 Change containing text input limit (#8174)
* Remove containing text input limit

* fix trimmed issues

* Update src/renderer/components/FtInputTags/FtInputTags.vue

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* Update static/locales/en-US.yaml

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* Update src/renderer/components/FtInputTags/FtInputTags.vue

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-11-01 15:06:15 +00:00
Philip Goto
bc4d8ce2fa Translated using Weblate (Dutch)
Currently translated at 99.3% (972 of 978 strings)

Co-authored-by: Philip Goto <philip.goto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
Translation: FreeTube/Translations
2025-10-31 16:02:52 +01:00
TheAssassin
adbc650df0 Add support for AppImageUpdate (#8153) 2025-10-31 06:43:31 +08:00
Devenor
faaf92a967 Added New Window option to Tray (#7995)
* Added new window option to the tray

* Added special case for Linux

* Added special case for Linux

* Fix

* New window set as main window only if main window is in tray

* mainWindow gets updated when moving windows in and out of the tray

---------

Co-authored-by: Devenor <@>
2025-10-30 19:07:08 +01:00
Kyotaro Iijima
76ceac9efa Translated using Weblate (Japanese)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Kyotaro Iijima <kyotaro.eyes@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
Translation: FreeTube/Translations
2025-10-30 13:02:49 +01:00
Milo Ivir
8ad9964fed Translated using Weblate (Croatian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Milo Ivir <mail@milotype.de>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
Translation: FreeTube/Translations
2025-10-30 05:24:49 +01:00
Lesser
d4733b1ae0 Translated using Weblate (Russian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Lesser <lesserl.persona@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-10-28 00:02:47 +01:00
dependabot[bot]
9d0577f13b Bump the eslint group with 2 updates (#8184)
Bumps the eslint group with 2 updates: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn).


Updates `eslint-plugin-jsdoc` from 61.1.5 to 61.1.9
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.1.5...v61.1.9)

Updates `eslint-plugin-unicorn` from 61.0.2 to 62.0.0
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v61.0.2...v62.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 61.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-unicorn
  dependency-version: 62.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 19:54:19 +01:00
dependabot[bot]
543a597497 Bump the babel group with 2 updates (#8185)
Bumps the babel group with 2 updates: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) and [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env).


Updates `@babel/core` from 7.28.4 to 7.28.5
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.5/packages/babel-core)

Updates `@babel/preset-env` from 7.28.3 to 7.28.5
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.5/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.28.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
- dependency-name: "@babel/preset-env"
  dependency-version: 7.28.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 17:48:04 +01:00
dependabot[bot]
ba54bfc997 Bump sass-loader from 16.0.5 to 16.0.6 (#8186)
Bumps [sass-loader](https://github.com/webpack/sass-loader) from 16.0.5 to 16.0.6.
- [Release notes](https://github.com/webpack/sass-loader/releases)
- [Changelog](https://github.com/webpack/sass-loader/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webpack/sass-loader/compare/v16.0.5...v16.0.6)

---
updated-dependencies:
- dependency-name: sass-loader
  dependency-version: 16.0.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 17:38:23 +01:00
dependabot[bot]
b0469c4f62 Bump electron from 38.3.0 to 38.4.0 (#8187)
Bumps [electron](https://github.com/electron/electron) from 38.3.0 to 38.4.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v38.3.0...v38.4.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 38.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 17:38:05 +01:00
dependabot[bot]
fb1be7d7b0 Bump swiper from 12.0.2 to 12.0.3 (#8189)
Bumps [swiper](https://github.com/nolimits4web/Swiper) from 12.0.2 to 12.0.3.
- [Release notes](https://github.com/nolimits4web/Swiper/releases)
- [Changelog](https://github.com/nolimits4web/swiper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nolimits4web/Swiper/compare/v12.0.2...v12.0.3)

---
updated-dependencies:
- dependency-name: swiper
  dependency-version: 12.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 17:17:44 +01:00
dependabot[bot]
6e79f3d541 Bump actions/upload-artifact from 4 to 5 (#8188)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 17:17:18 +01:00
dependabot[bot]
ac0388e808 Bump lefthook from 2.0.0 to 2.0.1 (#8190)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 2.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 17:17:04 +01:00
efb4f5ff-1298-471a-8973-3d47447115dc
74cb414be8 Handle lockup views with no published text or views (#8170)
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-10-27 06:03:45 -04:00
Lesser
d51c8d3ac3 Translated using Weblate (Russian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Lesser <lesserl.persona@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-10-27 10:03:08 +01:00
Lesser
0954d8cda8 Translated using Weblate (Russian)
Currently translated at 98.7% (966 of 978 strings)

Co-authored-by: Lesser <lesserl.persona@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-10-27 07:02:53 +00:00
ozrendev
890ba6f1e6 Remove Hide Channel from the kebab menu on the Subscriptions page (#8175)
* video options conditional based on subscriptions page

* proper page validation using routes

* change if inSubscriptions position

* Update src/renderer/components/ft-list-video/ft-list-video.js

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-10-27 09:07:24 +08:00
J. Lavoie
53bd699e8d Translated using Weblate (French)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-10-25 22:02:48 +00:00
ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝)
8fc7b357c6 Translated using Weblate (Latvian)
Currently translated at 56.2% (550 of 978 strings)

Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) <coool@mail.lv>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lv/
Translation: FreeTube/Translations
2025-10-25 17:02:49 +02:00
ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝)
78624fde9c Translated using Weblate (Latvian)
Currently translated at 56.3% (551 of 978 strings)

Co-authored-by: ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝) <coool@mail.lv>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lv/
Translation: FreeTube/Translations
2025-10-25 15:02:42 +02:00
danssmnt
8714cff13b Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: danssmnt <danimunt07@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_PT/
Translation: FreeTube/Translations
2025-10-25 03:03:03 +02:00
dependabot[bot]
46da1cf840 Bump lefthook from 1.13.6 to 2.0.0 (#8166)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.13.6 to 2.0.0.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.13.6...v2.0.0)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 2.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-22 11:40:03 +02:00
dependabot[bot]
ade259b9bc Bump the eslint group with 4 updates (#8158)
Bumps the eslint group with 4 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint), [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue).


Updates `@eslint/js` from 9.37.0 to 9.38.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.38.0/packages/js)

Updates `eslint` from 9.37.0 to 9.38.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.37.0...v9.38.0)

Updates `eslint-plugin-jsdoc` from 61.1.1 to 61.1.4
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.1.1...v61.1.4)

Updates `eslint-plugin-vue` from 10.5.0 to 10.5.1
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Changelog](https://github.com/vuejs/eslint-plugin-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v10.5.0...v10.5.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.38.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.38.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 61.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-vue
  dependency-version: 10.5.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-21 06:28:11 +08:00
ColorfulRhino
a29031faec Translated using Weblate (German)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-10-21 00:02:46 +02:00
dependabot[bot]
c718ab2a3f Bump shaka-player from 4.16.4 to 4.16.6 (#8167)
* Bump shaka-player from 4.16.4 to 4.16.6

Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.16.4 to 4.16.6.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.16.6/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.16.4...v4.16.6)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.16.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Revert "Fix playback rate reset when video ends (#7718)"

This reverts commit d4117344e4.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-10-20 19:50:04 +00:00
dependabot[bot]
963f42825d Bump marked from 16.4.0 to 16.4.1 (#8159)
Bumps [marked](https://github.com/markedjs/marked) from 16.4.0 to 16.4.1.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.4.0...v16.4.1)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-20 15:29:21 +02:00
dependabot[bot]
8b63948bbb Bump electron from 38.2.2 to 38.3.0 (#8161)
Bumps [electron](https://github.com/electron/electron) from 38.2.2 to 38.3.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v38.2.2...v38.3.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 38.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-20 14:30:39 +02:00
dependabot[bot]
e6599cfb30 Bump actions/setup-node from 5 to 6 (#8162)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-20 14:29:51 +02:00
dependabot[bot]
c5b0be28c4 Bump youtubei.js from 16.0.0 to 16.0.1 (#8163)
Bumps [youtubei.js](https://github.com/LuanRT/YouTube.js) from 16.0.0 to 16.0.1.
- [Release notes](https://github.com/LuanRT/YouTube.js/releases)
- [Changelog](https://github.com/LuanRT/YouTube.js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/LuanRT/YouTube.js/compare/v16.0.0...v16.0.1)

---
updated-dependencies:
- dependency-name: youtubei.js
  dependency-version: 16.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-20 18:12:40 +08:00
KING APPS
1baa962201 Translated using Weblate (Persian)
Currently translated at 99.0% (969 of 978 strings)

Co-authored-by: KING APPS <kiperking1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fa/
Translation: FreeTube/Translations
2025-10-20 04:50:45 +00:00
Fjuro
960677aabc Translated using Weblate (Czech)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-10-20 04:50:42 +00:00
Rusi Dimitrov
f0a49c6bd5 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Rusi Dimitrov <astral_86@mail.bg>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
Translation: FreeTube/Translations
2025-10-20 04:50:40 +00:00
absidue
6628c3e4ba Add missing IS_ELECTRON and SUPPORTS_LOCAL_API checks (#8147) 2025-10-17 07:11:00 +08:00
absidue
d170945d11 Simplify the NATIVE_THEME_UPDATE event handler (#8140) 2025-10-16 18:21:55 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
e46bdedb75 Bump package version from 0.23.11 to 0.23.12 (#8138) 2025-10-16 06:35:47 +08:00
absidue
8799b4990a Add error handling to the deciphering code (#8139) 2025-10-15 18:22:01 -04:00
PikachuEXE
fd96c7ad6f Fix video playback by using video ID bound poToken (#8137)
* ! Fix video playback by using video ID bound poToken

* Clean up now unused session PO token code

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-10-15 22:01:43 +00:00
Adrián Gelmotto Ruiz
03d44792a7 Hide subscriptions wrapper on mobile and center bottom SideNav items (#8133) 2025-10-15 21:11:29 +02:00
PikachuEXE
95ec469d72 ! Fix sigFrameScript on dev in windows (#8134) 2025-10-15 06:04:01 -04:00
Priit Jõerüüt
3e395f9586 Translated using Weblate (Estonian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-10-14 20:43:02 +00:00
dependabot[bot]
7d0b48c27c Bump github/codeql-action from 3 to 4 (#8124)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-14 18:36:51 +02:00
Rhoslyn Prys
19600d7076 Translated using Weblate (Welsh)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
Translation: FreeTube/Translations
2025-10-14 12:07:29 +00:00
dependabot[bot]
15d0e644e5 Bump mikefarah/yq from 4.47.2 to 4.48.1 (#8123)
Bumps [mikefarah/yq](https://github.com/mikefarah/yq) from 4.47.2 to 4.48.1.
- [Release notes](https://github.com/mikefarah/yq/releases)
- [Changelog](https://github.com/mikefarah/yq/blob/master/release_notes.txt)
- [Commits](https://github.com/mikefarah/yq/compare/v4.47.2...v4.48.1)

---
updated-dependencies:
- dependency-name: mikefarah/yq
  dependency-version: 4.48.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-14 08:44:00 +00:00
dependabot[bot]
52660a8f2b Bump stefanzweifel/git-auto-commit-action from 6 to 7 (#8125)
Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 6 to 7.
- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)
- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-14 07:21:15 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
279f3bd7b3 Bump package version from 0.23.10 to 0.23.11 (#8126) 2025-10-14 07:46:39 +02:00
Ettore Atalan
03e0c47a3b Translated using Weblate (German)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-10-13 21:07:28 +00:00
absidue
76522d2685 Fix importing and exporting data after the Electron 38.2.0 update (#8106) 2025-10-13 18:10:07 +00:00
Florent
b47aaa6563 Translated using Weblate (Breton)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-10-13 18:07:31 +00:00
Grzegorz Wójcicki
cab43cbbdb Translated using Weblate (Polish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-10-13 18:07:30 +00:00
Grzegorz Wójcicki
b024a16deb Translated using Weblate (Polish)
Currently translated at 98.7% (966 of 978 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-10-13 16:07:28 +00:00
Sveinn í Felli
f151e17efb Translated using Weblate (Icelandic)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-10-13 08:07:29 +00:00
Massimo Pissarello
80cab31d87 Translated using Weblate (Italian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-10-13 05:07:30 +00:00
Jeff Huang
a1685a3ffe Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-10-13 05:07:28 +00:00
dependabot[bot]
dee58f0e8e Bump electron from 38.2.1 to 38.2.2 (#8112)
Bumps [electron](https://github.com/electron/electron) from 38.2.1 to 38.2.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v38.2.1...v38.2.2)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 38.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-12 22:06:38 -04:00
dependabot[bot]
5629a5ca4a Bump eslint-plugin-jsdoc from 60.8.2 to 61.1.1 in the eslint group (#8110)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 60.8.2 to 61.1.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v60.8.2...v61.1.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 61.1.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-12 22:06:12 -04:00
dependabot[bot]
a819b1012e Bump webpack from 5.102.0 to 5.102.1 (#8114)
Bumps [webpack](https://github.com/webpack/webpack) from 5.102.0 to 5.102.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.102.0...v5.102.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.102.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 07:13:51 +08:00
dependabot[bot]
9b0c8cc619 Bump marked from 16.3.0 to 16.4.0 (#8113)
Bumps [marked](https://github.com/markedjs/marked) from 16.3.0 to 16.4.0.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.3.0...v16.4.0)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 07:13:37 +08:00
dependabot[bot]
2ff8e6a3f4 Bump stylelint-config-standard in the stylelint group (#8111)
Bumps the stylelint group with 1 update: [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard).


Updates `stylelint-config-standard` from 39.0.0 to 39.0.1
- [Release notes](https://github.com/stylelint/stylelint-config-standard/releases)
- [Changelog](https://github.com/stylelint/stylelint-config-standard/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint-config-standard/compare/39.0.0...39.0.1)

---
updated-dependencies:
- dependency-name: stylelint-config-standard
  dependency-version: 39.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 06:49:30 +08:00
dependabot[bot]
60b5e23ab6 Bump electron-builder from 26.0.20 to 26.1.0 (#8116)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.0.20 to 26.1.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-builder@26.1.0/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 06:48:54 +08:00
dependabot[bot]
205c542623 Bump shaka-player from 4.16.3 to 4.16.4 (#8117)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.16.3 to 4.16.4.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.16.4/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.16.3...v4.16.4)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.16.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 06:48:40 +08:00
efb4f5ff-1298-471a-8973-3d47447115dc
83003c08f1 Bump package version from 0.23.9 to 0.23.10 (#8118) 2025-10-12 14:55:47 -04:00
dependabot[bot]
fdf76f3e54 Bump youtubei.js from 15.1.1 to 16.0.0 (#8115)
* Bump youtubei.js from 15.1.1 to 16.0.0

Bumps [youtubei.js](https://github.com/LuanRT/YouTube.js) from 15.1.1 to 16.0.0.
- [Release notes](https://github.com/LuanRT/YouTube.js/releases)
- [Changelog](https://github.com/LuanRT/YouTube.js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/LuanRT/YouTube.js/compare/v15.1.1...v16.0.0)

---
updated-dependencies:
- dependency-name: youtubei.js
  dependency-version: 16.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Implement an iframe based custom sig eval function

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-10-12 14:27:24 -04:00
delvani
b184bf55b3 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-10-12 17:07:30 +00:00
Loc Huynh
457b6214aa Translated using Weblate (Vietnamese)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Loc Huynh <huynhloc.contact@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vi/
Translation: FreeTube/Translations
2025-10-12 17:07:28 +00:00
Lil Fed New Life
27cdf253f6 Added translation using Weblate (Amharic)
Co-authored-by: Lil Fed New Life <newlifelilfed@gmail.com>
2025-10-12 16:45:55 +02:00
Telaneo
02c396b98c Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-10-12 11:07:32 +00:00
Telaneo
dd11a43a15 Translated using Weblate (Norwegian Bokmål)
Currently translated at 99.1% (970 of 978 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-10-12 10:59:19 +02:00
Eder Etxebarria Rojo
5c43289eb2 Translated using Weblate (Basque)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-10-12 10:46:42 +02:00
Ghost of Sparta
8ad328be0a Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-10-12 10:46:40 +02:00
Oğuz Ersen
0500782d82 Translated using Weblate (Turkish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-10-12 10:46:38 +02:00
Mickaël Binos
6efab34f6b Translated using Weblate (French)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-10-12 10:46:37 +02:00
大王叫我来巡山
33a3721d17 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-10-12 07:15:03 +02:00
ڕاستی
abe88172d5 Translated using Weblate (Kurdish (Central))
Currently translated at 40.2% (394 of 978 strings)

Co-authored-by: ڕاستی <rasti.k5@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ckb/
Translation: FreeTube/Translations
2025-10-12 03:08:23 +00:00
Femini
4171fd2285 Translated using Weblate (Azerbaijani)
Currently translated at 31.0% (304 of 978 strings)

Co-authored-by: Femini <nizamismidov4@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/az/
Translation: FreeTube/Translations
2025-10-12 03:08:22 +00:00
manjiko-tab
a9a6e2bf91 Translated using Weblate (Bengali)
Currently translated at 14.5% (142 of 978 strings)

Co-authored-by: manjiko-tab <waterglaze@tutamail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bn/
Translation: FreeTube/Translations
2025-10-12 03:08:21 +00:00
Raphael-11
1401ce6254 Translated using Weblate (Spanish (Argentina))
Currently translated at 50.2% (491 of 978 strings)

Co-authored-by: Raphael-11 <raef.laffi@medtech.tn>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_AR/
Translation: FreeTube/Translations
2025-10-12 03:08:20 +00:00
大王叫我来巡山
21954a8464 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-10-12 03:08:18 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
749cab38ad Update sortby strings (#8109) 2025-10-11 21:33:26 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
bd1156ab41 Fix the icon colors for SponsorBlock categories (#8108) 2025-10-11 21:32:45 -04:00
PikachuEXE
fce7c3b2cf Update next video countdown toast to be refreshed per second instead of using workaround (#8103)
* * Update next video countdown toast to be refreshed per second instead of using workaround

* $ Update JSDoc for `showToast` and use ||=

* * Perform proper cleanup
2025-10-10 22:34:47 +00:00
absidue
5ce0f4b85c Remove unused supportsYtdlProtocol from the external player map file (#8107) 2025-10-10 18:47:24 +00:00
Philip Goto
9ac3b90688 Translated using Weblate (Dutch)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Philip Goto <philip.goto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
Translation: FreeTube/Translations
2025-10-10 15:07:29 +00:00
Adrián Gelmotto Ruiz
7743d72884 Translated using Weblate (Spanish)
Currently translated at 99.7% (976 of 978 strings)

Co-authored-by: Adrián Gelmotto Ruiz <adriangelmotto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-10-09 00:07:31 +02:00
Adrián Gelmotto Ruiz
cac397daee Translated using Weblate (Spanish)
Currently translated at 99.8% (977 of 978 strings)

Co-authored-by: Adrián Gelmotto Ruiz <adriangelmotto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-10-08 20:07:28 +00:00
Adrián Gelmotto Ruiz
883dd75530 Translated using Weblate (Spanish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Adrián Gelmotto Ruiz <adriangelmotto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-10-08 17:07:27 +00:00
Yaron Shahrabani
63e62924d2 Translated using Weblate (Hebrew)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
Translation: FreeTube/Translations
2025-10-08 10:07:32 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
b1a619633b Hide Proxy password (#8102)
* hide proxy password

* fix lint
2025-10-07 21:58:53 +08:00
absidue
b299b46c16 Clean up upstreamed big play button opacity (#8052) 2025-10-06 23:21:12 +00:00
dependabot[bot]
edb3e44271 Bump the eslint group with 5 updates (#8095)
Bumps the eslint group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.36.0` | `9.37.0` |
| [eslint](https://github.com/eslint/eslint) | `9.36.0` | `9.37.0` |
| [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) | `60.5.0` | `60.8.2` |
| [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc) | `2.20.1` | `2.21.0` |
| [eslint-plugin-yml](https://github.com/ota-meshi/eslint-plugin-yml) | `1.18.0` | `1.19.0` |


Updates `@eslint/js` from 9.36.0 to 9.37.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/v9.37.0/packages/js)

Updates `eslint` from 9.36.0 to 9.37.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.36.0...v9.37.0)

Updates `eslint-plugin-jsdoc` from 60.5.0 to 60.8.2
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v60.5.0...v60.8.2)

Updates `eslint-plugin-jsonc` from 2.20.1 to 2.21.0
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.20.1...v2.21.0)

Updates `eslint-plugin-yml` from 1.18.0 to 1.19.0
- [Release notes](https://github.com/ota-meshi/eslint-plugin-yml/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-yml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-yml/compare/v1.18.0...v1.19.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.37.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.37.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 60.8.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsonc
  dependency-version: 2.21.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-yml
  dependency-version: 1.19.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 17:56:31 +02:00
dependabot[bot]
226cf12244 Bump stylelint from 16.24.0 to 16.25.0 in the stylelint group (#8096)
Bumps the stylelint group with 1 update: [stylelint](https://github.com/stylelint/stylelint).


Updates `stylelint` from 16.24.0 to 16.25.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.24.0...16.25.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 17:51:49 +02:00
dependabot[bot]
4d0ca25a8e Bump lefthook from 1.13.4 to 1.13.6 (#8099)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.13.4 to 1.13.6.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.13.4...v1.13.6)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.13.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 17:46:47 +02:00
dependabot[bot]
a0b292919c Bump electron from 38.2.0 to 38.2.1 (#8100)
Bumps [electron](https://github.com/electron/electron) from 38.2.0 to 38.2.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v38.2.0...v38.2.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 38.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 17:35:47 +02:00
dependabot[bot]
c7a6550d99 Bump shaka-player from 4.16.2 to 4.16.3 (#8098)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.16.2 to 4.16.3.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.16.3/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.16.2...v4.16.3)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.16.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 17:30:55 +02:00
dependabot[bot]
9dd96de216 Bump webpack from 5.101.3 to 5.102.0 (#8097)
Bumps [webpack](https://github.com/webpack/webpack) from 5.101.3 to 5.102.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.101.3...v5.102.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.102.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 14:06:48 +00:00
Ghost of Sparta
218275179c Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-10-05 22:02:04 +02:00
Rhoslyn Prys
fc9728e3ed Translated using Weblate (Welsh)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
Translation: FreeTube/Translations
2025-10-05 13:02:01 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
2282b33d98 Change Player icons (#8057)
* Change player icons

* Finalize icon selection
2025-10-04 08:35:09 +08:00
absidue
7442080689 Serialize search and playlist continuations in the store (#8092) 2025-10-03 10:32:31 +02:00
Massimo Pissarello
7d363850ab Translated using Weblate (Italian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-09-30 10:02:00 +02:00
Bora Atıcı
436073f365 Translated using Weblate (Turkish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-09-29 23:02:06 +02:00
Richard-EnglishUK
b2fc1deb99 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Richard-EnglishUK <rjcleaver@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
Translation: FreeTube/Translations
2025-09-29 23:02:05 +02:00
dependabot[bot]
ab891e49c1 Bump eslint-plugin-jsdoc from 60.2.0 to 60.5.0 in the eslint group (#8091)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 60.2.0 to 60.5.0
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v60.2.0...v60.5.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 60.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-29 15:19:12 +02:00
dependabot[bot]
263b518fbe Bump sass from 1.93.1 to 1.93.2 (#8090)
Bumps [sass](https://github.com/sass/dart-sass) from 1.93.1 to 1.93.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.93.1...1.93.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.93.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-29 14:41:27 +02:00
dependabot[bot]
0859c251f2 Bump lefthook from 1.13.3 to 1.13.4 (#8088)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.13.3 to 1.13.4.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.13.3...v1.13.4)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.13.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-29 14:39:20 +02:00
dependabot[bot]
4035d74989 Bump electron from 38.1.2 to 38.2.0 (#8089)
Bumps [electron](https://github.com/electron/electron) from 38.1.2 to 38.2.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v38.1.2...v38.2.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 38.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-29 14:38:04 +02:00
absidue
8969594f03 Migrate the SearchPage component to the composition API (#8086) 2025-09-27 20:46:08 +00:00
absidue
6e6c9204fa Hide webpack-dev-server error overlay for application errors (#8087) 2025-09-27 08:06:27 +08:00
Sveinn í Felli
46b78ad99c Translated using Weblate (Icelandic)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-09-26 16:02:05 +02:00
Ghost of Sparta
00dd392537 Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-09-25 06:02:03 +00:00
bittin1ddc447d824349b2
374d9cbfcd Translated using Weblate (Swedish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
Translation: FreeTube/Translations
2025-09-25 06:02:03 +02:00
PikachuEXE
9160488c1d ! Fix unable to add video to any playlist (#8082) 2025-09-24 17:44:38 +00:00
Grzegorz Wójcicki
5fb69beb84 Translated using Weblate (Polish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-09-24 19:02:01 +02:00
Hosted Weblate
950674d001 Merge branch 'origin/development' into Weblate. 2025-09-24 11:02:12 +02:00
Eder Etxebarria Rojo
b8c7a66087 Translated using Weblate (Basque)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-09-24 09:02:04 +00:00
absidue
560446be18 Fix weblate parsing error (#8079) 2025-09-24 05:51:35 +08:00
dependabot[bot]
c9c9c6ff3f Bump sass from 1.93.0 to 1.93.1 (#8078)
Bumps [sass](https://github.com/sass/dart-sass) from 1.93.0 to 1.93.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.93.0...1.93.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.93.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-23 17:47:12 +00:00
dependabot[bot]
54e51d9455 Bump lefthook from 1.13.1 to 1.13.3 (#8077)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.13.1 to 1.13.3.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.13.1...v1.13.3)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.13.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-23 16:27:09 +00:00
dependabot[bot]
b618f8d046 Bump eslint-plugin-jsdoc from 60.1.1 to 60.2.0 in the eslint group (#8076)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 60.1.1 to 60.2.0
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v60.1.1...v60.2.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 60.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-23 17:37:39 +02:00
dependabot[bot]
5ed6ca0b9a Bump shaka-player from 4.16.1 to 4.16.2 (#8069)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.16.1 to 4.16.2.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.16.2/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.16.1...v4.16.2)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.16.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-09-23 17:37:17 +02:00
Hemant More
95daf25d64 Added translation using Weblate (Marathi)
Co-authored-by: Hemant More <foil-pastor-omen@duck.com>
2025-09-23 16:52:49 +02:00
dependabot[bot]
252eceabfc Bump the eslint group across 1 directory with 4 updates (#8073)
Bumps the eslint group with 4 updates in the / directory: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint), [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue).


Updates `@eslint/js` from 9.35.0 to 9.36.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.36.0/packages/js)

Updates `eslint` from 9.35.0 to 9.36.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.35.0...v9.36.0)

Updates `eslint-plugin-jsdoc` from 57.0.8 to 60.1.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v57.0.8...v60.1.1)

Updates `eslint-plugin-vue` from 10.4.0 to 10.5.0
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Changelog](https://github.com/vuejs/eslint-plugin-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v10.4.0...v10.5.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.36.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.36.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 60.1.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
- dependency-name: eslint-plugin-vue
  dependency-version: 10.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-23 06:52:11 +08:00
dependabot[bot]
cc133d8e20 Bump electron from 38.1.0 to 38.1.2 (#8071)
Bumps [electron](https://github.com/electron/electron) from 38.1.0 to 38.1.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v38.1.0...v38.1.2)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 38.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 18:34:26 +02:00
dependabot[bot]
49adf252ac Bump sass from 1.92.1 to 1.93.0 (#8067)
Bumps [sass](https://github.com/sass/dart-sass) from 1.92.1 to 1.93.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.92.1...1.93.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.93.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 18:26:39 +02:00
dependabot[bot]
51ca538ab4 Bump lefthook from 1.13.0 to 1.13.1 (#8072)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.13.0 to 1.13.1.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.13.0...v1.13.1)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.13.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 18:26:03 +02:00
dependabot[bot]
a8f0ee1070 Bump swiper from 12.0.1 to 12.0.2 (#8070)
Bumps [swiper](https://github.com/nolimits4web/Swiper) from 12.0.1 to 12.0.2.
- [Release notes](https://github.com/nolimits4web/Swiper/releases)
- [Changelog](https://github.com/nolimits4web/swiper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nolimits4web/Swiper/compare/v12.0.1...v12.0.2)

---
updated-dependencies:
- dependency-name: swiper
  dependency-version: 12.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 16:08:07 +00:00
Massimo Pissarello
9f6ff78b5c Translated using Weblate (Italian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-09-22 13:02:03 +00:00
Fjuro
5d454c55b8 Translated using Weblate (Czech)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-09-22 11:02:13 +00:00
Ghost of Sparta
c49cb44042 Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-09-22 11:02:11 +00:00
ColorfulRhino
403cec6666 Translated using Weblate (German)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-09-22 11:02:09 +00:00
Priit Jõerüüt
e00819acbb Translated using Weblate (Estonian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-09-22 09:02:19 +02:00
Florent
59ed8185df Translated using Weblate (Breton)
Currently translated at 100.0% (978 of 978 strings)

Translated using Weblate (French)

Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-09-22 09:02:18 +02:00
Markus Gaugg
1585283537 Translated using Weblate (German)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Markus Gaugg <gaugg@gmx.at>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-09-22 09:02:14 +02:00
Jeff Huang
86272de251 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-09-22 05:02:04 +00:00
absidue
07e44fef3b Improve playlist import performance (#8062) 2025-09-22 11:56:18 +08:00
Telaneo
b9599e7fd4 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-09-22 05:02:14 +02:00
delvani
aeee4f5ea7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-09-22 05:02:12 +02:00
大王叫我来巡山
d0eb7465c9 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-09-22 05:02:10 +02:00
R S
e248b7e288 Translated using Weblate (Japanese)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: R S <weblate.0ihly@passmail.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
Translation: FreeTube/Translations
2025-09-22 05:02:08 +02:00
absidue
c8bc446197 Handle lockup view videos without a view count (#8066) 2025-09-21 21:59:15 -04:00
Vaipex
4655d0e534 Add proxy login support (#7996)
* add proxy support

* Update src/main/index.js

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-09-22 09:13:42 +08:00
absidue
8ff066f2eb Migrate the History view to the composition API (#8064) 2025-09-22 09:12:36 +08:00
absidue
57aa854861 Fix player button hiding (#8065) 2025-09-22 09:08:01 +08:00
Telaneo
57c6d1fd12 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-09-22 01:02:03 +02:00
unsigned char
0763a065ac Translated using Weblate (Indonesian)
Currently translated at 99.5% (972 of 976 strings)

Co-authored-by: unsigned char <danielsteventan24@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/id/
Translation: FreeTube/Translations
2025-09-21 17:02:05 +00:00
Caetano
d4117344e4 Fix playback rate reset when video ends (#7718)
* Prevent plaback rate reset when video ends

* remove redundant if statement

* remove redundant code

* remove session storage
2025-09-21 16:25:27 +02:00
absidue
8aff4e297b Skip Electron binary download in CI as we do not run it (#8063) 2025-09-21 13:29:52 +00:00
Caetano
7251ec7d42 Feat: Display player overlay controls on keyboard interaction (#7757)
* Shows video progress indicator when interacting

* call showOverlayControls under showValueChange calls

* call showOverlayControls in showValueChange

* Show overlay on more shortcuts

* Show overlay on more shortcuts

* Move function implementation and code spacing

* Remove overlay control from fullscreen

* use nextTick to show overlay controls

* Change import order

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* Create named function for eventListeners

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-09-21 12:29:50 +02:00
Ghost of Sparta
9d8e3d8633 Translated using Weblate (Hungarian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-09-21 08:02:05 +00:00
Fjuro
af9efe9477 Translated using Weblate (Czech)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-09-20 22:02:07 +00:00
Priit Jõerüüt
239d51c7ad Translated using Weblate (Estonian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-09-20 22:02:05 +00:00
Mickaël Binos
e6a7303c82 Translated using Weblate (French)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-09-20 20:02:06 +02:00
dependabot[bot]
2a3d40286e Bump electron from 37.4.0 to 38.1.0 (#8025)
* Bump electron from 37.4.0 to 38.1.0

Bumps [electron](https://github.com/electron/electron) from 37.4.0 to 38.1.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.4.0...v38.1.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 38.1.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Change macOS supported version from 11 to 12

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-09-20 17:02:50 +02:00
Philip Goto
84067599df Translated using Weblate (Dutch)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Philip Goto <philip.goto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
Translation: FreeTube/Translations
2025-09-20 13:02:11 +00:00
delvani
8b89782fae Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-09-20 13:02:09 +00:00
Ettore Atalan
422fe6489c Translated using Weblate (German)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-09-20 13:02:07 +00:00
Florent
d6a195e330 Translated using Weblate (Breton)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-09-20 10:02:05 +02:00
Massimo Pissarello
ff089a6762 Translated using Weblate (Italian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-09-20 06:02:06 +00:00
大王叫我来巡山
24adbda5f4 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-09-20 06:02:05 +02:00
absidue
f0dd8ceba2 Support exporting single playlists as a list of video URLs (#8054) 2025-09-20 08:50:23 +08:00
Christopher Rinaldi
c53cd1ee4c Translated using Weblate (Indonesian)
Currently translated at 99.2% (968 of 975 strings)

Co-authored-by: Christopher Rinaldi <christopher.rinaldi.mba@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/id/
Translation: FreeTube/Translations
2025-09-19 10:02:05 +02:00
absidue
8a1e957079 Migrate the Playlist view to the composition API (#8029)
* Migrate the Playlist view to the composition API

* Fix window title
2025-09-19 10:49:17 +08:00
Sérgio Marques
8444166cd2 Translated using Weblate (Portuguese)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Sérgio Marques <smarquespt@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
Translation: FreeTube/Translations
2025-09-18 23:02:04 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
99577f32fc Move loop to overflow (#8049) 2025-09-18 18:02:12 -04:00
delvani
861aede95d Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-09-16 23:02:05 +00:00
absidue
f5ac1a3a0c Update shaka-player to 4.16.x (#7919)
* Update shaka-player to 4.15.x

* Move some items into the overflow menu on all player sizes

* Fix mouse wheel actions

* Update shaka-player to 4.16.x

* Re-order entries in the overflow menu on mobile

* Fix player icons

* Optimise audio track handling

* Upstream prefers-reduced-transparency for shaka-player's UI elements

* Update shaka-player to 4.16.1
2025-09-16 16:57:57 -04:00
delvani
5edf68019b Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-09-16 20:01:59 +02:00
delvani
d6a73822d0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-09-16 18:02:09 +02:00
Fernando
4b7208430b [Feature]: Hide videos immediately when marking as watched (#7866)
* Add computed properties for history cache and filtered video list

* Refactor activeVideoList to use filteredVideoList and exclude watched videos from videoList

* Creating a computed property to de-couple filteredVideoList from the store getters (SRP)

* Transferred filtering logic to SubscriptionsTabUi component

* Fix variable name

* Don't try to filter videos on the posts tab

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-09-16 09:57:41 +02:00
dependabot[bot]
ad1ca7d5ca Bump actions/setup-node from 4 to 5 (#8000)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 5.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-16 07:02:55 +02:00
dependabot[bot]
1b2c901191 Bump mikefarah/yq from 4.47.1 to 4.47.2 (#8039)
Bumps [mikefarah/yq](https://github.com/mikefarah/yq) from 4.47.1 to 4.47.2.
- [Release notes](https://github.com/mikefarah/yq/releases)
- [Changelog](https://github.com/mikefarah/yq/blob/master/release_notes.txt)
- [Commits](https://github.com/mikefarah/yq/compare/v4.47.1...v4.47.2)

---
updated-dependencies:
- dependency-name: mikefarah/yq
  dependency-version: 4.47.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-15 17:45:41 -04:00
dependabot[bot]
5a370c860b Bump marked from 16.2.1 to 16.3.0 (#8040)
Bumps [marked](https://github.com/markedjs/marked) from 16.2.1 to 16.3.0.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.2.1...v16.3.0)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-15 17:45:22 -04:00
dependabot[bot]
e79dd8a670 Bump eslint-plugin-jsdoc from 57.0.3 to 57.0.8 in the eslint group (#8038)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 57.0.3 to 57.0.8
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v57.0.3...v57.0.8)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 57.0.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-15 17:45:02 -04:00
kokomo123
10163fa649 Adjust homebrew link to maintainers tap (#8041)
* Adjust homebrew link to maintainers tap instead

* Add back intel link, and separate intel and apple silicon download links.

* Remove Deprecated Intel Tap per maintainer feedback
2025-09-15 23:26:44 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
2800189aeb Remove n argument in sed (#8033)
* remove n argument in sed

* Update .github/workflows/updateSite.yml

Co-authored-by: PikachuEXE <git@pikachuexe.net>

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-09-14 18:24:52 -04:00
pantosha
f0a1b0dbcb Translated using Weblate (Russian)
Currently translated at 99.5% (971 of 975 strings)

Co-authored-by: pantosha <p.a.n.tosha@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-09-14 21:02:06 +02:00
dependabot[bot]
6b6b34ce87 Bump eslint-plugin-jsdoc from 56.1.2 to 57.0.3 in the eslint group (#8030)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 56.1.2 to 57.0.3
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v56.1.2...v57.0.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 57.0.3
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-14 11:51:08 +02:00
dependabot[bot]
f1830d0e07 Bump youtubei.js from 15.1.0 to 15.1.1 (#8031)
Bumps [youtubei.js](https://github.com/LuanRT/YouTube.js) from 15.1.0 to 15.1.1.
- [Release notes](https://github.com/LuanRT/YouTube.js/releases)
- [Changelog](https://github.com/LuanRT/YouTube.js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/LuanRT/YouTube.js/compare/v15.1.0...v15.1.1)

---
updated-dependencies:
- dependency-name: youtubei.js
  dependency-version: 15.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-14 04:53:59 +02:00
Piotr Strebski
4d628f1982 Translated using Weblate (Polish)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Piotr Strebski <strebski@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-09-13 16:02:03 +02:00
dependabot[bot]
da8499153e Bump eslint-plugin-jsdoc from 55.0.0 to 56.1.2 in the eslint group (#8020)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 55.0.0 to 56.1.2
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v55.0.0...v56.1.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 56.1.2
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 18:15:03 +02:00
dependabot[bot]
cfa76fe7cd Bump lefthook from 1.12.4 to 1.13.0 (#8026)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.12.4 to 1.13.0.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.12.4...v1.13.0)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.13.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 09:03:42 +08:00
dependabot[bot]
37bb34afdc Bump swiper from 11.2.10 to 12.0.1 (#8024)
Bumps [swiper](https://github.com/nolimits4web/Swiper) from 11.2.10 to 12.0.1.
- [Release notes](https://github.com/nolimits4web/Swiper/releases)
- [Changelog](https://github.com/nolimits4web/swiper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nolimits4web/Swiper/compare/v11.2.10...v12.0.1)

---
updated-dependencies:
- dependency-name: swiper
  dependency-version: 12.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 09:03:36 +08:00
dependabot[bot]
74c4f63ead Bump globals from 16.3.0 to 16.4.0 (#8023)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.3.0 to 16.4.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.3.0...v16.4.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 09:03:16 +08:00
efb4f5ff-1298-471a-8973-3d47447115dc
d1cdaa44bd Bump package version from 0.23.8 to 0.23.9 (#8027) 2025-09-11 19:24:56 -04:00
dependabot[bot]
ffb4e33ed2 Bump youtubei.js from 15.0.1 to 15.1.0 (#8022)
Bumps [youtubei.js](https://github.com/LuanRT/YouTube.js) from 15.0.1 to 15.1.0.
- [Release notes](https://github.com/LuanRT/YouTube.js/releases)
- [Changelog](https://github.com/LuanRT/YouTube.js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/LuanRT/YouTube.js/compare/v15.0.1...v15.1.0)

---
updated-dependencies:
- dependency-name: youtubei.js
  dependency-version: 15.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 01:04:22 +02:00
Preston
0256077d8b Add Workflow to Automate Updating the Website Version Number (#7989)
* Create updateSite.yaml

* Rename updateSite.yaml to updateSite.yml

* Update updateSite.yml

* Update updateSite.yml

* Update updateSite.yml

* Update updateSite.yml

* Update updateSite.yml
2025-09-11 21:33:48 +02:00
Fjuro
b77d67981b Translated using Weblate (Czech)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-09-11 11:02:04 +00:00
Philip Goto
71eba13132 Translated using Weblate (Dutch)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Philip Goto <philip.goto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
Translation: FreeTube/Translations
2025-09-09 15:16:50 +00:00
Sveinn í Felli
8a22797814 Translated using Weblate (Icelandic)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-09-09 15:02:09 +02:00
dependabot[bot]
55f4bc26e7 Bump sass from 1.91.0 to 1.92.1 (#8003)
Bumps [sass](https://github.com/sass/dart-sass) from 1.91.0 to 1.92.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.91.0...1.92.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.92.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-09 08:17:36 +02:00
dependabot[bot]
716f2da24e Bump the eslint group with 4 updates (#7998)
Bumps the eslint group with 4 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint), [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn).


Updates `@eslint/js` from 9.34.0 to 9.35.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.35.0/packages/js)

Updates `eslint` from 9.34.0 to 9.35.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.34.0...v9.35.0)

Updates `eslint-plugin-jsdoc` from 54.1.1 to 54.5.0
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v54.1.1...v54.5.0)

Updates `eslint-plugin-unicorn` from 60.0.0 to 61.0.1
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v60.0.0...v61.0.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.35.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.35.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 54.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-unicorn
  dependency-version: 61.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-09 06:34:16 +08:00
William Spencer
8b43fe2c75 Translated using Weblate (Russian)
Currently translated at 99.2% (968 of 975 strings)

Co-authored-by: William Spencer <dzutstsati@yahoo.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
Translation: FreeTube/Translations
2025-09-08 19:02:06 +00:00
dependabot[bot]
d2c6d38249 Bump lefthook from 1.12.3 to 1.12.4 (#7999)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.12.3 to 1.12.4.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.12.3...v1.12.4)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.12.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 20:27:19 +02:00
dependabot[bot]
75de220ae6 Bump @babel/core from 7.28.3 to 7.28.4 in the babel group (#8002)
Bumps the babel group with 1 update: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core).


Updates `@babel/core` from 7.28.3 to 7.28.4
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.4/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.28.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 17:40:59 +00:00
dependabot[bot]
4177b9649d Bump stylelint from 16.23.1 to 16.24.0 in the stylelint group (#7997)
Bumps the stylelint group with 1 update: [stylelint](https://github.com/stylelint/stylelint).


Updates `stylelint` from 16.23.1 to 16.24.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.23.1...16.24.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.24.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 19:23:14 +02:00
dependabot[bot]
1fc2d5f18e Bump actions/stale from 9 to 10 (#8001)
Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v9...v10)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '10'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 19:21:14 +02:00
dependabot[bot]
963e954960 Bump actions/github-script from 7 to 8 (#8004)
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 19:20:32 +02:00
dependabot[bot]
5f748d4fcf Bump actions/labeler from 5 to 6 (#8006)
Bumps [actions/labeler](https://github.com/actions/labeler) from 5 to 6.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 16:10:18 +00:00
NEXI
4c62a6c474 Translated using Weblate (Serbian)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: NEXI <nexiphotographer@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
Translation: FreeTube/Translations
2025-09-08 17:02:18 +02:00
Deleted User
cce821ed34 Translated using Weblate (Spanish)
Currently translated at 99.4% (970 of 975 strings)

Co-authored-by: Deleted User <noreply+48943@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-09-05 20:02:00 +02:00
Dream X
bfbb832d3f Translated using Weblate (Spanish)
Currently translated at 99.4% (970 of 975 strings)

Co-authored-by: Dream X <nodem49316@daupload.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-09-05 20:01:58 +02:00
dependabot[bot]
84932381ee Bump electron-builder from 26.0.19 to 26.0.20 (#7976)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.0.19 to 26.0.20.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v26.0.20/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.0.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-02 08:02:53 +02:00
dependabot[bot]
9fde6e6d49 Bump sass from 1.90.0 to 1.91.0 (#7977)
Bumps [sass](https://github.com/sass/dart-sass) from 1.90.0 to 1.91.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.90.0...1.91.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.91.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-02 10:37:53 +08:00
dependabot[bot]
6327918a7a Bump electron from 37.3.1 to 37.4.0 (#7975)
---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-02 10:37:19 +08:00
dependabot[bot]
8a8f1d6d4a Bump marked from 16.2.0 to 16.2.1 (#7973)
Bumps [marked](https://github.com/markedjs/marked) from 16.2.0 to 16.2.1.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.2.0...v16.2.1)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-01 19:07:57 +02:00
absidue
a66c6bfcd2 Skip unnecessary shorts subscription cache writes (#7962)
* Skip unnecessary shorts subscription cache writes

* Reduce nesting in the code
2025-09-01 15:24:09 +00:00
absidue
0eae579285 Transform in-app URLs into YouTube URLs when dragging them (#7970) 2025-09-01 13:51:17 +00:00
absidue
0fb29ec468 Hide more Invidious specific functionality when backend fallback is disabled (#7964) 2025-09-01 15:31:17 +02:00
absidue
e7350b6904 Use <details> and <summary> elements for the chapters (#7959) 2025-09-01 15:19:51 +02:00
github-actions[bot]
1326fec035 Compressed Images (#7968)
Co-authored-by: PrestonN <9736046+PrestonN@users.noreply.github.com>
2025-08-31 11:25:44 +00:00
absidue
61463d40bd Fix FtSelect validation warning in the player settings (#7955) 2025-08-29 15:25:50 +02:00
ozrendev
ab4f3326e1 add isHearted span to child comment (#7926) 2025-08-28 07:56:44 +02:00
Rhoslyn Prys
fe23c58b89 Translated using Weblate (Welsh)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
Translation: FreeTube/Translations
2025-08-26 13:02:29 +02:00
Eder Etxebarria Rojo
44044aeb07 Translated using Weblate (Basque)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-08-26 13:02:27 +02:00
dependabot[bot]
b9dfac3cfe Bump the eslint group with 3 updates (#7936)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `@eslint/js` from 9.33.0 to 9.34.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.34.0/packages/js)

Updates `eslint` from 9.33.0 to 9.34.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.33.0...v9.34.0)

Updates `eslint-plugin-jsdoc` from 52.0.4 to 54.1.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v52.0.4...v54.1.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.34.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.34.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 54.1.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 01:51:35 +00:00
dependabot[bot]
5561508a50 Bump lefthook from 1.12.2 to 1.12.3 (#7928)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.12.2 to 1.12.3.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.12.2...v1.12.3)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.12.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 00:51:25 +00:00
dependabot[bot]
bb15c7e1a5 Bump electron-context-menu from 4.1.0 to 4.1.1 (#7929)
Bumps [electron-context-menu](https://github.com/sindresorhus/electron-context-menu) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/sindresorhus/electron-context-menu/releases)
- [Commits](https://github.com/sindresorhus/electron-context-menu/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: electron-context-menu
  dependency-version: 4.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 00:08:47 +00:00
dependabot[bot]
a26446bc97 Bump electron from 37.2.6 to 37.3.1 (#7934)
Bumps [electron](https://github.com/electron/electron) from 37.2.6 to 37.3.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.2.6...v37.3.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.3.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 06:34:09 +08:00
dependabot[bot]
fa56ed1f18 Bump @double-great/stylelint-a11y in the stylelint group (#7937)
Bumps the stylelint group with 1 update: [@double-great/stylelint-a11y](https://github.com/double-great/stylelint-a11y).


Updates `@double-great/stylelint-a11y` from 3.0.4 to 3.4.0
- [Release notes](https://github.com/double-great/stylelint-a11y/releases)
- [Changelog](https://github.com/double-great/stylelint-a11y/blob/main/CHANGELOG.md)
- [Commits](https://github.com/double-great/stylelint-a11y/compare/v3.0.4...v3.4.0)

---
updated-dependencies:
- dependency-name: "@double-great/stylelint-a11y"
  dependency-version: 3.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-25 19:18:21 +00:00
dependabot[bot]
361d7bff54 Bump mini-css-extract-plugin from 2.9.3 to 2.9.4 (#7930)
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 2.9.3 to 2.9.4.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v2.9.3...v2.9.4)

---
updated-dependencies:
- dependency-name: mini-css-extract-plugin
  dependency-version: 2.9.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 01:01:07 +08:00
dependabot[bot]
3b877ebfb0 Bump marked from 16.1.2 to 16.2.0 (#7931)
Bumps [marked](https://github.com/markedjs/marked) from 16.1.2 to 16.2.0.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.1.2...v16.2.0)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 01:00:39 +08:00
dependabot[bot]
1ec36a039e Bump copy-webpack-plugin from 13.0.0 to 13.0.1 (#7932)
Bumps [copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin) from 13.0.0 to 13.0.1.
- [Release notes](https://github.com/webpack-contrib/copy-webpack-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/copy-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v13.0.0...v13.0.1)

---
updated-dependencies:
- dependency-name: copy-webpack-plugin
  dependency-version: 13.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 01:00:11 +08:00
dependabot[bot]
2d7ea19d17 Bump webpack from 5.101.0 to 5.101.3 (#7938)
Bumps [webpack](https://github.com/webpack/webpack) from 5.101.0 to 5.101.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.101.0...v5.101.3)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.101.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 01:00:01 +08:00
dependabot[bot]
68232414c7 Bump html-webpack-plugin from 5.6.3 to 5.6.4 (#7935)
Bumps [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin) from 5.6.3 to 5.6.4.
- [Release notes](https://github.com/jantimon/html-webpack-plugin/releases)
- [Changelog](https://github.com/jantimon/html-webpack-plugin/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jantimon/html-webpack-plugin/compare/v5.6.3...v5.6.4)

---
updated-dependencies:
- dependency-name: html-webpack-plugin
  dependency-version: 5.6.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 00:59:21 +08:00
dependabot[bot]
14d051adf5 Bump the babel group with 2 updates (#7933)
Bumps the babel group with 2 updates: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) and [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env).


Updates `@babel/core` from 7.28.0 to 7.28.3
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.3/packages/babel-core)

Updates `@babel/preset-env` from 7.28.0 to 7.28.3
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.3/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.28.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
- dependency-name: "@babel/preset-env"
  dependency-version: 7.28.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-26 00:59:13 +08:00
dependabot[bot]
d20cf6a64d Bump actions/checkout from 4 to 5 (#7927)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-25 18:09:26 +02:00
Florent
40a2f14665 Translated using Weblate (Breton)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-08-25 18:02:12 +02:00
Milo Ivir
865a4a2ab0 Translated using Weblate (Croatian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Milo Ivir <mail@milotype.de>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
Translation: FreeTube/Translations
2025-08-25 14:03:14 +02:00
Nick Wick
5e58868bbf Translated using Weblate (Swedish)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Nick Wick <NickWick@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
Translation: FreeTube/Translations
2025-08-25 11:02:13 +02:00
Jeff Huang
def605745a Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-08-25 03:02:14 +00:00
Caetano
2ef9d1adc2 Show more information on long playlists. (#7804)
* Show + for long playlists

* Add ~ for shorts

* Refactor duration and isApproximate calculation

* Remove + from local playlists

* Fix code spacing

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* Fix code spacing

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-08-24 23:54:34 +00:00
Mickaël Binos
3a8e0fadc0 Translated using Weblate (French)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-08-24 23:02:07 +00:00
PikachuEXE
a5c4c0cc99 Refactor/cleanup tray related code after PR merged (#7856)
* $ Refactor/cleanup tray related code after PR merged

* $ Guard tray related code behind process.platform check
2025-08-24 15:17:58 +00:00
Priit Jõerüüt
412b4f979f Translated using Weblate (Estonian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-08-24 11:01:54 +02:00
Massimo Pissarello
46e8bded68 Translated using Weblate (Italian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-08-24 09:02:18 +02:00
Gideon Wentink
5d89f0c52e Translated using Weblate (Afrikaans)
Currently translated at 83.7% (818 of 977 strings)

Co-authored-by: Gideon Wentink <gjwentink@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/af/
Translation: FreeTube/Translations
2025-08-24 00:04:11 +00:00
autumnrain
44b10a5317 Translated using Weblate (Latvian)
Currently translated at 57.1% (558 of 977 strings)

Co-authored-by: autumnrain <autumnrainautumnrain@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lv/
Translation: FreeTube/Translations
2025-08-24 00:04:09 +00:00
g
a8348e735f Translated using Weblate (Lithuanian)
Currently translated at 55.0% (538 of 977 strings)

Co-authored-by: g <g@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lt/
Translation: FreeTube/Translations
2025-08-24 00:04:08 +00:00
Sandyran
e20b4d8ac3 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 55.9% (547 of 977 strings)

Co-authored-by: Sandyran <sandyran@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nn/
Translation: FreeTube/Translations
2025-08-24 00:04:06 +00:00
David Rebolo Magariños
8a8f784c47 Translated using Weblate (Galician)
Currently translated at 56.4% (552 of 977 strings)

Co-authored-by: David Rebolo Magariños <drgaga345@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gl/
Translation: FreeTube/Translations
2025-08-24 00:04:04 +00:00
VenusGirl
e26f5f7aeb Translated using Weblate (Korean)
Currently translated at 59.6% (583 of 977 strings)

Co-authored-by: VenusGirl <VenusGirl@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ko/
Translation: FreeTube/Translations
2025-08-24 00:04:02 +00:00
Maja Košir Habjan
b4594591d4 Translated using Weblate (Slovenian)
Currently translated at 45.2% (442 of 977 strings)

Co-authored-by: Maja Košir Habjan <majakh@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sl/
Translation: FreeTube/Translations
2025-08-24 00:04:01 +00:00
Michael Millet
17d51027ee Translated using Weblate (Danish)
Currently translated at 98.9% (967 of 977 strings)

Co-authored-by: Michael Millet <mikevlet@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
Translation: FreeTube/Translations
2025-08-24 00:04:00 +00:00
JasonFlattire
f6128a46a8 Translated using Weblate (Kurdish)
Currently translated at 36.4% (356 of 977 strings)

Co-authored-by: JasonFlattire <mr.annonymous4645@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
Translation: FreeTube/Translations
2025-08-24 00:03:58 +00:00
Eloi
9ade85e542 Translated using Weblate (Catalan)
Currently translated at 38.8% (380 of 977 strings)

Co-authored-by: Eloi <lordwilmore@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ca/
Translation: FreeTube/Translations
2025-08-24 00:03:57 +00:00
zmni
69964fd541 Translated using Weblate (Indonesian)
Currently translated at 97.6% (954 of 977 strings)

Co-authored-by: zmni <zmni@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/id/
Translation: FreeTube/Translations
2025-08-24 00:03:56 +00:00
Stratos Kostidis
f9e78be4e3 Translated using Weblate (Greek)
Currently translated at 98.8% (966 of 977 strings)

Co-authored-by: Stratos Kostidis <petros8280@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
Translation: FreeTube/Translations
2025-08-24 00:03:54 +00:00
Jakub
8dcf1c3c6e Translated using Weblate (Slovak)
Currently translated at 61.5% (601 of 977 strings)

Co-authored-by: Jakub <ja@jakubdobos.eu>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
Translation: FreeTube/Translations
2025-08-24 00:03:53 +00:00
Frijolito Bean
44ac6781f8 Translated using Weblate (Spanish (Mexico))
Currently translated at 61.3% (599 of 977 strings)

Co-authored-by: Frijolito Bean <mydjpp@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
Translation: FreeTube/Translations
2025-08-24 00:03:51 +00:00
Sérgio Marques
ce89558354 Translated using Weblate (Portuguese (Portugal))
Currently translated at 98.0% (958 of 977 strings)

Co-authored-by: Sérgio Marques <smarquespt@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_PT/
Translation: FreeTube/Translations
2025-08-24 00:03:50 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
79235882f6 set backendFallback to false (#7903) 2025-08-24 06:08:06 +08:00
efb4f5ff-1298-471a-8973-3d47447115dc
70512bd687 fix GitHub releases wording (#7901) 2025-08-24 06:07:39 +08:00
Telesphoreo
c8d6111419 Translated using Weblate (Arabic)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Telesphoreo <shadedmisdeeds@proton.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
Translation: FreeTube/Translations
2025-08-23 13:02:02 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
d624a03d0c Bump package version from 0.23.7 to 0.23.8 (#7889) 2025-08-23 06:06:56 -04:00
absidue
7313126229 Wait for pre-roll ads to finish in /player request (#7887) 2025-08-22 18:38:51 +00:00
Sveinn í Felli
d6394f05c7 Translated using Weblate (Icelandic)
Currently translated at 99.8% (976 of 977 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-08-22 14:01:58 +02:00
Alexander Gabilondo
b641b39796 Translated using Weblate (Basque)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Alexander Gabilondo <alexgabi@openmailbox.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-08-21 21:02:07 +00:00
Piotr Strebski
43dd75816b Translated using Weblate (Polish)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Piotr Strebski <strebski@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-08-21 19:01:56 +02:00
Code Mage
328997e960 Translated using Weblate (Ukrainian)
Currently translated at 99.5% (973 of 977 strings)

Co-authored-by: Code Mage <kuzminmaksim04082008@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/uk/
Translation: FreeTube/Translations
2025-08-21 00:02:00 +00:00
Telaneo
9e0ba5f323 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-08-20 12:01:53 +00:00
Eder Etxebarria Rojo
e2817e013d Translated using Weblate (Basque)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-08-19 12:02:32 +02:00
KING APPS
9872d53c39 Translated using Weblate (Persian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: KING APPS <kiperking1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fa/
Translation: FreeTube/Translations
2025-08-17 17:02:01 +02:00
absidue
c560b967d5 Fix show added items not working for hide videos from channels (#7854) 2025-08-17 16:29:21 +02:00
absidue
94281bfd06 Respect watch history setting when opening in an external player (#7853) 2025-08-17 16:26:20 +02:00
summoner001
0684f760b2 Translated using Weblate (Hungarian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-08-17 11:01:56 +00:00
R S
b7b84f2e22 Translated using Weblate (Japanese)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: R S <weblate.0ihly@passmail.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
Translation: FreeTube/Translations
2025-08-17 11:01:54 +00:00
Yaron Shahrabani
39d15c08ce Translated using Weblate (Hebrew)
Currently translated at 99.6% (974 of 977 strings)

Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
Translation: FreeTube/Translations
2025-08-17 09:02:09 +00:00
moroasa madalin
b762ef5761 Translated using Weblate (Romanian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: moroasa madalin <medaiulian@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
Translation: FreeTube/Translations
2025-08-17 09:02:08 +00:00
Priit Jõerüüt
2f83a85b23 Translated using Weblate (Estonian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-08-17 09:02:11 +02:00
大王叫我来巡山
d7e52bc5cd Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-08-17 06:02:02 +02:00
Massimo Pissarello
84b9264831 Translated using Weblate (Italian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-08-17 04:02:07 +02:00
Fjuro
8339387a09 Translated using Weblate (Czech)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-08-16 22:02:48 +00:00
delvani
297a345a67 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-08-16 22:02:46 +00:00
absidue
69a083aad1 Migrate FtSelect to the composition API (#7847) 2025-08-17 04:36:43 +08:00
Rusi Dimitrov
22f0affd57 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Rusi Dimitrov <astral_86@mail.bg>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
Translation: FreeTube/Translations
2025-08-16 17:02:10 +00:00
Markus Gaugg
f9ee632993 Translated using Weblate (German)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Markus Gaugg <gaugg@gmx.at>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-08-16 17:02:08 +00:00
Ghost of Sparta
448d795966 Translated using Weblate (Hungarian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-08-16 15:01:58 +00:00
Mickaël Binos
25cb97a756 Translated using Weblate (French)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Mickaël Binos <mickaelbinos@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-08-16 15:01:56 +00:00
Devenor
0705a30868 Added hide to tray on minimize option (#6915)
* Added hide to tray support

* Updated yarn.lock

* Reverted dependency additions

* Lint

* Fixed dependency files

* Updated yarn.lock

* Using development yarn.lock file

* Revert yarn.lock changes

* Added support for multiple windows

* Requested changes

* Fix to manageTray calls when opening a link from the web browser

* Added a workaround for Linux and fixed the close submenu option

* Prevent multiple trays in Linux if disabling/enabling the settings option multiple times

* Fixed weird behaviour in some Linux

* Code cleaning

* Code cleaning and changed window.destroy() for window.close()

* Changed tray for menu bar in MacOS setting description, windows are restored maximized if the were maximized before hiding, added same logic as normal windows on ready-to-show event for windows hidden on tray while loading

* Setting for MacOS is now hidden, and fixed FT not closing properly.'

* Added check for MacOS on start, settings check modified for MacOS and Android, fixed behaviour for URL redirection'

* Windows on tray show minimized when disabling the tray

* Resolved merge conflict

* Update static/locales/en-US.yaml

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Update src/renderer/components/general-settings/general-settings.vue

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Update es.yaml

* Workaround for Electron hide method bug in some Linux distros

* Reworked the Linux workaround for calling hide() inside the minimize handler

---------

Co-authored-by: Devenor <@>
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-08-16 14:36:20 +02:00
absidue
cf41551f63 Add support for parsing premiere video LockupViews (#7848) 2025-08-15 15:02:16 +08:00
efb4f5ff-1298-471a-8973-3d47447115dc
313224a7d4 Bump package version from 0.23.6 to 0.23.7 (#7849) 2025-08-15 08:00:53 +02:00
absidue
ece0cd9aaf Make MWEB return the original audio track (#7846) 2025-08-15 02:03:20 +00:00
absidue
c35225ea4c Update playlist lastUpdatedAt in same step as adding/removing videos (#7845) 2025-08-13 12:20:46 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
cf3f493153 Set checkForBlogPosts to false (#7840)
* set checkForBlogPosts to false

* Revert "set checkForBlogPosts to false"

This reverts commit ae9bda3c4c.

* set real checkForBlogPosts to false
2025-08-12 01:17:26 +00:00
absidue
a6fb5d8895 Fix subtitles being in the top right corner (#7841) 2025-08-12 08:09:19 +08:00
Nick Wick
f37a945b1c Translated using Weblate (Swedish)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Nick Wick <NickWick@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
Translation: FreeTube/Translations
2025-08-11 22:01:57 +02:00
dependabot[bot]
2c87ccd331 Bump electron from 37.2.5 to 37.2.6 (#7833)
Bumps [electron](https://github.com/electron/electron) from 37.2.5 to 37.2.6.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.2.5...v37.2.6)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.2.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-11 16:59:56 +02:00
dependabot[bot]
8a65ab6428 Bump sass from 1.89.2 to 1.90.0 (#7834)
Bumps [sass](https://github.com/sass/dart-sass) from 1.89.2 to 1.90.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.2...1.90.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.90.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-11 16:52:15 +02:00
dependabot[bot]
79f5541795 Bump the eslint group with 3 updates (#7836)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `@eslint/js` from 9.32.0 to 9.33.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.33.0/packages/js)

Updates `eslint` from 9.32.0 to 9.33.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.32.0...v9.33.0)

Updates `eslint-plugin-jsdoc` from 52.0.2 to 52.0.4
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v52.0.2...v52.0.4)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 52.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-11 16:50:24 +02:00
dependabot[bot]
6a6f1751e0 Bump shaka-player from 4.14.25 to 4.14.26 (#7838)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.25 to 4.14.26.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.26/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.25...v4.14.26)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-11 16:39:30 +02:00
dependabot[bot]
f9ff7249a6 Bump mini-css-extract-plugin from 2.9.2 to 2.9.3 (#7839)
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 2.9.2 to 2.9.3.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v2.9.2...v2.9.3)

---
updated-dependencies:
- dependency-name: mini-css-extract-plugin
  dependency-version: 2.9.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-11 16:38:46 +02:00
Eder Etxebarria Rojo
d170554710 Translated using Weblate (Basque)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-08-11 12:02:05 +02:00
NEXI
8a2da294fc Translated using Weblate (Serbian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: NEXI <nexiphotographer@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
Translation: FreeTube/Translations
2025-08-11 00:01:59 +00:00
absidue
46b213016e Fix selecting a new quick bookmark playlist (#7803) 2025-08-10 19:10:36 -04:00
absidue
ca3a408abc Migrate DistractionSettings to the composition API (#7807) 2025-08-10 19:09:24 -04:00
absidue
8358de2daa Use Array#find directly when parsing the chapters (#7808) 2025-08-10 19:07:19 -04:00
summoner001
e99b4b4749 Translated using Weblate (Hungarian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-08-10 15:02:10 +00:00
Ghost of Sparta
3710b432a2 Translated using Weblate (Hungarian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-08-09 15:07:14 +02:00
Milo Ivir
b533536d58 Translated using Weblate (Croatian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Milo Ivir <mail@milotype.de>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
Translation: FreeTube/Translations
2025-08-09 12:01:52 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
1e701e4c1f change iina name to IINA (#7773) 2025-08-09 00:47:52 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
c50f00aefb Remove Export Playlists For Older FreeTube Versions (#7195)
* Remove Export Playlists For Older FreeTube Versions

* fix lint

* cleanup leftover from exportPlaylistsForOlderVersions()

* remove import FtToggleSwitch

* add back comment

* revert removing all locales to prevent conflicts

* remove FtToggleSwitch import

Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-08-09 00:45:33 +00:00
Caetano
83ba290bc6 Enhancement: Add fast forward and rewind pop up to video player (#7729)
* Add fast forward and rewind pop up

* modify vue template and add functionality to invert icon order

* Fix linting error

* rename function parameter and document it

* Show pop up for small/large rewinds/fast-forwards only
2025-08-09 00:27:07 +00:00
Caetano
553a1c7e38 Fix "more" button from sidenav not closing (#7725)
* Fix 'more' button not closing

* inline if statement
2025-08-08 23:52:02 +00:00
absidue
5472a1de99 Fix handleSyncSubscriptionCache using the SYNC_PLAYLISTS IPC channel (#7756) 2025-08-08 23:01:54 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
c6761e673e Change Close button color to white (#7752) 2025-08-08 22:49:04 +00:00
absidue
1f4b91cb42 Migrate PlayerSettings to the composition API (#7766) 2025-08-08 22:22:03 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
a67140e721 Bump package version from 0.23.5 to 0.23.6 (#7794) 2025-08-08 19:45:06 +00:00
absidue
1139556707 Add shorts player parameters to help with 403s (#7763) 2025-08-08 10:32:14 -04:00
Telaneo
d8c49c2926 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-08-08 09:02:19 +00:00
dependabot[bot]
2f9e24398a Bump the stylelint group with 2 updates (#7779)
* Bump the stylelint group with 2 updates

Bumps the stylelint group with 2 updates: [stylelint](https://github.com/stylelint/stylelint) and [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard).


Updates `stylelint` from 16.22.0 to 16.23.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.22.0...16.23.0)

Updates `stylelint-config-standard` from 38.0.0 to 39.0.0
- [Release notes](https://github.com/stylelint/stylelint-config-standard/releases)
- [Changelog](https://github.com/stylelint/stylelint-config-standard/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint-config-standard/compare/38.0.0...39.0.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.23.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
- dependency-name: stylelint-config-standard
  dependency-version: 39.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>

* * Replace word-wrap with overflow-wrap

https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-wrap

* * Replace grid-gap with gap

https://stackoverflow.com/questions/49970635/property-grid-gap-doesnt-exist-in-css

* * Disable stylelint rule no-invalid-position-declaration for a SCSS mixin line reported

* * Replace clip with clip-path for hiding elements

https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path
https://developer.mozilla.org/en-US/docs/Web/CSS/clip

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-08-07 23:13:47 +02:00
dependabot[bot]
bfb8ad2f27 Bump tmp from 0.2.1 to 0.2.4 (#7790)
Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.1 to 0.2.4.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.1...v0.2.4)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-07 08:09:04 +08:00
Purple Power
151f1a64fd Translated using Weblate (Turkish)
Currently translated at 99.5% (974 of 978 strings)

Co-authored-by: Purple Power <purplepowerroblox@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
Translation: FreeTube/Translations
2025-08-05 19:02:22 +00:00
delvani
9cf4833594 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-08-05 04:02:13 +00:00
dependabot[bot]
c9d6276940 Bump electron from 37.2.4 to 37.2.5 (#7777)
Bumps [electron](https://github.com/electron/electron) from 37.2.4 to 37.2.5.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.2.4...v37.2.5)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.2.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 17:41:22 +02:00
dependabot[bot]
3a05f22123 Bump the eslint group with 2 updates (#7778)
Bumps the eslint group with 2 updates: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue).


Updates `eslint-plugin-jsdoc` from 52.0.0 to 52.0.2
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v52.0.0...v52.0.2)

Updates `eslint-plugin-vue` from 10.3.0 to 10.4.0
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Changelog](https://github.com/vuejs/eslint-plugin-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v10.3.0...v10.4.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 52.0.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-vue
  dependency-version: 10.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 17:38:54 +02:00
dependabot[bot]
550b702134 Bump webpack from 5.100.2 to 5.101.0 (#7774)
Bumps [webpack](https://github.com/webpack/webpack) from 5.100.2 to 5.101.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.100.2...v5.101.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.101.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 17:26:40 +02:00
dependabot[bot]
11b426b0f9 Bump marked from 16.1.1 to 16.1.2 (#7776)
Bumps [marked](https://github.com/markedjs/marked) from 16.1.1 to 16.1.2.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.1.1...v16.1.2)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 17:26:22 +02:00
Nick Wick
2070dd9916 Translated using Weblate (Swedish)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Nick Wick <NickWick@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
Translation: FreeTube/Translations
2025-08-04 08:02:24 +00:00
absidue
b57095d6ea Hide the Electron specific -electron-corner-smoothing CSS rule (#7769) 2025-08-03 22:30:08 -04:00
moroasa madalin
495063b926 Translated using Weblate (Romanian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: moroasa madalin <medaiulian@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
Translation: FreeTube/Translations
2025-08-04 00:02:44 +02:00
moroasa madalin
bd391c774f Translated using Weblate (Romanian)
Currently translated at 99.4% (973 of 978 strings)

Co-authored-by: moroasa madalin <medaiulian@tutanota.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
Translation: FreeTube/Translations
2025-08-03 22:37:45 +02:00
Irene
d66904b8b0 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Irene <irene-193@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-08-03 22:31:17 +02:00
ColorfulRhino
d9c6595451 Translated using Weblate (German)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-08-03 15:01:59 +02:00
Massimo Pissarello
2ee910ed29 Translated using Weblate (Italian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-08-03 07:02:20 +02:00
大王叫我来巡山
a83e892237 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-08-03 07:02:18 +02:00
Priit Jõerüüt
ad1e84541e Translated using Weblate (Estonian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-08-02 22:02:43 +00:00
Rusi Dimitrov
ee3511f02f Translated using Weblate (Bulgarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Rusi Dimitrov <astral_86@mail.bg>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
Translation: FreeTube/Translations
2025-08-02 22:02:41 +00:00
summoner001
0ea927c8e9 Translated using Weblate (Hungarian)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-08-02 19:02:23 +00:00
Dragibus Noir
6f7e5cb029 Translated using Weblate (French)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Dragibus Noir <big.confetti700@aleeas.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-08-02 19:02:19 +00:00
Fjuro
871bedcd34 Translated using Weblate (Czech)
Currently translated at 100.0% (978 of 978 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-08-02 17:02:20 +00:00
DontBlameMe99
57c2453401 feat: add option to hide the channel link (#7514)
* feat: add option to hide the channel link

Adds an option to hide the channel link from a video

closes #3193

* fix: Do not move sharing actions when channel actions are hidden

This prevents the sharing actions from being moved to where the profile would be,
once the profile is hidden via the parental controls.

* refactor: only hide channel name/logo

This change makes it so only the channel name/icon get hidden, not the subscribe button itself.
This makes sense because there is a separate setting to achive this behavior, if needed.

* refactor: move toggle to the right

Moves the toggle to the right side (grouping in pairs of two),
instead of three on one side and one on the other side

* refactor: rename to hide uploader

* Update static/locales/en-US.yaml

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Update src/renderer/components/ParentalControlSettings.vue

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* fix: subscribe button under channel text

* fix: linting warnings/indentation

* fix: new linting warnings

---------

Co-authored-by: DontBlameMe <dontblameme@noreply.codeberg.org>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-08-02 16:21:21 +02:00
Thomas Dickson
3d5dae511b Mark video as watched when opening external player from the watch view (#7707)
* feat: when opening in an external player from the watch page, mark video as watched

* fix: show toast when opening video in external player from watch page

* fix: update history when video previously watched

* fix: thumbnail opening external player not updating history

* fix: only show toast if video is not already in history

* fix: remove autosave watched progress check
2025-08-01 14:33:38 +02:00
Caetano
c75af8cb3e Fix suggestion cut off with keyboard selection (#7734) 2025-08-01 14:30:06 +02:00
Jérémy Jeey
79e4e49b76 Translated using Weblate (French)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Jérémy Jeey <jeey+weblate@jeey.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-08-01 01:02:22 +02:00
Caetano
1fc4b1dd41 ensure select value syncs when options load asynchronously (#7704) 2025-07-31 21:03:42 +00:00
dependabot[bot]
d9ccf4b5fc Bump mikefarah/yq from 4.46.1 to 4.47.1 (#7743)
Bumps [mikefarah/yq](https://github.com/mikefarah/yq) from 4.46.1 to 4.47.1.
- [Release notes](https://github.com/mikefarah/yq/releases)
- [Changelog](https://github.com/mikefarah/yq/blob/master/release_notes.txt)
- [Commits](https://github.com/mikefarah/yq/compare/v4.46.1...v4.47.1)

---
updated-dependencies:
- dependency-name: mikefarah/yq
  dependency-version: 4.47.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-29 19:08:40 +00:00
Grzegorz Wójcicki
b7877fb098 Translated using Weblate (Polish)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-07-29 19:06:22 +02:00
Jeff Huang
818760588f Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-07-29 05:06:14 +00:00
NEXI
73a07b9b61 Translated using Weblate (Serbian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: NEXI <nexiphotographer@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
Translation: FreeTube/Translations
2025-07-29 02:03:56 +02:00
dependabot[bot]
0aad6126c0 Bump electron from 37.2.3 to 37.2.4 (#7746)
Bumps [electron](https://github.com/electron/electron) from 37.2.3 to 37.2.4.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.2.3...v37.2.4)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:31:20 +00:00
dependabot[bot]
7e4db95a2d Bump youtubei.js from 15.0.0 to 15.0.1 (#7748)
Bumps [youtubei.js](https://github.com/LuanRT/YouTube.js) from 15.0.0 to 15.0.1.
- [Release notes](https://github.com/LuanRT/YouTube.js/releases)
- [Changelog](https://github.com/LuanRT/YouTube.js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/LuanRT/YouTube.js/compare/v15.0.0...v15.0.1)

---
updated-dependencies:
- dependency-name: youtubei.js
  dependency-version: 15.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 18:55:26 +00:00
dependabot[bot]
12eddba26f Bump the eslint group with 4 updates (#7744)
Bumps the eslint group with 4 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint), [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn).


Updates `@eslint/js` from 9.31.0 to 9.32.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.32.0/packages/js)

Updates `eslint` from 9.31.0 to 9.32.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.31.0...v9.32.0)

Updates `eslint-plugin-jsdoc` from 51.4.1 to 52.0.0
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v51.4.1...v52.0.0)

Updates `eslint-plugin-unicorn` from 59.0.1 to 60.0.0
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v59.0.1...v60.0.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 52.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
- dependency-name: eslint-plugin-unicorn
  dependency-version: 60.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:47:45 +02:00
dependabot[bot]
83f8ccbb6e Bump shaka-player from 4.14.23 to 4.14.25 (#7747)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.23 to 4.14.25.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.25/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.23...v4.14.25)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 18:36:26 +00:00
R S
b89a08da6f Translated using Weblate (Japanese)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: R S <weblate.0ihly@passmail.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
Translation: FreeTube/Translations
2025-07-28 07:02:16 +02:00
PikachuEXE
56046b9b43 Fix scroll to seek/change volume/playback rate changing too fast with touchpad (#6666)
* ! Fix scroll to seek/change volume/playback rate changing too fast with touchpad

* * Only apply scroll throttle when delta value is small (assumed to be from touchpad), update throttle wait 100 > 200ms
2025-07-27 21:44:44 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
00d4695b20 Move General section within the Distraction Free Settings to top (#7719)
* Move General section to top

* fix indent

* add seperate class for side bar title

Co-Authored-By: PikachuEXE <1018543+PikachuEXE@users.noreply.github.com>
Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>

* fix lint

* Revert "fix lint"

This reverts commit b1a7796484.

* Revert "add seperate class for side bar title"

This reverts commit 7519e8af1b.

* Add review suggestions

Co-Authored-By: PikachuEXE <1018543+PikachuEXE@users.noreply.github.com>
Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>

---------

Co-authored-by: PikachuEXE <1018543+PikachuEXE@users.noreply.github.com>
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-07-27 21:39:18 -04:00
PikachuEXE
d1182b58b4 Fix deleted videos appears when another video added to another playlist (#7681)
* $ Rename local data, extra timeout value

* ! Fix deleted videos appears when another video added to another playlist
2025-07-27 21:17:25 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
b7504bb723 Change Settings order (#7722)
* Change settings order

* switch password and sponsorblock
2025-07-27 17:36:57 -04:00
absidue
c2e292ab3e Migrate Subscriptions{Videos,Live,Shorts,Posts} to the composition API (#7717) 2025-07-27 17:35:08 -04:00
ETea
c0f13c8f89 Translated using Weblate (Romanian)
Currently translated at 99.4% (972 of 977 strings)

Co-authored-by: ETea <electrictea@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
Translation: FreeTube/Translations
2025-07-27 18:08:34 +00:00
ColorfulRhino
b6490f3e72 Translated using Weblate (German)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-07-27 12:04:58 +02:00
absidue
58fa9668de Migrate the FtToggleSwitch component to the composition API (#7740) 2025-07-26 19:12:42 -04:00
absidue
9cceef80ee Add missing FontAwesomeIcon imports to <script setup> components (#7739) 2025-07-26 18:34:05 -04:00
The Cats
c1e039b9d7 Translated using Weblate (Spanish)
Currently translated at 99.5% (973 of 977 strings)

Co-authored-by: The Cats <philosoph@danwin1210.de>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-07-26 20:06:40 +00:00
Dragibus Noir
1c22a02683 Translated using Weblate (French)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Dragibus Noir <big.confetti700@aleeas.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-07-26 16:06:54 +02:00
Eder Etxebarria Rojo
346eb409e9 Translated using Weblate (Basque)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-07-26 06:04:54 +00:00
大王叫我来巡山
22832ad811 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-07-26 04:03:33 +00:00
Florent
30736deccb Translated using Weblate (Breton)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-07-25 20:02:27 +00:00
Priit Jõerüüt
e7783a43b8 Translated using Weblate (Estonian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-07-25 20:02:26 +00:00
Massimo Pissarello
bdc2f4c46b Translated using Weblate (Italian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-07-25 20:02:25 +00:00
dhina
29ee2165ea Translated using Weblate (Tamil)
Currently translated at 99.4% (972 of 977 strings)

Co-authored-by: dhina <goodboy.new45@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ta/
Translation: FreeTube/Translations
2025-07-25 20:03:58 +02:00
Fjuro
b9947099e1 Translated using Weblate (Czech)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-07-25 16:04:56 +00:00
Ghost of Sparta
5884611ba9 Translated using Weblate (Hungarian)
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-07-25 16:04:54 +00:00
delvani
c333713ac6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (977 of 977 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-07-25 16:04:53 +00:00
Ian King
1f36288ae1 Next and Previous in Playlist Shortcuts (#7593)
* Implement "Shift+n" and "Shift+p" to skip to next and previous video in playlist, respectively. Update localization and shortcut files accordingly.

* Implement "Next Recommended" using shift+n while autoplay is enabled.

* Generalize skip shortcut naming for playlists and autoplay. Adjust comments and localization text to reflect these changes

* Fix improper line removal

* Lowercase user-facing string

* Extra check on nextRecommendedVideo

* Allow skipping to next recommended video without autoplay being enabled

* Update static/locales/en-US.yaml

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-07-25 13:50:56 +00:00
Caetano
d9235b1151 Fix progress bar not staying in video card (#7727) 2025-07-25 13:48:37 +00:00
Caetano
0a9a09f6f7 Add z-index to infoArea to fix media formats menu cut off (#7726) 2025-07-25 13:47:20 +00:00
Caetano
7a333be603 Use raw query for suggestions (#7721)
* Use raw query for suggestions

* inline trimmed query

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* delete trimmedQuery const

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-07-25 13:08:13 +00:00
ChunkyProgrammer
8bedbce845 Add local api support for viewing posts (#7728)
* Add local api support for viewing individual community posts + comments

* use array index instead of `first()`

Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>

* fix issue when navigating to a new community post

* adjust comment

we should use YouTube.js's ProtoUtils instead in that case

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-07-25 13:07:09 +00:00
Rex_sa
ed24cbce71 Translated using Weblate (Arabic)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Rex_sa <rex.sa@pm.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
Translation: FreeTube/Translations
2025-07-25 07:03:28 +02:00
R S
c06cea9c0f Translated using Weblate (Japanese)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: R S <weblate.0ihly@passmail.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
Translation: FreeTube/Translations
2025-07-25 07:03:27 +02:00
c-s-lab
ddddb00d30 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: c-s-lab <c-s-lab@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-07-24 12:06:37 +00:00
Hosted Weblate
0a148b6c8b Merge branch 'origin/development' into Weblate. 2025-07-24 00:06:09 +02:00
Caetano
c7a9a00e25 Hide home channel tab if empty (#7730) 2025-07-23 22:03:07 +00:00
Grzegorz Wójcicki
a6fd4e7baa Translated using Weblate (Polish)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-07-24 00:01:54 +02:00
Caetano
6f8a11e16a Translated using Weblate (Portuguese)
Currently translated at 99.5% (972 of 976 strings)

Co-authored-by: Caetano <pcaetanop@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
Translation: FreeTube/Translations
2025-07-23 02:03:58 +02:00
Priit Jõerüüt
df428b1b8f Translated using Weblate (Estonian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-07-22 16:06:29 +02:00
ColorfulRhino
fb091333b6 Translated using Weblate (German)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-07-22 14:02:15 +02:00
dependabot[bot]
416a903eba Bump form-data from 4.0.0 to 4.0.4 (#7723)
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.0 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.0...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-22 10:41:16 +02:00
Massimo Pissarello
b5501f30de Translated using Weblate (Italian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-07-22 07:02:03 +02:00
大王叫我来巡山
c030260e88 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-07-22 07:02:01 +02:00
absidue
380ae24aa6 Fix HTTP 429 errors for auto-translated subtitles (#7711) 2025-07-21 21:15:09 -04:00
delvani
f0379f6418 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-07-21 21:04:02 +00:00
Florent
8104b600c5 Translated using Weblate (Breton)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-07-21 17:02:03 +02:00
summoner001
22d7777265 Translated using Weblate (Hungarian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-07-21 15:05:42 +02:00
Markus Gaugg
580bd3f07d Translated using Weblate (German)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Markus Gaugg <gaugg@gmx.at>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-07-21 15:05:41 +02:00
Eder Etxebarria Rojo
29f51d03a0 Translated using Weblate (Basque)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-07-21 10:12:20 +00:00
Fjuro
9a148b2166 Translated using Weblate (Czech)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-07-21 10:12:19 +00:00
Ghost of Sparta
e31b342962 Translated using Weblate (Hungarian)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-07-21 10:12:17 +00:00
Adrián Gelmotto Ruiz
4756719a25 Translated using Weblate (Spanish)
Currently translated at 99.5% (972 of 976 strings)

Co-authored-by: Adrián Gelmotto Ruiz <adriangelmotto@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
Translation: FreeTube/Translations
2025-07-21 10:02:09 +02:00
Cloud Esp
f6405aec6b Translated using Weblate (French)
Currently translated at 100.0% (976 of 976 strings)

Co-authored-by: Cloud Esp <Frederic.Darboux@inrae.fr>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-07-21 10:02:07 +02:00
ChunkyProgrammer
77f585622a Local API: Add support for transcript voice replies (#7573)
* Add support for transcript voice replies

* Remove duplicate code, switch to voice_reply_container

Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-07-21 14:00:13 +08:00
Fernando
dc7cb01c41 Hiding Watched Videos on Channel View (#7366)
* Toggle Switch created with proper label, imported from component list, and helper variable/function created

* Make toggle only visible on the Videos tab

* Adjusted vertical position of the toggle

* Adjusted styling to separate toggle and dropdowns

* Refactor variable names for better readability

* Created the function to filter watched videos with check logic in the function; considering moving the check logic to outside the function and call it without checks inside of it

* Fixed hideWatchedToggle variable initialization and updating; also commented out filtering implementation for now as I debug the code further

* Updated the toggle helper function to update the ref values; created an event watched to update the video list if the toggle is pressed; separated variable check from inside the filter function (still not working)

* Removed autoRefresh options

* Created helper function to check if video exists in history

* Updated helper function 'filterWatchedVideos' to be able to get historyCache from the store, and iterate through the videos arrray filtering out entries that exist in the History

* Added some comments about limitations found during testing

* Fixing localization key in the app and adding localization key in the locales file

* Added logic to filter watched videos when getting video list from Invidious

* Missing space

* Changed the template reference from the latestVideos array to a computed filteredVideos; implemented the computed field; removed the event listener that refreshes the videoPanel

* Removed all the logic that changed the original latestVideos (replaced by the computed field)

* Same as last commit, but I forgot to include this last bit of code

* Added the button for both shorts and live pages, but functionality still needs tweaking

* Implemented filtering logic through computed field for Shorts

* Implemented computed field for Lives, working properly

* Since 'Hide Watched' is being used outside of the Videos tab, I increased its hierarchy in the locales file

* Since the helper function is not specific to videos, I renamed it to reduce confusion

* Added a visibility flag to hide the toggle when the videoPanel is being reloaded

* Adjusted computer variable to force a screen refresh if the filteredArray is empty, so it loads more videos

* Returned filteredVideos to a pure computed function

* Update src/renderer/views/Channel/Channel.vue

Switching from v-model (not supported by FtToggleSwitch) to :default-value

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* Update src/renderer/views/Channel/Channel.vue

Updating the toggle switch helper function from an arrow function that flipped the value of the variable each time it was called to a regular function that sets the variable value to the value passed in by the toggle

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* Update src/renderer/views/Channel/Channel.vue

Removes helper function, accomplishing its function inline in the original function call by using the Object.hasOwn method

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

* Hide the 'Sort By' dropdown if there's only one video loaded on the videoPanel. If the user manually fetches more videos, the dropdown reappears. Applicable to Videos, Shorts and Lives

* Refactor - simplify logic for when to show the toggle on videos page

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* Refactor - simplify logic for when to show the toggle on shorts page

* Refactor - simplify logic for when to show the toggle on live page

* Refactor - updated variable name for better readability

* Refactor, adjusted case for function name

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* Refactor, adjusted case in function call

* Removed the switch from the Channel page

* Removed the CSS rules created for proper positioning of the toggle button

* Removed redundant import (since we're not rendering the toggle anymore)

* Removed unused sentence from the Channel page

* Moved toggle element from subscription to distractionfree component

* Moved computed functions and methods between components

* Updated localization settings

* Updated variable declaration to access value from the store (global settings)

* Refactor all variable referencs to the new variable name; removed old variable declaration; removed outdated update function

* Implemented tooltip and localization

* Update static/locales/en-US.yaml

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Update src/renderer/views/Channel/Channel.vue

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Move translations for Hide Videos on Watch key

* * Update sort elements v-show conditions

* ! FIx sort element display logic

* ! Fix sort element to be hidden when there is no next page and no. of visible entries <= 1

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
Co-authored-by: PikachuEXE <git@pikachuexe.net>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-07-21 13:59:11 +08:00
dependabot[bot]
d73f43db5b Bump electron-builder from 26.0.18 to 26.0.19 (#7698)
---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.0.19
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-20 05:58:41 +08:00
dependabot[bot]
75c09ff732 Bump youtubei.js from 13.4.0 to 15.0.0 (#7701)
* Bump youtubei.js from 13.4.0 to 15.0.0

---
updated-dependencies:
- dependency-name: youtubei.js
  dependency-version: 15.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fixes related to the breaking changes

* ! Fix our usage on API with breaking changes

* ! Fix license property not defined

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-07-19 20:51:54 +00:00
dependabot[bot]
a2d3bbb936 Bump marked from 16.0.0 to 16.1.1 (#7696)
---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-19 16:10:13 +00:00
dependabot[bot]
b9f33e10e2 Bump shaka-player from 4.14.22 to 4.14.23 (#7700)
---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-19 13:42:35 +00:00
dependabot[bot]
f78ebf5c73 Bump electron from 37.2.1 to 37.2.3 (#7697)
---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.2.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-19 13:01:05 +00:00
dependabot[bot]
b07289485f Bump stylelint from 16.21.1 to 16.22.0 in the stylelint group (#7695)
---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.22.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-19 12:52:15 +00:00
dependabot[bot]
0cc7cab2fd Bump webpack from 5.100.1 to 5.100.2 (#7699)
---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.100.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-19 09:18:29 +08:00
dependabot[bot]
aa9662a6fd Bump eslint-plugin-jsdoc from 51.3.4 to 51.4.1 in the eslint group (#7694)
---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 51.4.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-19 09:18:16 +08:00
Midrielen
b07a386968 Translated using Weblate (Finnish)
Currently translated at 80.3% (783 of 975 strings)

Co-authored-by: Midrielen <jimitoivo.jaakkola@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fi/
Translation: FreeTube/Translations
2025-07-18 21:02:06 +00:00
Mohammed Al Otaibi
4fdc6694cd Translated using Weblate (Arabic)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Mohammed Al Otaibi <mopes.03.belle@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
Translation: FreeTube/Translations
2025-07-18 14:02:11 +00:00
Andi Chandler
7d364e01c7 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Andi Chandler <andi@gowling.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
Translation: FreeTube/Translations
2025-07-17 18:02:01 +02:00
Sveinn í Felli
b3eea453db Translated using Weblate (Icelandic)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
Translation: FreeTube/Translations
2025-07-17 12:02:00 +02:00
absidue
7ffb48f236 CI: Use faster D: drive for yarn cache on Windows (#7684) 2025-07-17 06:20:53 +08:00
dependabot[bot]
d93e6e536b Bump @intlify/core-base from 9.14.2 to 9.14.5 (#7686)
---
updated-dependencies:
- dependency-name: "@intlify/core-base"
  dependency-version: 9.14.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-17 06:11:39 +08:00
dependabot[bot]
664fd12b2b Bump lefthook from 1.11.16 to 1.12.2 (#7673)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.16 to 1.12.2.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.16...v1.12.2)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.12.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 19:41:39 +00:00
dependabot[bot]
bf4af28972 Bump electron-builder from 26.0.17 to 26.0.18 (#7674)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.0.17 to 26.0.18.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v26.0.18/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.0.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 03:32:09 +08:00
dependabot[bot]
bd32b9cbba Bump electron from 37.2.0 to 37.2.1 (#7676)
Bumps [electron](https://github.com/electron/electron) from 37.2.0 to 37.2.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.2.0...v37.2.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 03:06:27 +08:00
dependabot[bot]
9befe6df83 Bump the eslint group with 2 updates (#7672)
Bumps the eslint group with 2 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) and [eslint](https://github.com/eslint/eslint).


Updates `@eslint/js` from 9.30.1 to 9.31.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.31.0/packages/js)

Updates `eslint` from 9.30.1 to 9.31.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.30.1...v9.31.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.31.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.31.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 02:51:55 +08:00
dependabot[bot]
cf2e811df2 Bump webpack from 5.99.9 to 5.100.1 (#7675)
Bumps [webpack](https://github.com/webpack/webpack) from 5.99.9 to 5.100.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.99.9...v5.100.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.100.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 02:51:48 +08:00
dependabot[bot]
430f899cd0 Bump mikefarah/yq from 4.45.4 to 4.46.1 (#7677)
Bumps [mikefarah/yq](https://github.com/mikefarah/yq) from 4.45.4 to 4.46.1.
- [Release notes](https://github.com/mikefarah/yq/releases)
- [Changelog](https://github.com/mikefarah/yq/blob/master/release_notes.txt)
- [Commits](https://github.com/mikefarah/yq/compare/v4.45.4...v4.46.1)

---
updated-dependencies:
- dependency-name: mikefarah/yq
  dependency-version: 4.46.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 02:51:35 +08:00
absidue
94a62b5fd1 Migrate FtListPlaylist to the composition API (#7667) 2025-07-14 05:45:44 -04:00
Telaneo
ad0e7c1b6b Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Telaneo <post@telaneo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
Translation: FreeTube/Translations
2025-07-13 22:02:45 +00:00
NEXI
e6b8e5d551 Translated using Weblate (Serbian)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: NEXI <nexiphotographer@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
Translation: FreeTube/Translations
2025-07-12 21:02:05 +00:00
delvani
c2b005dee3 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: delvani <del.cidrak@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
Translation: FreeTube/Translations
2025-07-12 21:02:03 +00:00
ColorfulRhino
0471f741af Translated using Weblate (German)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: ColorfulRhino <131405023+ColorfulRhino@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-07-12 11:03:14 +00:00
absidue
cdefeef485 Clean up included by default babel class properties transform (#7655) 2025-07-11 18:52:17 -04:00
absidue
26191f0c63 Use GH_TOKEN environment variable in auto merge workflow (#7656) 2025-07-11 18:51:59 -04:00
absidue
3b9dc07f38 Migrate FtInputTags to the composition API (#7657) 2025-07-11 18:51:26 -04:00
Rhoslyn Prys
86fa590735 Translated using Weblate (Welsh)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Rhoslyn Prys <rprys@posteo.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
Translation: FreeTube/Translations
2025-07-11 22:02:04 +02:00
Benjamin Thorberg
3a4a00c70a Translated using Weblate (Swedish)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Benjamin Thorberg <benjamin.thorberg@proton.me>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
Translation: FreeTube/Translations
2025-07-11 22:02:01 +02:00
Nick Wick
0ab61fa998 Translated using Weblate (Swedish)
Currently translated at 100.0% (975 of 975 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Nick Wick <NickWick@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
Translation: FreeTube/Translations
2025-07-11 22:01:59 +02:00
Markus Gaugg
721dbb075f Translated using Weblate (German)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Markus Gaugg <gaugg@gmx.at>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
Translation: FreeTube/Translations
2025-07-11 16:02:02 +02:00
Florent
8c71b5bef4 Translated using Weblate (Breton)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Florent <florent.grouin+osmand@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
Translation: FreeTube/Translations
2025-07-11 13:01:54 +02:00
absidue
82a59aea64 Handle more YouTube URLs (#7654) 2025-07-11 08:16:21 +08:00
Fjuro
43f06cdd9a Translated using Weblate (Czech)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Fjuro <git@alius.cz>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
Translation: FreeTube/Translations
2025-07-10 18:02:01 +02:00
Cleverson Cândido
e989c9f752 Translated using Weblate (Portuguese)
Currently translated at 99.4% (970 of 975 strings)

Co-authored-by: Cleverson Cândido <optimuspraimu@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
Translation: FreeTube/Translations
2025-07-10 18:02:00 +02:00
Grzegorz Wójcicki
d2e281d308 Translated using Weblate (Polish)
Currently translated at 100.0% (975 of 975 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (975 of 975 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Grzegorz Wójcicki <terkaz@gmx.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
Translation: FreeTube/Translations
2025-07-10 18:01:58 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
d81c14e259 Revert beta labeling for nightly builds (#7606) 2025-07-10 09:53:12 -04:00
Massimo Pissarello
95530d8690 Translated using Weblate (Italian)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Massimo Pissarello <mapi68@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
Translation: FreeTube/Translations
2025-07-10 10:01:53 +02:00
Eder Etxebarria Rojo
a3a271b7af Translated using Weblate (Basque)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Eder Etxebarria Rojo <eder@betxepare.eus>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
Translation: FreeTube/Translations
2025-07-10 06:02:00 +00:00
Priit Jõerüüt
1416471130 Translated using Weblate (Estonian)
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
Translation: FreeTube/Translations
2025-07-10 06:01:58 +00:00
大王叫我来巡山
6a5a1b0b16 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
Translation: FreeTube/Translations
2025-07-10 06:01:56 +00:00
Jeff Huang
3dd30eb232 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: Jeff Huang <s8321414@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
Translation: FreeTube/Translations
2025-07-10 03:03:29 +00:00
Cloud Esp
e8ce7a96b9 Translated using Weblate (French)
Currently translated at 99.8% (974 of 975 strings)

Co-authored-by: Cloud Esp <Frederic.Darboux@inrae.fr>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
Translation: FreeTube/Translations
2025-07-10 01:18:27 +02:00
summoner001
367f565f3c Translated using Weblate (Hungarian)
Currently translated at 100.0% (975 of 975 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (975 of 975 strings)

Co-authored-by: summoner001 <summoner@vivaldi.net>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
Translation: FreeTube/Translations
2025-07-09 21:01:48 +02:00
Anurag Yadav
053514bcfa Add sort by date in history page (#7157)
* sortorder now will be stored to db

* Added userHistorySortBy in  settings.js

* Sorting fixed when  user uses keywords to filter

* align UX with dropdown behavior

* Removed unused code

* Has resolved the conflicts

* resolved branch conflicts

* Fixed conflict

* Reverse yarn.lock changes

* Removed unused import

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-07-09 19:34:01 +02:00
petcatt
633ba93d05 Translated using Weblate (Albanian)
Currently translated at 20.5% (200 of 973 strings)

Translated using Weblate (Albanian)

Currently translated at 20.5% (200 of 973 strings)

Co-authored-by: petcatt <petcat004@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
Translation: FreeTube/Translations
2025-07-09 19:02:10 +02:00
petcatt
d4341cd968 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:15 +02:00
petcatt
8b4b700e60 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:12 +02:00
petcatt
ab7b8aaac7 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:10 +02:00
petcatt
be7f996388 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:08 +02:00
petcatt
1ba21f38b5 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:06 +02:00
petcatt
43b30acdcc Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:04 +02:00
petcatt
c2bd7064e1 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:03 +02:00
petcatt
b6ce2789c3 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:01 +02:00
petcatt
084cf9a5c6 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:02:00 +02:00
petcatt
755acfd5cc Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:01:57 +02:00
petcatt
6b9993294a Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:01:56 +02:00
petcatt
40abae3e6a Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:01:54 +02:00
petcatt
0aea91a8b6 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:01:53 +02:00
petcatt
29d08eccc6 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:01:51 +02:00
petcatt
53b3458598 Translated using Weblate (Albanian)
Currently translated at 19.3% (188 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sq/
2025-07-09 17:01:49 +02:00
petcatt
0261e378df Added translation using Weblate (Albanian) 2025-07-09 15:29:56 +02:00
Drugi Sapog
dcb5978412 Translated using Weblate (Belarusian)
Currently translated at 99.3% (967 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/be/
2025-07-09 04:01:47 +02:00
absidue
dcafc91505 Deduplicate nested dependencies in the yarn.lock files (#7650) 2025-07-08 21:19:18 -04:00
Eder Etxebarria Rojo
fe87aa1305 Translated using Weblate (Basque)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-07-08 06:01:57 +00:00
dependabot[bot]
013d67c191 Bump shaka-player from 4.14.21 to 4.14.22 (#7646)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.21 to 4.14.22.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.22/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.21...v4.14.22)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.22
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 16:32:24 +02:00
dependabot[bot]
1296bb3361 Bump the eslint group with 6 updates (#7645)
Bumps the eslint group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.30.0` | `9.30.1` |
| [eslint](https://github.com/eslint/eslint) | `9.30.0` | `9.30.1` |
| [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) | `51.3.1` | `51.3.4` |
| [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) | `10.2.0` | `10.3.0` |
| [neostandard](https://github.com/neostandard/neostandard) | `0.12.1` | `0.12.2` |
| [vue-eslint-parser](https://github.com/vuejs/vue-eslint-parser) | `10.1.4` | `10.2.0` |


Updates `@eslint/js` from 9.30.0 to 9.30.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.30.1/packages/js)

Updates `eslint` from 9.30.0 to 9.30.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.30.0...v9.30.1)

Updates `eslint-plugin-jsdoc` from 51.3.1 to 51.3.4
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v51.3.1...v51.3.4)

Updates `eslint-plugin-vue` from 10.2.0 to 10.3.0
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Changelog](https://github.com/vuejs/eslint-plugin-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v10.2.0...v10.3.0)

Updates `neostandard` from 0.12.1 to 0.12.2
- [Release notes](https://github.com/neostandard/neostandard/releases)
- [Changelog](https://github.com/neostandard/neostandard/blob/main/CHANGELOG.md)
- [Commits](https://github.com/neostandard/neostandard/compare/v0.12.1...v0.12.2)

Updates `vue-eslint-parser` from 10.1.4 to 10.2.0
- [Release notes](https://github.com/vuejs/vue-eslint-parser/releases)
- [Commits](https://github.com/vuejs/vue-eslint-parser/compare/v10.1.4...v10.2.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 51.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-vue
  dependency-version: 10.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: neostandard
  dependency-version: 0.12.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: vue-eslint-parser
  dependency-version: 10.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 16:18:05 +02:00
dependabot[bot]
d3942decf7 Bump @seald-io/nedb from 4.1.1 to 4.1.2 (#7647)
Bumps [@seald-io/nedb](https://github.com/seald/nedb) from 4.1.1 to 4.1.2.
- [Changelog](https://github.com/seald/nedb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/seald/nedb/compare/v4.1.1...v4.1.2)

---
updated-dependencies:
- dependency-name: "@seald-io/nedb"
  dependency-version: 4.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 16:13:32 +02:00
dependabot[bot]
d215aa80df Bump electron from 37.1.0 to 37.2.0 (#7642)
Bumps [electron](https://github.com/electron/electron) from 37.1.0 to 37.2.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.1.0...v37.2.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 13:37:17 +02:00
dependabot[bot]
ff01db0c72 Bump lefthook from 1.11.14 to 1.11.16 (#7643)
---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.11.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 13:31:16 +02:00
dependabot[bot]
c4302b6cac Bump the babel group with 2 updates (#7640)
Bumps the babel group with 2 updates: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) and [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env).


Updates `@babel/core` from 7.27.7 to 7.28.0
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.0/packages/babel-core)

Updates `@babel/preset-env` from 7.27.2 to 7.28.0
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.0/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: babel
- dependency-name: "@babel/preset-env"
  dependency-version: 7.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 13:24:30 +02:00
dependabot[bot]
c79c61bead Bump globals from 16.2.0 to 16.3.0 (#7641)
---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 13:22:57 +02:00
dependabot[bot]
945151246b Bump stylelint from 16.21.0 to 16.21.1 in the stylelint group (#7639)
Bumps the stylelint group with 1 update: [stylelint](https://github.com/stylelint/stylelint).


Updates `stylelint` from 16.21.0 to 16.21.1
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.21.0...16.21.1)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.21.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 13:20:50 +02:00
dependabot[bot]
817cd8f180 Bump Amwam/issue-comment-action from 1.3.1 to 1.5.0 (#7638)
Bumps [Amwam/issue-comment-action](https://github.com/amwam/issue-comment-action) from 1.3.1 to 1.5.0.
- [Release notes](https://github.com/amwam/issue-comment-action/releases)
- [Commits](https://github.com/amwam/issue-comment-action/compare/v1.3.1...v1.5.0)

---
updated-dependencies:
- dependency-name: Amwam/issue-comment-action
  dependency-version: 1.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-07 13:14:42 +02:00
Alexander Gabilondo
6954dacfff Translated using Weblate (Basque)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-07-07 04:01:53 +02:00
Alexander Gabilondo
c87ae28cb3 Translated using Weblate (Basque)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-07-07 04:01:51 +02:00
Alexander Gabilondo
a2f29ab2f7 Translated using Weblate (Basque)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-07-07 04:01:48 +02:00
Milo Ivir
d656002131 Translated using Weblate (Croatian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
2025-07-07 00:05:29 +00:00
தமிழ்நேரம்
9cdfb590b7 Translated using Weblate (Tamil)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ta/
2025-07-06 18:01:47 +00:00
Cloud Esp
c8547f7fee Translated using Weblate (French)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-07-04 21:01:53 +00:00
PikachuEXE
fa3b2d814e Update single user playlist view to remove videos immediately on exit (#7544)
* * Update single user playlist view to remove videos immediately on exit

* $ Update `removeVideos` usage to remove never used `videoIds`

* * Close toast early on view exit

* ! Fix unable to remove videos after clicking undo

* * Reverse toast message update

* * Update video count after remove (before actual remove)
2025-07-03 19:29:02 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
17cbc31891 fix es6 link (#7627) 2025-07-03 07:02:40 -04:00
Nick Wick
e72ea0361b Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-07-02 10:01:49 +02:00
Nick Wick
e0e9f5b31e Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-07-01 23:01:55 +02:00
Nick Wick
7a5b6299b2 Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-07-01 23:01:54 +02:00
Nick Wick
64c0b1bcfb Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-07-01 23:01:51 +02:00
Nick Wick
90bf0b7a5d Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-07-01 23:01:50 +02:00
Nick Wick
9200ccb3ac Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-07-01 23:01:48 +02:00
Nick Wick
cc6c9ff976 Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-07-01 23:01:47 +02:00
Rhoslyn Prys
d1673d768a Translated using Weblate (Welsh)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
2025-07-01 20:01:50 +02:00
dependabot[bot]
7f043a7b14 Bump marked from 15.0.12 to 16.0.0 (#7617)
Bumps [marked](https://github.com/markedjs/marked) from 15.0.12 to 16.0.0.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v15.0.12...v16.0.0)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 17:22:37 -04:00
dependabot[bot]
3221679847 Bump electron from 37.0.0 to 37.1.0 (#7614)
Bumps [electron](https://github.com/electron/electron) from 37.0.0 to 37.1.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v37.0.0...v37.1.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 15:54:41 +02:00
dependabot[bot]
276c14bdac Bump shaka-player from 4.14.20 to 4.14.21 (#7613)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.20 to 4.14.21.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.21/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.20...v4.14.21)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.21
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 21:28:53 +08:00
dependabot[bot]
7c7b044060 Bump @babel/core from 7.27.4 to 7.27.7 in the babel group (#7612)
Bumps the babel group with 1 update: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core).


Updates `@babel/core` from 7.27.4 to 7.27.7
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.7/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.27.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 14:09:20 +02:00
dependabot[bot]
938b77b3f6 Bump the eslint group with 3 updates (#7616)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `@eslint/js` from 9.29.0 to 9.30.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.30.0/packages/js)

Updates `eslint` from 9.29.0 to 9.30.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.29.0...v9.30.0)

Updates `eslint-plugin-jsdoc` from 51.2.3 to 51.3.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v51.2.3...v51.3.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 51.3.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 14:05:09 +02:00
dependabot[bot]
0bba306f77 Bump swiper from 11.2.8 to 11.2.10 (#7615)
Bumps [swiper](https://github.com/nolimits4web/Swiper) from 11.2.8 to 11.2.10.
- [Release notes](https://github.com/nolimits4web/Swiper/releases)
- [Changelog](https://github.com/nolimits4web/swiper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nolimits4web/Swiper/compare/v11.2.8...v11.2.10)

---
updated-dependencies:
- dependency-name: swiper
  dependency-version: 11.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 13:44:31 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
9dbf7066e9 Enable Brenton Language (#7608) 2025-06-29 07:57:43 +08:00
Florent
0ef246ac81 Translated using Weblate (Breton)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 19:04:58 +02:00
Florent
80007811ad Translated using Weblate (Breton)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 19:04:57 +02:00
Florent
3c3154afd1 Translated using Weblate (Breton)
Currently translated at 98.2% (956 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 18:01:49 +02:00
Florent
6448912bc5 Translated using Weblate (Breton)
Currently translated at 98.2% (956 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 18:01:48 +02:00
Florent
3a91d55732 Translated using Weblate (Breton)
Currently translated at 94.9% (924 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 14:01:51 +00:00
Florent
d0da444d2b Translated using Weblate (Breton)
Currently translated at 94.9% (924 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 14:01:50 +00:00
Florent
0caad66583 Translated using Weblate (Breton)
Currently translated at 94.9% (924 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 14:01:49 +00:00
Florent
0f03b68b66 Translated using Weblate (Breton)
Currently translated at 94.9% (924 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 14:01:48 +00:00
Florent
438e589eba Translated using Weblate (Breton)
Currently translated at 83.8% (816 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-06-28 14:34:53 +02:00
Ghost of Sparta
53f8bd219c Translated using Weblate (Hungarian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
2025-06-28 12:01:47 +02:00
ozrendev
250fbb65fb Fix Live Now video thumbnail timestamp (#7595)
* check for NaN value on live videos
- GridVideo has no is_live value, check for another

* set the is_live property correctly

* removed liveNow from GridMovie

* single var for isLive check
2025-06-27 11:04:18 -04:00
ChunkyProgrammer
d4f1b1bc03 Fix getting community posts on subscription page (#7603)
* Fix getting community posts on subscription page

* use newer params as well (old params still worked but no idea how long they will work for?)
2025-06-27 15:19:54 +02:00
ChunkyProgrammer
77109c87a5 Fix some template strings in locale files, add script to find problematic values (#7519)
* Fix template strings

* add script to make it easier to find issues with template strings

* switch to sync fs, exclude non yaml files, add jsdoc comment

* Don't fail on duplicate templates in the same string

We should only need to validate if the key is in the string, not how many times the key is in the string
2025-06-27 15:10:58 +02:00
Bora Atıcı
15da2a0177 Translated using Weblate (Turkish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
2025-06-26 15:01:46 +02:00
dependabot[bot]
9a9ef26a16 Bump electron from 36.5.0 to 37.0.0 (#7597)
Bumps [electron](https://github.com/electron/electron) from 36.5.0 to 37.0.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v36.5.0...v37.0.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 37.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-26 01:32:22 +00:00
Drugi Sapog
ce87259fb0 Translated using Weblate (Belarusian)
Currently translated at 99.3% (967 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/be/
2025-06-25 23:01:47 +02:00
Minh
8ae900a4b8 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vi/
2025-06-25 09:01:47 +00:00
dependabot[bot]
327a07130c Bump the eslint group with 2 updates (#7596)
Bumps the eslint group with 2 updates: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [vue-eslint-parser](https://github.com/vuejs/vue-eslint-parser).


Updates `eslint-plugin-jsdoc` from 51.2.1 to 51.2.3
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v51.2.1...v51.2.3)

Updates `vue-eslint-parser` from 10.1.3 to 10.1.4
- [Release notes](https://github.com/vuejs/vue-eslint-parser/releases)
- [Commits](https://github.com/vuejs/vue-eslint-parser/compare/v10.1.3...v10.1.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 51.2.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: vue-eslint-parser
  dependency-version: 10.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-25 07:38:33 +02:00
dependabot[bot]
57363bdda0 Bump shaka-player from 4.14.19 to 4.14.20 (#7598)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.19 to 4.14.20.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.20/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.19...v4.14.20)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-25 06:02:37 +02:00
bittin1ddc447d824349b2
23ef1c60d7 Translated using Weblate (Swedish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-06-25 00:05:48 +02:00
Yosefario Dev
448741267d Translated using Weblate (Russian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
2025-06-24 08:01:48 +00:00
dependabot[bot]
738e6f2434 Bump the stylelint group with 2 updates (#7587)
---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: stylelint
- dependency-name: stylelint
  dependency-version: 16.21.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 18:06:33 -04:00
Dima Gabriel
a35e51f5b2 Translated using Weblate (Romanian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
2025-06-23 15:03:01 +02:00
dependabot[bot]
0513a773c9 Bump eslint-plugin-jsdoc from 51.0.1 to 51.2.1 in the eslint group (#7588)
Bumps the eslint group with 1 update: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `eslint-plugin-jsdoc` from 51.0.1 to 51.2.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v51.0.1...v51.2.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 51.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 13:49:38 +02:00
dependabot[bot]
418f911338 Bump shaka-player from 4.14.18 to 4.14.19 (#7589)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.18 to 4.14.19.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.19/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.18...v4.14.19)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 13:18:40 +02:00
dependabot[bot]
660f8f5cfa Bump electron from 36.4.0 to 36.5.0 (#7590)
Bumps [electron](https://github.com/electron/electron) from 36.4.0 to 36.5.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v36.4.0...v36.5.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 36.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:51:11 +02:00
dependabot[bot]
d21a8b07bf Bump lefthook from 1.11.13 to 1.11.14 (#7591)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.13 to 1.11.14.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.13...v1.11.14)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.11.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:50:55 +02:00
c-s-lab
f6962e697d Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
2025-06-22 17:05:20 +02:00
Andi Chandler
9a707263e4 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
2025-06-22 00:01:46 +00:00
NEXI
8fc5b19f97 Translated using Weblate (Serbian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
2025-06-21 21:01:51 +00:00
c-s-lab
4843949d0a Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.5% (969 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
2025-06-21 21:01:50 +00:00
Telaneo
c61445d179 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-06-20 12:03:09 +00:00
Grzegorz Wójcicki
36f8e45d32 Translated using Weblate (Polish)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
2025-06-20 02:01:48 +00:00
R S
c266680b03 Translated using Weblate (Japanese)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
2025-06-20 02:01:47 +00:00
Philip Goto
b592a68fa9 Translated using Weblate (Dutch)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
2025-06-19 22:04:05 +02:00
Eder Etxebarria Rojo
a1b8e2b7ae Translated using Weblate (Basque)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-06-19 17:01:48 +02:00
Fjuro
982fb97ec7 Translated using Weblate (Czech)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
2025-06-18 20:04:38 +00:00
Gabby Rondeau
86cb8b9245 Translated using Weblate (French)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-06-18 20:04:37 +00:00
Priit Jõerüüt
9ba663ded7 Translated using Weblate (Estonian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
2025-06-18 20:01:55 +02:00
Rex_sa
8d0b31a4d1 Translated using Weblate (Arabic)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
2025-06-18 20:01:53 +02:00
Massimo Pissarello
be9022757b Translated using Weblate (Italian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
2025-06-18 20:01:52 +02:00
Sveinn í Felli
8cae14a3b1 Translated using Weblate (Icelandic)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
2025-06-18 13:06:29 +02:00
Ghost of Sparta
3d830c4061 Translated using Weblate (Hungarian)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
2025-06-18 10:01:54 +02:00
Markus Gaugg
3a5837f93b Translated using Weblate (German)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
2025-06-18 10:01:51 +02:00
大王叫我来巡山
9a2e23900f Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
2025-06-18 05:01:51 +00:00
delvani
24eb5ea74a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2025-06-18 02:01:54 +02:00
Robin Grenet
5e66920e53 Translated using Weblate (French)
Currently translated at 100.0% (973 of 973 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-06-18 02:01:51 +02:00
Hosted Weblate
14379bcdc5 Merge branch 'origin/development' into Weblate. 2025-06-17 23:47:22 +02:00
Robin Grenet
09e9a3c617 Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-06-17 23:47:21 +02:00
ozrendev
159efc7021 add search filter reset button (#7531)
* add search filter reset button

* add i18n label

* change text-color

* fix text color
2025-06-17 17:47:14 -04:00
PikachuEXE
0ad2d2d1f3 ! Fix variant selection when no variant's audio role marked as main (#7571) 2025-06-17 17:40:54 -04:00
ChunkyProgrammer
5485c567c4 Make sure description isn't null when extracting chapters from description (#7505)
* Make sure description isn't null when extracting chapters from description

* set default value for description to empty string
2025-06-17 21:29:48 +00:00
Dragibus Noir
81ee7fb45a Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-06-17 10:02:00 +02:00
dependabot[bot]
0ccb4b279a Bump stefanzweifel/git-auto-commit-action from 5 to 6 (#7564)
Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 5 to 6.
- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)
- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 17:57:44 +00:00
Nick Wick
c6ed48dca7 Translated using Weblate (Swedish)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-06-16 17:04:18 +02:00
dependabot[bot]
edfe68ab3b Bump the eslint group with 3 updates (#7567)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `@eslint/js` from 9.28.0 to 9.29.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.29.0/packages/js)

Updates `eslint` from 9.28.0 to 9.29.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.28.0...v9.29.0)

Updates `eslint-plugin-jsdoc` from 50.7.1 to 51.0.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.7.1...v51.0.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 51.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 13:57:01 +00:00
dependabot[bot]
4cf12b52aa Bump sass from 1.89.1 to 1.89.2 (#7565)
Bumps [sass](https://github.com/sass/dart-sass) from 1.89.1 to 1.89.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.1...1.89.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 20:41:47 +08:00
dependabot[bot]
9dcf905e37 Bump shaka-player from 4.14.15 to 4.14.18 (#7566)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.15 to 4.14.18.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.18/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.15...v4.14.18)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 20:29:05 +08:00
dependabot[bot]
ddb8ec2d42 Bump postcss from 8.5.4 to 8.5.5 in the stylelint group (#7568)
Bumps the stylelint group with 1 update: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.5.4 to 8.5.5
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.4...8.5.5)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 20:28:34 +08:00
dependabot[bot]
2e1aed7382 Bump electron-builder from 26.0.16 to 26.0.17 (#7569)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.0.16 to 26.0.17.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v26.0.17/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.0.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 20:28:01 +08:00
Andi Chandler
ebfee34159 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
2025-06-16 00:01:56 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
6185e67f00 add beta to asset name (#7512) 2025-06-14 13:22:57 +02:00
Philip Goto
34c69429e4 Translated using Weblate (Dutch)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
2025-06-14 13:01:51 +02:00
Philip Goto
0e14a97ed2 Translated using Weblate (Dutch)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
2025-06-14 11:01:50 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
bf29ed571e Fix builds failing due to broken Weblate keys (#7560)
* put keys back on one line

Co-Authored-By: absidue <48293849+absidue@users.noreply.github.com>

* fix another key

* Fix key again

* fix lint last time

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-06-13 13:46:25 +00:00
KING APPS
9b7f7b4a64 Translated using Weblate (Persian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fa/
2025-06-13 10:01:47 +00:00
Rhoslyn Prys
a51cb33bd5 Translated using Weblate (Welsh)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
2025-06-12 16:02:04 +00:00
absidue
3ed3155639 Migrate FtListVideoLazy to the composition API (#7534) 2025-06-11 13:48:58 +00:00
dependabot[bot]
55342d92a9 Bump electron-builder from 26.0.15 to 26.0.16 (#7539)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.0.15 to 26.0.16.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v26.0.16/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.0.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 14:40:10 +02:00
dependabot[bot]
5e64372a25 Bump eslint-plugin-vue from 10.1.0 to 10.2.0 in the eslint group (#7537)
Bumps the eslint group with 1 update: [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue).


Updates `eslint-plugin-vue` from 10.1.0 to 10.2.0
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Changelog](https://github.com/vuejs/eslint-plugin-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v10.1.0...v10.2.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  dependency-version: 10.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 20:11:06 +08:00
dependabot[bot]
e992cffb8c Bump webpack-dev-server from 5.2.1 to 5.2.2 (#7538)
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 5.2.1 to 5.2.2.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v5.2.1...v5.2.2)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-version: 5.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 20:10:52 +08:00
dependabot[bot]
a6a2d062da Bump electron from 36.3.2 to 36.4.0 (#7540)
Bumps [electron](https://github.com/electron/electron) from 36.3.2 to 36.4.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v36.3.2...v36.4.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 36.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 20:10:26 +08:00
summoner001
465b3be71c Translated using Weblate (Hungarian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
2025-06-08 20:15:43 +02:00
absidue
3083bab6ed Migrate FtPlaylistAddVideoPrompt and FtPlaylistSelector to the composition API (#7511)
* Migrate FtPlaylistAddVideoPrompt and FtPlaylistSelector to the composition API

* Handle videos without channel names
2025-06-08 03:58:55 +00:00
absidue
f9a422711b Speed up the loading of the geolocation data (#7527) 2025-06-08 08:28:38 +08:00
absidue
2c44079269 Remove unnecessary barrel file in store (#7522) 2025-06-07 18:16:48 +00:00
Rusi Dimitrov
0fb7f12772 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
2025-06-06 21:01:53 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
d9f6484bb8 add rules to issue templates (#7516) 2025-06-05 19:21:24 -04:00
Dima Gabriel
954b43390b Translated using Weblate (Romanian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
2025-06-05 14:01:50 +02:00
NEXI
06766d848d Translated using Weblate (Serbian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
2025-06-05 07:01:44 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
5f522ac67b Translated using Weblate (Russian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
2025-06-04 15:01:47 +00:00
ChunkyProgrammer
15bedb96a2 Move settings to more menu on smaller mobile devices (#7506) 2025-06-03 23:01:24 +02:00
InsightfuI
e337396fe3 Translated using Weblate (Russian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
2025-06-03 11:01:46 +00:00
absidue
fc9d6aa23c Migrate WatchVideoLiveChat to the composition API (#7494)
* Migrate WatchVideoLiveChat to the composition API

* Fix super chat error
2025-06-03 06:32:24 -04:00
Eder Etxebarria Rojo
9494e31f67 Translated using Weblate (Basque)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-06-03 11:20:56 +02:00
InsightfuI
f297bbcd50 Translated using Weblate (Russian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
2025-06-03 11:20:56 +02:00
dependabot[bot]
0753d22622 Bump shaka-player from 4.14.14 to 4.14.15 (#7501)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.14 to 4.14.15.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.15/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.14...v4.14.15)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 07:05:54 +02:00
dependabot[bot]
cb51ffd007 Bump electron from 36.3.1 to 36.3.2 (#7500)
Bumps [electron](https://github.com/electron/electron) from 36.3.1 to 36.3.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v36.3.1...v36.3.2)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 36.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 06:48:01 +02:00
dependabot[bot]
bf956eca12 Bump sass from 1.89.0 to 1.89.1 (#7499)
Bumps [sass](https://github.com/sass/dart-sass) from 1.89.0 to 1.89.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.0...1.89.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 06:43:59 +02:00
dependabot[bot]
525d68bd25 Bump the eslint group with 3 updates (#7498)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc).


Updates `@eslint/js` from 9.27.0 to 9.28.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.28.0/packages/js)

Updates `eslint` from 9.27.0 to 9.28.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.27.0...v9.28.0)

Updates `eslint-plugin-jsdoc` from 50.6.17 to 50.7.1
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.6.17...v50.7.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 50.7.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 06:29:26 +02:00
dependabot[bot]
b11492cf17 Bump the stylelint group with 2 updates (#7497)
Bumps the stylelint group with 2 updates: [postcss](https://github.com/postcss/postcss) and [stylelint](https://github.com/stylelint/stylelint).


Updates `postcss` from 8.5.3 to 8.5.4
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.3...8.5.4)

Updates `stylelint` from 16.19.1 to 16.20.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.19.1...16.20.0)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: stylelint
- dependency-name: stylelint
  dependency-version: 16.20.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 10:19:48 +08:00
dependabot[bot]
2f16f98929 Bump @babel/core from 7.27.1 to 7.27.4 in the babel group (#7496)
Bumps the babel group with 1 update: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core).


Updates `@babel/core` from 7.27.1 to 7.27.4
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.4/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.27.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 02:04:11 +00:00
R S
0cd5c5a569 Translated using Weblate (Japanese)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
2025-06-02 08:05:51 +02:00
ColorfulRhino
5a00f970d6 Translated using Weblate (German)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
2025-06-01 23:01:45 +00:00
PikachuEXE
ffd1d8d03a Implement context menu item "search X in new window" (#7477)
* * Implement context menu item "search X in new window"

* ! Handle too long for search text
2025-06-01 21:46:24 +00:00
Juzé
e200a1cf9b Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2025-06-01 17:01:45 +02:00
Cloud Esp
450c73a2e7 Translated using Weblate (French)
Currently translated at 99.7% (970 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-06-01 17:01:44 +02:00
absidue
5211716563 Fix playlist videos disappearing when sorted differently (#7490) 2025-06-01 10:34:50 -04:00
absidue
f3e475b0a1 Migrate FtRefreshWidget to the composition API (#7491) 2025-06-01 10:24:10 -04:00
cat
369a6dbd63 Translated using Weblate (Danish)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-06-01 15:05:50 +02:00
PikachuEXE
d43876eac3 ! Fix opening URL in a new window restores main window (in Windows) (#7489) 2025-06-01 13:12:44 +02:00
Sveinn í Felli
6b8dac6edb Translated using Weblate (Icelandic)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
2025-06-01 09:01:44 +02:00
Serdar Sağlam
8d60d1f8ef Translated using Weblate (Turkish)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
2025-06-01 09:01:44 +02:00
cat
57022c93de Translated using Weblate (Danish)
Currently translated at 99.7% (970 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-06-01 09:01:43 +02:00
Massimo Pissarello
87b0b38fb2 Translated using Weblate (Italian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
2025-06-01 05:05:28 +00:00
Telaneo
cadbc4e91f Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-06-01 05:01:44 +02:00
cat
8a79b980b4 Translated using Weblate (Danish)
Currently translated at 99.7% (970 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-06-01 01:01:44 +02:00
summoner001
cc5d29b285 Translated using Weblate (Hungarian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
2025-05-31 20:03:01 +02:00
Grzegorz Wójcicki
7b9724f291 Translated using Weblate (Polish)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
2025-05-31 20:02:58 +02:00
Markus Gaugg
10b5c8646c Translated using Weblate (German)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
2025-05-31 20:02:56 +02:00
cat
fe175585f8 Translated using Weblate (Danish)
Currently translated at 99.7% (970 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-05-31 14:01:45 +00:00
Fjuro
beea6e02b3 Translated using Weblate (Czech)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
2025-05-31 11:01:47 +00:00
cat
12c7416d3d Translated using Weblate (Danish)
Currently translated at 99.7% (970 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-05-31 11:01:46 +00:00
Priit Jõerüüt
bf021c7896 Translated using Weblate (Estonian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
2025-05-31 11:01:46 +02:00
大王叫我来巡山
206eb5e95f Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
2025-05-31 11:01:44 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
2a394328c7 Add more keyboard shortcuts for the player (#7487)
* add keyboard shortcuts

* fix lint

* Update static/locales/en-US.yaml

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-05-31 01:17:42 +00:00
cat
2c533a4347 Translated using Weblate (Danish)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-05-31 01:07:28 +00:00
Christopher A. Hinz-Berg
e896437f3e Translated using Weblate (Danish)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-05-30 19:06:12 +02:00
R S
55702357fa Translated using Weblate (Japanese)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
2025-05-30 08:01:43 +02:00
absidue
9bfdc97737 Fix parsing grid channels without a subscriber count (#7486) 2025-05-30 08:40:33 +08:00
absidue
e9200d052f Local API: Add PO tokens to the caption URLs (#7484) 2025-05-30 06:38:44 +08:00
absidue
45ecc6b427 Add preload script and disable node integration in renderer processes (#7424) 2025-05-29 11:50:19 -04:00
absidue
01f1a8255a Remove unused test script and speed up postinstall hook (#7472) 2025-05-28 17:42:50 +00:00
Matheus Kahl
3c21aa2da8 Translated using Weblate (Portuguese)
Currently translated at 99.3% (964 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
2025-05-28 16:06:04 +00:00
Matheus Kahl
3eaba0f7e6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2025-05-28 16:06:03 +00:00
absidue
c5bcc09681 Fix translated placeholders in strings (#7474) 2025-05-28 07:04:55 -04:00
absidue
4f5b932e8f Convert the electron-builder scripts to ESM (#7471) 2025-05-27 08:43:34 +08:00
dependabot[bot]
c58a0152d1 Bump shaka-player from 4.14.12 to 4.14.14 (#7463)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.12 to 4.14.14.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.14/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.12...v4.14.14)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-27 06:59:11 +08:00
dependabot[bot]
40784eea5b Bump electron from 36.2.1 to 36.3.1 (#7466)
---
updated-dependencies:
- dependency-name: electron
  dependency-version: 36.3.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-26 19:46:26 +00:00
dependabot[bot]
6abb2db532 Bump marked from 15.0.11 to 15.0.12 (#7467)
Bumps [marked](https://github.com/markedjs/marked) from 15.0.11 to 15.0.12.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v15.0.11...v15.0.12)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 15.0.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-26 15:28:45 -04:00
dependabot[bot]
c51c1db14a Bump globals from 16.1.0 to 16.2.0 (#7461)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.1.0 to 16.2.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.1.0...v16.2.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-26 18:23:51 +02:00
dependabot[bot]
1814c66a1b Bump swiper from 11.2.6 to 11.2.8 (#7462)
Bumps [swiper](https://github.com/nolimits4web/Swiper) from 11.2.6 to 11.2.8.
- [Release notes](https://github.com/nolimits4web/Swiper/releases)
- [Changelog](https://github.com/nolimits4web/swiper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nolimits4web/Swiper/compare/v11.2.6...v11.2.8)

---
updated-dependencies:
- dependency-name: swiper
  dependency-version: 11.2.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-26 18:23:34 +02:00
dependabot[bot]
7574b05076 Bump webpack from 5.99.8 to 5.99.9 (#7464)
Bumps [webpack](https://github.com/webpack/webpack) from 5.99.8 to 5.99.9.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.99.8...v5.99.9)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.99.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-26 18:18:31 +02:00
dependabot[bot]
34d79053ea Bump npm-run-all2 from 8.0.2 to 8.0.4 (#7465)
Bumps [npm-run-all2](https://github.com/bcomnes/npm-run-all2) from 8.0.2 to 8.0.4.
- [Release notes](https://github.com/bcomnes/npm-run-all2/releases)
- [Changelog](https://github.com/bcomnes/npm-run-all2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bcomnes/npm-run-all2/compare/v8.0.2...v8.0.4)

---
updated-dependencies:
- dependency-name: npm-run-all2
  dependency-version: 8.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-26 18:15:28 +02:00
dependabot[bot]
a2c97413ef Bump electron-context-menu from 4.0.5 to 4.1.0 (#7468)
Bumps [electron-context-menu](https://github.com/sindresorhus/electron-context-menu) from 4.0.5 to 4.1.0.
- [Release notes](https://github.com/sindresorhus/electron-context-menu/releases)
- [Commits](https://github.com/sindresorhus/electron-context-menu/compare/v4.0.5...v4.1.0)

---
updated-dependencies:
- dependency-name: electron-context-menu
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-26 18:14:43 +02:00
Gideon Wentink
6351b8b196 Translated using Weblate (Afrikaans)
Currently translated at 84.7% (822 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/af/
2025-05-26 10:16:12 +02:00
absidue
5a0fdd060c Migrate FtCreatePlaylistPrompt to the composition API (#7439) 2025-05-26 06:22:47 +08:00
PikachuEXE
5a38eddfee ! Fix cannot use alt + D on macOS (#7448) 2025-05-24 17:45:54 +02:00
absidue
3c3e8bb8e7 Use better v-for keys in various places (#7447) 2025-05-24 13:46:42 +00:00
absidue
d3ee2dae96 Fix channel about tab (#7446) 2025-05-24 11:21:56 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
7cb7403860 Translated using Weblate (Tamil)
Currently translated at 87.9% (853 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ta/
2025-05-24 01:07:17 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
ee306a6378 Translated using Weblate (Urdu)
Currently translated at 13.0% (127 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ur/
2025-05-24 01:07:16 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
9e14b07728 Translated using Weblate (Georgian)
Currently translated at 18.4% (179 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-05-24 01:07:15 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
df40ba695b Translated using Weblate (Khmer (Central))
Currently translated at 2.9% (29 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/km/
2025-05-24 01:07:14 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
77cda34d36 Translated using Weblate (Korean)
Currently translated at 60.2% (584 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ko/
2025-05-24 01:07:13 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
5ba6cb5e83 Translated using Weblate (Hebrew)
Currently translated at 99.7% (968 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-24 01:07:12 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
51da390d8b Translated using Weblate (Polish)
Currently translated at 99.3% (964 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
2025-05-24 01:07:12 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
d7a3f17d53 Translated using Weblate (Afrikaans)
Currently translated at 84.3% (818 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/af/
2025-05-23 23:03:16 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
f1fc0e566e Translated using Weblate (Basque)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-05-23 23:03:15 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
64f8ab7c05 Translated using Weblate (Bengali)
Currently translated at 15.1% (147 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bn/
2025-05-23 23:03:15 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
3f6b005d1a Translated using Weblate (Estonian)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
2025-05-23 23:03:14 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
e932bcd6c1 Translated using Weblate (Kurdish)
Currently translated at 36.8% (357 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-05-23 23:03:14 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
5c35f299f9 Translated using Weblate (Arabic)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
2025-05-23 23:03:14 +02:00
absidue
c4bae15b95 Migrate FtAutoLoadNextPageWrapper to the composition API (#7438) 2025-05-22 23:09:22 +02:00
Đức Phan
d2ce23a94f Translated using Weblate (Vietnamese)
Currently translated at 99.1% (962 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vi/
2025-05-20 06:03:01 +02:00
dependabot[bot]
41616b1f4d Bump the eslint group with 4 updates (#7427)
Bumps the eslint group with 4 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint), [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc).


Updates `@eslint/js` from 9.26.0 to 9.27.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.27.0/packages/js)

Updates `eslint` from 9.26.0 to 9.27.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.26.0...v9.27.0)

Updates `eslint-plugin-jsdoc` from 50.6.14 to 50.6.17
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.6.14...v50.6.17)

Updates `eslint-plugin-jsonc` from 2.20.0 to 2.20.1
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.20.0...v2.20.1)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.27.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.27.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 50.6.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-jsonc
  dependency-version: 2.20.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 16:47:58 +00:00
dependabot[bot]
9dafcdd178 Bump electron from 36.2.0 to 36.2.1 (#7430)
Bumps [electron](https://github.com/electron/electron) from 36.2.0 to 36.2.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v36.2.0...v36.2.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 36.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 14:31:53 +00:00
dependabot[bot]
21a7c55ba2 Bump shaka-player from 4.14.11 to 4.14.12 (#7432)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.11 to 4.14.12.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.12/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.11...v4.14.12)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 14:05:12 +00:00
dependabot[bot]
4113a1d69b Bump sass from 1.88.0 to 1.89.0 (#7428)
Bumps [sass](https://github.com/sass/dart-sass) from 1.88.0 to 1.89.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.88.0...1.89.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 13:51:34 +00:00
dependabot[bot]
251f77722a Bump npm-run-all2 from 8.0.1 to 8.0.2 (#7429)
Bumps [npm-run-all2](https://github.com/bcomnes/npm-run-all2) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/bcomnes/npm-run-all2/releases)
- [Changelog](https://github.com/bcomnes/npm-run-all2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bcomnes/npm-run-all2/compare/v8.0.1...v8.0.2)

---
updated-dependencies:
- dependency-name: npm-run-all2
  dependency-version: 8.0.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 12:40:05 +00:00
dependabot[bot]
431c657c37 Bump lefthook from 1.11.12 to 1.11.13 (#7431)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.12 to 1.11.13.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.12...v1.11.13)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.11.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 12:29:42 +00:00
P.O
7929315785 Translated using Weblate (Swedish)
Currently translated at 99.6% (967 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-05-18 20:01:47 +00:00
PikachuEXE
617396972b ! Fix selecting a profile via selector does not close the list (#7419) 2025-05-16 17:49:44 +00:00
Massimo Pissarello
45053d0841 Translated using Weblate (Italian)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
2025-05-16 02:01:43 +00:00
dependabot[bot]
835f96fcf4 Bump undici from 5.28.5 to 5.29.0 (#7418)
Bumps [undici](https://github.com/nodejs/undici) from 5.28.5 to 5.29.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.5...v5.29.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 5.29.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-16 06:09:49 +08:00
J. Lavoie
34a036d53d Translated using Weblate (Turkish)
Currently translated at 99.7% (968 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
2025-05-15 21:01:48 +00:00
J. Lavoie
d475fca0dc Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
2025-05-15 21:01:46 +00:00
J. Lavoie
173136dcc0 Translated using Weblate (Italian)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
2025-05-15 21:01:45 +00:00
J. Lavoie
feae411722 Translated using Weblate (French)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-05-15 21:01:44 +00:00
Rhoslyn Prys
0cc86cf763 Translated using Weblate (Welsh)
Currently translated at 100.0% (970 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
2025-05-15 18:02:09 +02:00
ilyes-fatnassi
963648e1c7 Translated using Weblate (Georgian)
Currently translated at 18.4% (179 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-05-15 18:02:08 +02:00
absidue
a26fe66e41 Fix referrer handling when opening links (#7417) 2025-05-15 01:03:42 +00:00
dependabot[bot]
ab9e6551d7 Bump electron from 35.2.1 to 36.2.0 (#7403)
Bumps [electron](https://github.com/electron/electron) from 35.2.1 to 36.2.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v35.2.1...v36.2.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 36.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-15 05:56:52 +08:00
Yaron Shahrabani
e62b19588e Translated using Weblate (Hebrew)
Currently translated at 99.7% (968 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-14 18:01:58 +02:00
Yaron Shahrabani
84f68a341b Translated using Weblate (Hebrew)
Currently translated at 99.4% (965 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-14 14:01:44 +02:00
Yaron Shahrabani
81088be22d Translated using Weblate (Hebrew)
Currently translated at 99.4% (965 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-14 10:01:44 +02:00
emna-hergli
70da49d3b4 Translated using Weblate (Hebrew)
Currently translated at 99.4% (965 of 970 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-14 00:01:47 +00:00
Hosted Weblate
3daf80b770 Merge branch 'origin/development' into Weblate. 2025-05-13 22:23:33 +00:00
emna-hergli
dd7bae50f2 Translated using Weblate (Hebrew)
Currently translated at 94.5% (918 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-13 22:23:30 +00:00
valhalla-creator
4f32e503fc Translated using Weblate (Slovak)
Currently translated at 61.9% (602 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
2025-05-13 22:23:29 +00:00
absidue
3e0f420ffc Switch from OPEN_EXTERNAL_LINK IPC call to window.open() (#7380) 2025-05-13 22:23:19 +00:00
aziztouhami
5764fd2219 Translated using Weblate (Korean)
Currently translated at 60.1% (584 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ko/
2025-05-14 00:01:45 +02:00
valhalla-creator
d7bbb962bd Translated using Weblate (Slovak)
Currently translated at 59.7% (580 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
2025-05-14 00:01:44 +02:00
emna-hergli
ab2b82f25e Translated using Weblate (Assamese)
Currently translated at 4.7% (46 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-05-14 00:01:43 +02:00
notSelimm
b7b034c57c Translated using Weblate (Romanian)
Currently translated at 99.5% (967 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
2025-05-13 20:06:52 +00:00
notSelimm
733ba4f0aa Translated using Weblate (Croatian)
Currently translated at 99.5% (967 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
2025-05-13 20:06:50 +00:00
valhalla-creator
b8caaada6a Translated using Weblate (Slovak)
Currently translated at 57.7% (561 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
2025-05-13 20:06:49 +00:00
emna-hergli
d9f6cafd9a Translated using Weblate (Assamese)
Currently translated at 3.0% (30 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-05-13 20:06:47 +00:00
absidue
211c0682ab Fix typo in WRITE_TO_DEFAULT_FOLDER IPC call (#7378) 2025-05-13 16:30:23 +00:00
absidue
76adf339a8 Pause player when opening recommended video in external player (#7387) 2025-05-13 12:49:10 +00:00
absidue
e77f62ac30 Migrate the PlaylistInfo component to the composition API (#7383) 2025-05-13 11:50:16 +00:00
absidue
fa5e4d5cb0 Migrate the PrivacySettings component to the composition API (#7397) 2025-05-13 00:20:44 +00:00
absidue
10ebe16439 Migrate the FtProfileSelector component to the composition API (#7388) 2025-05-13 00:06:28 +00:00
dependabot[bot]
70244ab5c7 Bump sass from 1.87.0 to 1.88.0 (#7405)
Bumps [sass](https://github.com/sass/dart-sass) from 1.87.0 to 1.88.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.87.0...1.88.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.88.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 21:50:29 +02:00
dependabot[bot]
6c148e68e4 Bump @babel/preset-env from 7.27.1 to 7.27.2 in the babel group (#7404)
Bumps the babel group with 1 update: [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env).


Updates `@babel/preset-env` from 7.27.1 to 7.27.2
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.2/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-version: 7.27.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 18:39:16 +00:00
dependabot[bot]
0c4cf4a3ff Bump webpack from 5.99.7 to 5.99.8 (#7402)
Bumps [webpack](https://github.com/webpack/webpack) from 5.99.7 to 5.99.8.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.99.7...v5.99.8)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.99.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 18:24:27 +00:00
Drugi Sapog
342b40bcba Translated using Weblate (Belarusian)
Currently translated at 99.0% (962 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/be/
2025-05-12 19:01:48 +02:00
Anon
7c3fb9ee05 Translated using Weblate (Serbian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
2025-05-12 16:01:46 +02:00
Tarak Ben Sedrine
d4076421ed Translated using Weblate (Kurdish)
Currently translated at 36.6% (356 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-05-12 16:01:45 +02:00
dependabot[bot]
85f1e237d2 Bump shaka-player from 4.14.10 to 4.14.11 (#7407)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.10 to 4.14.11.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.11/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.10...v4.14.11)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 13:13:09 +00:00
dependabot[bot]
65831a9a53 Bump the eslint group with 2 updates (#7401)
Bumps the eslint group with 2 updates: [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn).


Updates `eslint-plugin-jsdoc` from 50.6.11 to 50.6.14
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.6.11...v50.6.14)

Updates `eslint-plugin-unicorn` from 59.0.0 to 59.0.1
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v59.0.0...v59.0.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 50.6.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-unicorn
  dependency-version: 59.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 12:14:44 +00:00
dependabot[bot]
cb12f7d76f Bump globals from 16.0.0 to 16.1.0 (#7406)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.0.0 to 16.1.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.0.0...v16.1.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 12:13:34 +00:00
dependabot[bot]
2cc2ed7879 Bump mikefarah/yq from 4.45.2 to 4.45.4 (#7400)
Bumps [mikefarah/yq](https://github.com/mikefarah/yq) from 4.45.2 to 4.45.4.
- [Release notes](https://github.com/mikefarah/yq/releases)
- [Changelog](https://github.com/mikefarah/yq/blob/master/release_notes.txt)
- [Commits](https://github.com/mikefarah/yq/compare/v4.45.2...v4.45.4)

---
updated-dependencies:
- dependency-name: mikefarah/yq
  dependency-version: 4.45.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 12:12:04 +00:00
Bezruchenko Simon
6cf161ca82 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/uk/
2025-05-11 18:01:54 +00:00
Drugi Sapog
3836e32b1c Translated using Weblate (Belarusian)
Currently translated at 97.0% (942 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/be/
2025-05-11 15:02:05 +00:00
cat
58be128c7a Translated using Weblate (Danish)
Currently translated at 99.7% (969 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-05-11 14:01:44 +02:00
absidue
0c9cb4a017 Migrate the UserPlaylists component to the composition API (#7389) 2025-05-11 00:59:19 +00:00
absidue
1c0561258e Migrate the FtToasts component to the composition API (#7390) 2025-05-10 19:07:32 +00:00
aziztouhami
b8c69a951c Translated using Weblate (Turkish)
Currently translated at 99.7% (969 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
2025-05-10 18:03:09 +02:00
aziztouhami
da8223f27a Translated using Weblate (Arabic)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
2025-05-10 18:03:08 +02:00
absidue
01d8ae4e8b Adjust default playback rate to the maximum value when it is too large (#7221) 2025-05-10 13:55:50 +00:00
absidue
db09988e95 Instruct webpack to embed JSON imports as literals instead of JSON.parse (#7391) 2025-05-10 12:48:10 +00:00
absidue
036b3fe0f6 Switch ALLOWED_RENDERER_FILES variable from let to const (#7393) 2025-05-10 12:41:20 +00:00
absidue
11b6110660 Fix n/no-path-concat issues (#7392) 2025-05-10 12:36:50 +00:00
Dream X
a560499ce1 Translated using Weblate (Spanish)
Currently translated at 99.6% (968 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
2025-05-09 15:02:58 +00:00
Dream X
13139c6809 Translated using Weblate (French)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-05-09 15:02:56 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
bd0b04a61f Update PR template to prevent confusion (#7368)
* Update testing notes in PR template

* Remove confusing notes and add introductory note

* Update .github/PULL_REQUEST_TEMPLATE.md

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* remove title header

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-05-08 07:17:37 +08:00
aziztouhami
cc08a73cfd Translated using Weblate (Arabic)
Currently translated at 99.4% (966 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
2025-05-07 11:01:43 +02:00
Telaneo
6dc3689a46 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-05-07 11:01:43 +02:00
Cloud Esp
739353a223 Translated using Weblate (French)
Currently translated at 99.3% (965 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-05-07 11:01:42 +02:00
GiannosOB
7a8920e366 Translated using Weblate (Greek)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-05-06 17:05:35 +02:00
Rusi Dimitrov
6517158d7e Translated using Weblate (Bulgarian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
2025-05-06 12:01:46 +02:00
PikachuEXE
dd23bdaddc Hide member only videos (Local API) (#7208)
* * Show badge for member only videos (Local API)

* * Hide members only videos instead

* * Handle member first videos

* * Reduce array creation

* ! Fix incorrect code, use #reduce instead

* * Remove unnecessary changes
2025-05-06 03:24:03 +00:00
Yaron Shahrabani
e351065fa4 Translated using Weblate (Hebrew)
Currently translated at 92.0% (894 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-06 00:01:44 +02:00
oussama-madimagh
2b1d7a35ff Translated using Weblate (Spanish (Mexico))
Currently translated at 61.7% (600 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
2025-05-06 00:01:43 +02:00
dependabot[bot]
1212dd1c4d Bump electron-builder from 26.0.14 to 26.0.15 (#7362)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.0.14 to 26.0.15.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v26.0.15/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.0.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 18:43:09 +00:00
dependabot[bot]
abe34a2d30 Bump mikefarah/yq from 4.45.1 to 4.45.2 (#7355)
Bumps [mikefarah/yq](https://github.com/mikefarah/yq) from 4.45.1 to 4.45.2.
- [Release notes](https://github.com/mikefarah/yq/releases)
- [Changelog](https://github.com/mikefarah/yq/blob/master/release_notes.txt)
- [Commits](https://github.com/mikefarah/yq/compare/v4.45.1...v4.45.2)

---
updated-dependencies:
- dependency-name: mikefarah/yq
  dependency-version: 4.45.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 18:49:41 +02:00
dependabot[bot]
afe41b6636 Bump autolinker from 4.1.1 to 4.1.5 (#7359)
Bumps [autolinker](https://github.com/gregjacobs/Autolinker.js) from 4.1.1 to 4.1.5.
- [Release notes](https://github.com/gregjacobs/Autolinker.js/releases)
- [Commits](https://github.com/gregjacobs/Autolinker.js/compare/v4.1.1...v4.1.5)

---
updated-dependencies:
- dependency-name: autolinker
  dependency-version: 4.1.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 18:49:22 +02:00
dependabot[bot]
5c77d4c052 Bump the babel group with 3 updates (#7360)
Bumps the babel group with 3 updates: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core), [@babel/plugin-transform-class-properties](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-properties) and [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env).


Updates `@babel/core` from 7.26.10 to 7.27.1
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.1/packages/babel-core)

Updates `@babel/plugin-transform-class-properties` from 7.25.9 to 7.27.1
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.1/packages/babel-plugin-transform-class-properties)

Updates `@babel/preset-env` from 7.26.9 to 7.27.1
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.1/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-version: 7.27.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: babel
- dependency-name: "@babel/plugin-transform-class-properties"
  dependency-version: 7.27.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: babel
- dependency-name: "@babel/preset-env"
  dependency-version: 7.27.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 17:32:58 +02:00
dependabot[bot]
506834d3e5 Bump npm-run-all2 from 7.0.2 to 8.0.1 (#7361)
Bumps [npm-run-all2](https://github.com/bcomnes/npm-run-all2) from 7.0.2 to 8.0.1.
- [Release notes](https://github.com/bcomnes/npm-run-all2/releases)
- [Changelog](https://github.com/bcomnes/npm-run-all2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bcomnes/npm-run-all2/compare/v7.0.2...v8.0.1)

---
updated-dependencies:
- dependency-name: npm-run-all2
  dependency-version: 8.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 17:29:43 +02:00
dependabot[bot]
ef2454559d Bump the eslint group with 3 updates (#7356)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue).


Updates `@eslint/js` from 9.25.1 to 9.26.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.26.0/packages/js)

Updates `eslint` from 9.25.1 to 9.26.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.25.1...v9.26.0)

Updates `eslint-plugin-vue` from 10.0.0 to 10.1.0
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v10.0.0...v10.1.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-vue
  dependency-version: 10.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 14:51:38 +00:00
dependabot[bot]
29625c7dc0 Bump shaka-player from 4.14.9 to 4.14.10 (#7357)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.9 to 4.14.10.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.10/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.9...v4.14.10)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 13:56:36 +00:00
Sveinn í Felli
a91d457425 Translated using Weblate (Icelandic)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
2025-05-05 14:03:08 +02:00
ColorfulRhino
df66bc46e4 Translated using Weblate (German)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
2025-05-05 14:03:07 +02:00
Cloud Esp
783463cfcc Translated using Weblate (French)
Currently translated at 99.3% (965 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-05-05 10:49:13 +02:00
Eder Etxebarria Rojo
897587bc66 Translated using Weblate (Basque)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/
2025-05-05 10:01:48 +02:00
Massimo Pissarello
e5376351c6 Translated using Weblate (Italian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
2025-05-05 10:01:47 +02:00
大王叫我来巡山
bc78b8985b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
2025-05-05 10:01:45 +02:00
Markus Gaugg
33a3bfccdc Translated using Weblate (German)
Currently translated at 99.8% (970 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
2025-05-05 00:01:43 +02:00
Jose Delvani
3a6c9aea7d Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2025-05-04 20:01:43 +00:00
Priit Jõerüüt
7f0c33ecff Translated using Weblate (Estonian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
2025-05-04 16:02:52 +00:00
Jose Delvani
260bc6bf47 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2025-05-04 16:02:50 +00:00
Fjuro
2c448f08ee Translated using Weblate (Czech)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
2025-05-04 14:04:58 +00:00
summoner001
950d22837a Translated using Weblate (Hungarian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
2025-05-04 14:04:57 +00:00
Fjuro
8b41e6696b Translated using Weblate (Czech)
Currently translated at 99.5% (967 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
2025-05-04 14:43:39 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
d95367e21c tooltip corrections (#7351) 2025-05-04 14:17:45 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
16fd0692d2 Rename Community to Posts (#7349)
* Rename Community to Posts

* Update Post.vue
2025-05-04 14:17:03 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
7c2f64402c Translated using Weblate (Norwegian Nynorsk)
Currently translated at 56.7% (551 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nn/
2025-05-03 19:10:50 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
2dd5d31290 Translated using Weblate (Croatian)
Currently translated at 99.2% (964 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
2025-05-03 19:10:49 +02:00
absidue
da2bac8464 Rewrite download code to avoid using Node APIs in the renderer (#7347) 2025-05-03 08:43:08 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
b260d42a9d README Corrections (#7342)
* README corrections

* Update README.md

Co-authored-by: PikachuEXE <git@pikachuexe.net>

* remove community from posts

---------

Co-authored-by: PikachuEXE <git@pikachuexe.net>
2025-05-03 08:40:28 -04:00
Massimo Pissarello
0bae38b292 Translated using Weblate (Italian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
2025-05-03 06:04:42 +02:00
elid
e2a53d0c86 Translated using Weblate (Hebrew)
Currently translated at 92.5% (899 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-05-02 15:03:00 +02:00
Telaneo
b6d017a54e Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-05-02 07:02:58 +02:00
absidue
fb170ec930 Migrate FtNotificationBanner and FtLoader to the composition API (#7338) 2025-05-02 08:26:53 +08:00
absidue
e19dbc63df Migrate the FtListVideoNumbered component to the composition API (#7334) 2025-05-02 08:22:43 +08:00
absidue
fc1c3484a3 Migrate DownloadSettings and SubscriptionSettings to the composition API (#7335) 2025-05-02 08:19:29 +08:00
efb4f5ff-1298-471a-8973-3d47447115dc
0703959345 Translated using Weblate (French)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-05-01 23:07:17 +02:00
Tarak Ben Sedrine
6e84181fd8 Translated using Weblate (Assamese)
Currently translated at 2.3% (23 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-05-01 19:01:47 +00:00
Tarak Ben Sedrine
a6c2b8f553 Translated using Weblate (French)
Currently translated at 99.8% (970 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-05-01 19:01:46 +00:00
Alexandr Chernysh
ecf9e95b1d Translated using Weblate (Russian)
Currently translated at 99.4% (966 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
2025-05-01 18:01:43 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
6470cf33c5 Bump package version from 0.23.4 to 0.23.5 (#7328) 2025-05-01 08:18:10 +08:00
absidue
f9c53f36c5 Use the streaming data from MWEB to avoid SABR-only responses (#7327) 2025-05-01 08:17:53 +08:00
Telaneo
efc3d63715 Translated using Weblate (Norwegian Bokmål)
Currently translated at 99.3% (965 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-30 23:01:44 +00:00
oussama-madimagh
8182909419 Translated using Weblate (Spanish (Mexico))
Currently translated at 57.8% (562 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
2025-04-29 18:03:04 +02:00
absidue
f37cfd771d Change no-array-push-push to prefer-single-call in eslint.config.mjs (#7300) 2025-04-29 05:51:24 +08:00
dedakir923
0fefc54ce0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2025-04-28 21:01:43 +00:00
dependabot[bot]
b67d5ff3a1 Bump electron-builder from 26.0.13 to 26.0.14 (#7290)
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.0.13 to 26.0.14.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v26.0.14/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.0.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 18:59:22 +02:00
Telaneo
1e338226fa Translated using Weblate (Norwegian Bokmål)
Currently translated at 94.6% (919 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-28 16:07:35 +02:00
dependabot[bot]
208627d1a7 Bump electron from 35.2.0 to 35.2.1 (#7296)
Bumps [electron](https://github.com/electron/electron) from 35.2.0 to 35.2.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v35.2.0...v35.2.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 35.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:28:00 +08:00
dependabot[bot]
10d33ab6c8 Bump webpack from 5.99.6 to 5.99.7 (#7294)
Bumps [webpack](https://github.com/webpack/webpack) from 5.99.6 to 5.99.7.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.99.6...v5.99.7)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.99.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:27:44 +08:00
dependabot[bot]
be0132e12b Bump sass from 1.86.3 to 1.87.0 (#7297)
Bumps [sass](https://github.com/sass/dart-sass) from 1.86.3 to 1.87.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.86.3...1.87.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.87.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:13:12 +08:00
dependabot[bot]
a2da0bff8d Bump autolinker from 4.1.0 to 4.1.1 (#7295)
Bumps [autolinker](https://github.com/gregjacobs/Autolinker.js) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/gregjacobs/Autolinker.js/releases)
- [Commits](https://github.com/gregjacobs/Autolinker.js/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: autolinker
  dependency-version: 4.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:12:53 +08:00
dependabot[bot]
16eb485e68 Bump lefthook from 1.11.10 to 1.11.12 (#7293)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.10 to 1.11.12.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.10...v1.11.12)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.11.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:12:39 +08:00
dependabot[bot]
f8b767bca4 Bump marked from 15.0.8 to 15.0.11 (#7292)
Bumps [marked](https://github.com/markedjs/marked) from 15.0.8 to 15.0.11.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v15.0.8...v15.0.11)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 15.0.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:12:10 +08:00
dependabot[bot]
b2cbb5eff9 Bump shaka-player from 4.14.8 to 4.14.9 (#7291)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.8 to 4.14.9.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.9/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.8...v4.14.9)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:12:02 +08:00
dependabot[bot]
3065ff2d09 Bump the eslint group with 5 updates (#7288)
Bumps the eslint group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.25.0` | `9.25.1` |
| [eslint](https://github.com/eslint/eslint) | `9.25.0` | `9.25.1` |
| [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) | `50.6.9` | `50.6.11` |
| [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) | `58.0.0` | `59.0.0` |
| [eslint-plugin-yml](https://github.com/ota-meshi/eslint-plugin-yml) | `1.17.0` | `1.18.0` |


Updates `@eslint/js` from 9.25.0 to 9.25.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.25.1/packages/js)

Updates `eslint` from 9.25.0 to 9.25.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.25.0...v9.25.1)

Updates `eslint-plugin-jsdoc` from 50.6.9 to 50.6.11
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.6.9...v50.6.11)

Updates `eslint-plugin-unicorn` from 58.0.0 to 59.0.0
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v58.0.0...v59.0.0)

Updates `eslint-plugin-yml` from 1.17.0 to 1.18.0
- [Release notes](https://github.com/ota-meshi/eslint-plugin-yml/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-yml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-yml/compare/v1.17.0...v1.18.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.25.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.25.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 50.6.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
- dependency-name: eslint-plugin-unicorn
  dependency-version: 59.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: eslint
- dependency-name: eslint-plugin-yml
  dependency-version: 1.18.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 21:11:43 +08:00
dependabot[bot]
cd034f24aa Bump stylelint from 16.18.0 to 16.19.1 in the stylelint group (#7289)
Bumps the stylelint group with 1 update: [stylelint](https://github.com/stylelint/stylelint).


Updates `stylelint` from 16.18.0 to 16.19.1
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.18.0...16.19.1)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.19.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 12:25:36 +00:00
absidue
62688862dc Migrate the FtTooltip component to the composition API (#7282) 2025-04-27 14:57:28 +02:00
Yaron Shahrabani
d5f6f7b61a Translated using Weblate (Hebrew)
Currently translated at 92.4% (898 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-04-26 12:03:08 +00:00
absidue
00cd807924 Ensure there is at most one power save blocker per open window (#7247) 2025-04-26 00:58:35 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
98195cc2e8 Change author name (#7216)
* Change author name

* change to FreeTube Team
2025-04-25 22:27:24 +00:00
absidue
1ebb9c6872 Migrate ExternalPlayerSettings and SponsorBlockSettings to the composition API (#7267) 2025-04-25 18:26:42 -04:00
absidue
4f49f24dc7 Migrate the FtButton component to the composition API (#7266) 2025-04-25 18:25:37 -04:00
absidue
87dbaeb895 Cleanup event listener pass-through inline handlers (#7268) 2025-04-25 22:25:26 +00:00
titus
cd6c881fcf Feature/add Windows/MacOS Taskbar dock/jumplist task 'New Window' (#7049)
* Add windows Jumplist Task "New Window"

Now uses can open new Freetube window by right clicking the Freetube taskbar icon and choosing "New Window"

* Windows: Open New Window from Taskbar Jumplist

Checks if using Windows, if so adds taskbar jumplist task to open New Window from windows taskbar.

* Update src/main/index.js

Update New Window Definition

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Add Mac & Linux docking/Taskbar New Window buttons

* Add import 'tray', fix linting cleaned up linux Tray loader code

* 2 space Linting fix

* Linting fix

* Linting fix

* Linting fix

* fix linting ghost in the machine

* Remove 'tray' import & linux taskbar references entirely

To add the "New Window" action to FreeTube's desktop entry across all Linux distributions, you need to modify the ebuilder.config.js file. Currently, the Linux configuration is very basic and doesn't include any desktop file customizations.

* New Window functionality to global Linux Freetube.Desktop Entry

Currently if you click freetube desktop icons or pinned links it only opens one window at a time, or brings it to the foreground, (something you can do with the freetube task in taskbar anyway), now it opens as many as needed

* linting fix

* Update index.js

Switched to more specific app.setUserTasks() API; Removed code comments; moved mac dock new window inside the existing event handler for the ready event instead of adding another one;

* Update ebuilder.config.js

revert linux taskbar icon tweak

* Update index.js

Trying to fix   363:8  error  Parsing error: Unexpected token )

* Update index.js

* Update index.js, use more specific app.setUserTasks() API

use more specific app.setUserTasks() API

* move mac dock inside the existing event handler for the ready event instead of adding anew

---------

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-04-25 23:15:21 +02:00
elid
167cc16be7 Translated using Weblate (Hebrew)
Currently translated at 92.4% (898 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-04-25 10:35:30 +02:00
Telaneo
39f186eea6 Translated using Weblate (Norwegian Bokmål)
Currently translated at 94.0% (913 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-24 22:01:43 +00:00
Retrial
a995858273 Translated using Weblate (Greek)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-24 12:03:10 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
9a52c4cda1 [Dev] Bump package version from 0.23.3 to 0.23.4 (#7255) 2025-04-23 21:03:45 +00:00
PikachuEXE
8da0b41eb0 Update youtubei.js to latest (#7252)
* ^ Update youtubei.js to latest

* Disable extra request for config fetching

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-04-23 20:55:30 +00:00
Rusi Dimitrov
ef83221a8e Translated using Weblate (Bulgarian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
2025-04-23 19:01:46 +00:00
Telaneo
58ef91ff7c Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.7% (910 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-23 07:01:47 +00:00
Telaneo
14d1acae1d Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.7% (910 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-23 04:03:17 +02:00
cat
45eee566b4 Translated using Weblate (Danish)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-04-22 19:02:56 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
308bd0518a Translated using Weblate (Awadhi)
Currently translated at 11.3% (110 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/awa/
2025-04-22 16:05:11 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
622d41bd2a Translated using Weblate (Flemish (West))
Currently translated at 10.4% (101 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vls/
2025-04-22 16:05:10 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
aaf1ed6c04 Translated using Weblate (Afrikaans)
Currently translated at 84.9% (825 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/af/
2025-04-22 16:05:10 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
70054e81bf Translated using Weblate (Odia)
Currently translated at 7.1% (69 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/or/
2025-04-22 16:05:09 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
89c5422393 Translated using Weblate (Urdu)
Currently translated at 13.3% (130 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ur/
2025-04-22 16:05:09 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
a6252238c7 Translated using Weblate (Georgian)
Currently translated at 16.8% (164 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-04-22 16:05:09 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
608fc6b87e Translated using Weblate (Azerbaijani)
Currently translated at 31.9% (310 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/az/
2025-04-22 16:05:09 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
861516523f Translated using Weblate (Khmer (Central))
Currently translated at 2.8% (28 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/km/
2025-04-22 16:05:08 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
31febb973b Translated using Weblate (Nepali)
Currently translated at 8.1% (79 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ne/
2025-04-22 16:05:08 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
e7e8a34cf3 Translated using Weblate (Persian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fa/
2025-04-22 16:05:08 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
c50fa6351b Translated using Weblate (Bengali)
Currently translated at 15.1% (147 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bn/
2025-04-22 16:05:07 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
fa5a44ef58 Translated using Weblate (Bosnian)
Currently translated at 9.6% (94 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bs/
2025-04-22 16:05:07 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
0ae9a4382b Translated using Weblate (Hindi)
Currently translated at 16.5% (161 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hi/
2025-04-22 16:05:07 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
f474d46315 Translated using Weblate (Korean)
Currently translated at 58.2% (566 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ko/
2025-04-22 16:05:07 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
e41efed3f5 Translated using Weblate (Sinhala)
Currently translated at 6.1% (60 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/si/
2025-04-22 16:05:06 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
f030f46844 Translated using Weblate (Bulgarian)
Currently translated at 99.2% (964 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
2025-04-22 16:05:06 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
6771003bb7 Translated using Weblate (Esperanto)
Currently translated at 8.9% (87 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eo/
2025-04-22 16:05:05 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
f65158f6ce Translated using Weblate (Filipino)
Currently translated at 8.6% (84 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fil/
2025-04-22 16:05:05 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
49fdd2566c Translated using Weblate (Arabic)
Currently translated at 99.8% (970 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
2025-04-22 16:05:05 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
5818db93c8 Translated using Weblate (Assamese)
Currently translated at 2.1% (21 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-04-22 16:05:04 +02:00
notSelimm
3f6906c7f8 Translated using Weblate (Greek)
Currently translated at 99.7% (969 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-22 11:01:45 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
0829961548 Translated using Weblate (Burmese)
Currently translated at 2.3% (23 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/my/
2025-04-21 22:01:43 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
087f8649cd Translated using Weblate (Khmer (Central))
Currently translated at 2.5% (25 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/km/
2025-04-21 22:01:42 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
170de566f7 Translated using Weblate (Awadhi)
Currently translated at 11.2% (109 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/awa/
2025-04-21 22:05:29 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
b587e8e944 Translated using Weblate (Tamil)
Currently translated at 88.5% (860 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ta/
2025-04-21 22:05:29 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
99e50f6649 Translated using Weblate (Breton)
Currently translated at 84.0% (816 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-04-21 22:05:28 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
eb1b3cd9ca Translated using Weblate (Flemish (West))
Currently translated at 10.2% (100 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vls/
2025-04-21 22:05:28 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
d66a5fb1ee Translated using Weblate (Latvian)
Currently translated at 57.7% (561 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lv/
2025-04-21 22:05:28 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
b3113188dc Translated using Weblate (Tigrinya)
Currently translated at 2.0% (20 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ti/
2025-04-21 22:05:27 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
0cb7b40c47 Translated using Weblate (Urdu)
Currently translated at 13.1% (128 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ur/
2025-04-21 22:05:27 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
05d7bd2170 Translated using Weblate (Alemannic)
Currently translated at 10.2% (100 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gsw/
2025-04-21 22:05:27 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
229771303f Translated using Weblate (Georgian)
Currently translated at 16.7% (163 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-04-21 22:05:27 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
deede5a1ab Translated using Weblate (Azerbaijani)
Currently translated at 31.8% (309 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/az/
2025-04-21 22:05:27 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
e3dfc40f4b Translated using Weblate (Nepali)
Currently translated at 8.0% (78 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ne/
2025-04-21 22:05:26 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
76ae85d9d1 Translated using Weblate (Lithuanian)
Currently translated at 55.8% (542 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lt/
2025-04-21 22:05:26 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
19cb8b8002 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 56.7% (551 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nn/
2025-04-21 22:05:26 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
700f86d0ec Translated using Weblate (Bengali)
Currently translated at 15.0% (146 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bn/
2025-04-21 22:05:26 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
6e5441bbef Translated using Weblate (Bosnian)
Currently translated at 9.5% (93 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bs/
2025-04-21 22:05:25 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
bd13202377 Translated using Weblate (Galician)
Currently translated at 57.2% (556 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gl/
2025-04-21 22:05:25 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
a050995807 Translated using Weblate (Hindi)
Currently translated at 16.4% (160 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hi/
2025-04-21 22:05:25 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
8353289450 Translated using Weblate (Korean)
Currently translated at 58.2% (566 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ko/
2025-04-21 22:05:25 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
6ced92e3b0 Translated using Weblate (Hebrew)
Currently translated at 91.6% (890 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
2025-04-21 22:05:24 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
794c740c2f Translated using Weblate (Slovenian)
Currently translated at 45.6% (443 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sl/
2025-04-21 22:05:24 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
a1400f9f83 Translated using Weblate (Kurdish)
Currently translated at 27.7% (269 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-04-21 22:05:24 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
226dcb2486 Translated using Weblate (Latin)
Currently translated at 11.7% (114 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/la/
2025-04-21 22:05:23 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
6c61fe9d43 Translated using Weblate (Catalan)
Currently translated at 39.2% (381 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ca/
2025-04-21 22:05:23 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
58044de029 Translated using Weblate (Esperanto)
Currently translated at 8.7% (85 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eo/
2025-04-21 22:05:23 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
d1d780ccbb Translated using Weblate (Filipino)
Currently translated at 8.5% (83 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fil/
2025-04-21 22:05:23 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
2b70481bf8 Translated using Weblate (Spanish (Argentina))
Currently translated at 51.5% (501 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_AR/
2025-04-21 22:05:23 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
1c7f70c485 Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.5% (908 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-21 22:05:22 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
1b86f40c7b Translated using Weblate (Slovak)
Currently translated at 57.5% (559 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
2025-04-21 22:05:22 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
8e48e2c2f6 Translated using Weblate (Spanish (Mexico))
Currently translated at 54.2% (527 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
2025-04-21 22:05:22 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
83450c6a12 Translated using Weblate (Finnish)
Currently translated at 76.2% (740 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fi/
2025-04-21 22:05:21 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
48672effcf Add a note to PR template to discourage AI PRs (#7224) 2025-04-21 10:13:01 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
c7a3baba2c Translated using Weblate (Awadhi)
Currently translated at 11.1% (108 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/awa/
2025-04-21 13:05:55 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
eb8e775367 Translated using Weblate (Burmese)
Currently translated at 1.8% (18 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/my/
2025-04-21 13:05:54 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
fc6e4cce8b Translated using Weblate (Tamil)
Currently translated at 88.4% (859 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ta/
2025-04-21 13:05:53 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
da6c98023d Translated using Weblate (Breton)
Currently translated at 83.9% (815 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-04-21 13:05:52 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
5b98015488 Translated using Weblate (Flemish (West))
Currently translated at 10.1% (99 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vls/
2025-04-21 13:05:51 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
d380a87748 Translated using Weblate (Latvian)
Currently translated at 57.6% (560 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lv/
2025-04-21 13:05:49 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
35dd2e5614 Translated using Weblate (Tigrinya)
Currently translated at 1.9% (19 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ti/
2025-04-21 13:05:48 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
167c80e0b4 Translated using Weblate (Urdu)
Currently translated at 13.0% (127 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ur/
2025-04-21 13:05:47 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
999bf4303a Translated using Weblate (Alemannic)
Currently translated at 10.1% (99 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gsw/
2025-04-21 13:05:47 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
ae8e7b6cab Translated using Weblate (Georgian)
Currently translated at 16.6% (162 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-04-21 13:05:46 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
0b8c42a8c0 Translated using Weblate (Toki Pona)
Currently translated at 6.2% (61 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tok/
2025-04-21 13:05:45 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
37a9be1e4c Translated using Weblate (Azerbaijani)
Currently translated at 31.7% (308 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/az/
2025-04-21 13:05:44 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
fdd42c0ebd Translated using Weblate (Khmer (Central))
Currently translated at 2.1% (21 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/km/
2025-04-21 13:05:43 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
b5228a50e5 Translated using Weblate (Nepali)
Currently translated at 7.9% (77 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ne/
2025-04-21 13:05:42 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
e33f034aff Translated using Weblate (Lithuanian)
Currently translated at 55.7% (541 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lt/
2025-04-21 13:05:41 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
a47499d8b1 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 56.6% (550 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nn/
2025-04-21 13:05:40 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
311d147264 Translated using Weblate (Bengali)
Currently translated at 14.9% (145 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bn/
2025-04-21 13:05:39 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
cbeaaf77ad Translated using Weblate (Bosnian)
Currently translated at 9.4% (92 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bs/
2025-04-21 13:05:39 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
c580c4c63f Translated using Weblate (Galician)
Currently translated at 57.1% (555 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gl/
2025-04-21 13:05:38 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
132e474580 Translated using Weblate (Hindi)
Currently translated at 16.3% (159 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hi/
2025-04-21 13:05:37 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
2856a57df2 Translated using Weblate (Santali)
Currently translated at 2.0% (20 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sat/
2025-04-21 13:05:36 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
fb5369e78c Translated using Weblate (Sinhala)
Currently translated at 6.0% (59 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/si/
2025-04-21 13:05:35 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
e47ea4f1d2 Translated using Weblate (Slovenian)
Currently translated at 45.5% (442 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sl/
2025-04-21 13:05:34 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
9ab3b088aa Translated using Weblate (Kurdish)
Currently translated at 27.6% (268 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-04-21 13:05:33 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
b1e8392314 Translated using Weblate (Latin)
Currently translated at 11.6% (113 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/la/
2025-04-21 13:05:32 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
592319d27c Translated using Weblate (Catalan)
Currently translated at 39.1% (380 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ca/
2025-04-21 13:05:31 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
8a3261ef5e Translated using Weblate (Esperanto)
Currently translated at 8.6% (84 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eo/
2025-04-21 13:05:30 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
e0e51a701a Translated using Weblate (Filipino)
Currently translated at 8.4% (82 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fil/
2025-04-21 13:05:29 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
a3071652ea Translated using Weblate (Spanish (Argentina))
Currently translated at 51.4% (500 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_AR/
2025-04-21 13:05:28 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
43a4d24268 Translated using Weblate (Slovak)
Currently translated at 57.4% (558 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
2025-04-21 13:05:27 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
9bda41e104 Translated using Weblate (Spanish (Mexico))
Currently translated at 54.1% (526 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
2025-04-21 13:05:26 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
ab01ba9ab7 Translated using Weblate (Assamese)
Currently translated at 1.9% (19 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-04-21 13:05:25 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
36941b88c3 Translated using Weblate (French)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-04-21 13:05:24 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
08c97c4bac Translated using Weblate (Finnish)
Currently translated at 76.1% (739 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fi/
2025-04-21 13:05:22 +00:00
dependabot[bot]
7fafa8bf36 Bump shaka-player from 4.14.7 to 4.14.8 (#7243)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.7 to 4.14.8.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.8/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.7...v4.14.8)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 13:43:55 +02:00
dependabot[bot]
292619799a Bump electron from 35.1.5 to 35.2.0 (#7244)
Bumps [electron](https://github.com/electron/electron) from 35.1.5 to 35.2.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v35.1.5...v35.2.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 35.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 13:42:18 +02:00
dependabot[bot]
52e438945e Bump the eslint group with 2 updates (#7242)
Bumps the eslint group with 2 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) and [eslint](https://github.com/eslint/eslint).


Updates `@eslint/js` from 9.24.0 to 9.25.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.25.0/packages/js)

Updates `eslint` from 9.24.0 to 9.25.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.24.0...v9.25.0)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 13:23:44 +02:00
dependabot[bot]
c559077db2 Bump webpack from 5.99.5 to 5.99.6 (#7245)
Bumps [webpack](https://github.com/webpack/webpack) from 5.99.5 to 5.99.6.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.99.5...v5.99.6)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.99.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 12:23:49 +02:00
dependabot[bot]
c7a5fd08ff Bump lefthook from 1.11.9 to 1.11.10 (#7241)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.9 to 1.11.10.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.9...v1.11.10)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.11.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 11:53:36 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
973e50201c Translated using Weblate (Burmese)
Currently translated at 1.2% (12 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/my/
2025-04-21 11:51:52 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
30706031d6 Translated using Weblate (Awadhi)
Currently translated at 10.8% (105 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/awa/
2025-04-21 11:01:52 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
b316fd71ee Translated using Weblate (Burmese)
Currently translated at 0.8% (8 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/my/
2025-04-21 11:01:51 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
6e9091338c Translated using Weblate (Afrikaans)
Currently translated at 84.9% (825 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/af/
2025-04-21 11:01:50 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
adff5bef25 Translated using Weblate (Tigre)
Currently translated at 0.1% (1 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tig/
2025-04-21 11:01:49 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
a392bf3a18 Translated using Weblate (Georgian)
Currently translated at 16.3% (159 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-04-21 11:01:48 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
a32e584e24 Translated using Weblate (Khmer (Central))
Currently translated at 1.5% (15 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/km/
2025-04-21 11:01:47 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
56e5e0727d Translated using Weblate (Persian)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fa/
2025-04-21 11:01:46 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
8a4ff80a8d Translated using Weblate (Santali)
Currently translated at 1.4% (14 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sat/
2025-04-21 11:01:45 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
35ddebb430 Translated using Weblate (Greek)
Currently translated at 98.9% (961 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-21 11:01:44 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
7a423c3d05 Translated using Weblate (Dutch)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
2025-04-21 11:01:43 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
657004519d Translated using Weblate (French)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-04-21 11:01:42 +02:00
dependabot[bot]
9dc6e0345d Bump http-proxy-middleware from 2.0.7 to 2.0.9 (#7239)
Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 2.0.7 to 2.0.9.
- [Release notes](https://github.com/chimurai/http-proxy-middleware/releases)
- [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/v2.0.9/CHANGELOG.md)
- [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7...v2.0.9)

---
updated-dependencies:
- dependency-name: http-proxy-middleware
  dependency-version: 2.0.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 11:01:28 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
0b5029f083 Translated using Weblate (Nepali)
Currently translated at 7.6% (74 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ne/
2025-04-21 00:01:47 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
d44b5d4ef0 Translated using Weblate (Bosnian)
Currently translated at 9.1% (89 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bs/
2025-04-21 00:01:46 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
6dbf5ba517 Translated using Weblate (Sinhala)
Currently translated at 5.7% (56 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/si/
2025-04-21 00:01:44 +00:00
PikachuEXE
02a3acfd39 ^ Update electron-builder to latest pre-release version (#7206) 2025-04-20 23:59:33 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
69a8194c47 Translated using Weblate (Awadhi)
Currently translated at 10.8% (105 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/awa/
2025-04-20 22:02:17 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
f471aa0ff9 Translated using Weblate (Tamil)
Currently translated at 88.2% (857 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ta/
2025-04-20 22:02:16 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
8620b108a5 Translated using Weblate (Breton)
Currently translated at 83.7% (813 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/br/
2025-04-20 22:02:15 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
4202af65bc Translated using Weblate (Flemish (West))
Currently translated at 9.8% (96 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/vls/
2025-04-20 22:02:14 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
25b8ae0d98 Translated using Weblate (Kurdish (Central))
Currently translated at 41.5% (403 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ckb/
2025-04-20 22:02:12 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
4e49e69b5e Translated using Weblate (Latvian)
Currently translated at 57.4% (558 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lv/
2025-04-20 22:02:11 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
4ff4c619e7 Translated using Weblate (Tigrinya)
Currently translated at 1.8% (18 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ti/
2025-04-20 22:02:09 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
159ef1bbcc Translated using Weblate (Odia)
Currently translated at 7.0% (68 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/or/
2025-04-20 22:02:08 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
e5078ed5e8 Translated using Weblate (Urdu)
Currently translated at 12.7% (124 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ur/
2025-04-20 22:02:07 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
18bcff2b08 Translated using Weblate (Alemannic)
Currently translated at 9.8% (96 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gsw/
2025-04-20 22:02:06 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
80e5328826 Translated using Weblate (Georgian)
Currently translated at 16.2% (158 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-04-20 22:02:05 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
982e09d325 Translated using Weblate (Azerbaijani)
Currently translated at 31.4% (305 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/az/
2025-04-20 22:02:04 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
935764a4f4 Translated using Weblate (Nepali)
Currently translated at 7.5% (73 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ne/
2025-04-20 22:02:03 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
8fb9190485 Translated using Weblate (Lithuanian)
Currently translated at 55.5% (539 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lt/
2025-04-20 22:02:02 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
70b547a055 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 56.4% (548 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nn/
2025-04-20 22:02:01 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
36acdef1bd Translated using Weblate (Bengali)
Currently translated at 14.6% (142 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bn/
2025-04-20 22:02:00 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
ffa2f435de Translated using Weblate (Bosnian)
Currently translated at 9.0% (88 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bs/
2025-04-20 22:01:59 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
97931a3105 Translated using Weblate (Galician)
Currently translated at 56.9% (553 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gl/
2025-04-20 22:01:58 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
60f2b61482 Translated using Weblate (Hindi)
Currently translated at 16.0% (156 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hi/
2025-04-20 22:01:57 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
d28d8db9c3 Translated using Weblate (Sinhala)
Currently translated at 5.6% (55 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/si/
2025-04-20 22:01:56 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
4d220c11f1 Translated using Weblate (Slovenian)
Currently translated at 45.3% (440 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sl/
2025-04-20 22:01:55 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
e4a749b251 Translated using Weblate (Kurdish)
Currently translated at 27.2% (265 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-04-20 22:01:54 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
aa0dcc9729 Translated using Weblate (Latin)
Currently translated at 11.3% (110 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/la/
2025-04-20 22:01:54 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
8f345fbc82 Translated using Weblate (Catalan)
Currently translated at 38.9% (378 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ca/
2025-04-20 22:01:53 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
3f930075fe Translated using Weblate (Indonesian)
Currently translated at 99.3% (965 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/id/
2025-04-20 22:01:51 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
4d62bcfb0c Translated using Weblate (Filipino)
Currently translated at 8.1% (79 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fil/
2025-04-20 22:01:50 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
fd75b00671 Translated using Weblate (Spanish (Argentina))
Currently translated at 51.1% (497 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_AR/
2025-04-20 22:01:49 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
16dae4f96b Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.4% (907 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-20 22:01:47 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
7774b0f6d7 Translated using Weblate (Slovak)
Currently translated at 57.2% (556 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sk/
2025-04-20 22:01:46 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
e39da803a8 Translated using Weblate (Spanish (Mexico))
Currently translated at 53.9% (524 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
2025-04-20 22:01:45 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
4a8e54aa86 Translated using Weblate (Assamese)
Currently translated at 1.8% (18 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-04-20 22:01:44 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
0171c71c73 Translated using Weblate (Finnish)
Currently translated at 75.9% (737 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fi/
2025-04-20 22:01:43 +00:00
absidue
e6122a7b44 Support LockupView videos in the up next feed (#7186) 2025-04-21 04:08:30 +08:00
absidue
faf0610a7a Remove author and authorId from the required list of video keys for playlists (#7083) 2025-04-20 15:09:03 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
c8eef30527 Translated using Weblate (Odia)
Currently translated at 6.7% (66 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/or/
2025-04-20 19:07:41 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
8a14728261 Translated using Weblate (Nepali)
Currently translated at 7.2% (70 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ne/
2025-04-20 19:07:40 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
65e796b84c Translated using Weblate (Hindi)
Currently translated at 15.7% (153 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hi/
2025-04-20 19:07:40 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
dbaff8938c Translated using Weblate (Sinhala)
Currently translated at 5.3% (52 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/si/
2025-04-20 19:07:39 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
de207174f4 Translated using Weblate (Slovenian)
Currently translated at 45.0% (437 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sl/
2025-04-20 19:07:38 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
99cfaee352 Translated using Weblate (Catalan)
Currently translated at 38.4% (373 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ca/
2025-04-20 19:07:37 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
7fc9a9a95d Translated using Weblate (Assamese)
Currently translated at 1.5% (15 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-04-20 19:07:36 +00:00
Ettore Atalan
4b7d71112b Translated using Weblate (German)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
2025-04-20 19:07:35 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
80a4e052d3 replace icns mac icon with hq one (#7212) 2025-04-20 15:05:33 -04:00
absidue
82ba933160 Fix user-agent and referer for Innertube requests (#7213) 2025-04-20 14:45:44 -04:00
efb4f5ff-1298-471a-8973-3d47447115dc
7daa8676b9 Use new images (#7236)
* use new images

* use proper file references
2025-04-20 14:42:37 -04:00
absidue
b196e9830a Fix the channel name and ID missing on the channel home tab (#7232) 2025-04-20 18:19:52 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
52b6d4d21a Translated using Weblate (Odia)
Currently translated at 6.6% (65 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/or/
2025-04-20 18:01:47 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
4bb054fd75 Translated using Weblate (Georgian)
Currently translated at 15.9% (155 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ka/
2025-04-20 18:01:46 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
913b414aa0 Translated using Weblate (Bosnian)
Currently translated at 8.7% (85 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bs/
2025-04-20 18:01:46 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
2ad1566951 Translated using Weblate (Sinhala)
Currently translated at 5.2% (51 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/si/
2025-04-20 18:01:44 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
54d54c50a8 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
2025-04-20 18:01:43 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
5410272819 Translated using Weblate (Assamese)
Currently translated at 1.4% (14 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/as/
2025-04-20 18:01:42 +00:00
absidue
ab1a9f48f1 Fix live streams not working on the local API (#7233) 2025-04-20 17:10:05 +00:00
mahdrebai
d5ea432a78 Translated using Weblate (Korean)
Currently translated at 58.1% (565 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ko/
2025-04-19 20:02:58 +02:00
absidue
89dea10845 Migrate TopNav to the composition API (#7227) 2025-04-19 13:33:36 +00:00
efb4f5ff-1298-471a-8973-3d47447115dc
c1f5cdbd72 remove unused assets (#7229) 2025-04-19 15:29:37 +02:00
Serdar Sağlam
15301c7eed Translated using Weblate (Turkish)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
2025-04-19 14:02:35 +02:00
mingtselu
6661ee6bc1 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
2025-04-19 05:01:42 +00:00
Telaneo
3b9e2253d3 Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.3% (906 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-18 23:02:54 +00:00
ssantos
bb97e8db8c Translated using Weblate (Portuguese (Portugal))
Currently translated at 99.7% (969 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_PT/
2025-04-18 23:02:52 +00:00
oussama-madimagh
7810a12cc3 Translated using Weblate (Alemannic)
Currently translated at 9.7% (95 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gsw/
2025-04-18 23:01:41 +02:00
Telaneo
bf66e6684e Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.2% (905 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-18 23:01:41 +02:00
absidue
d2beb1ad48 Migrate the Channel page to the composition API (#7187)
* Migrate the Channel page to the composition API

* Fix sorting and loading

* More fixes
2025-04-18 20:16:03 +00:00
ilyes-fatnassi
8cf49e6fbb Translated using Weblate (Greek)
Currently translated at 98.9% (961 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-18 11:01:42 +00:00
ChunkyProgrammer
c7807fc076 Add support for upcoming livestream trailers (#6375)
* Add support for upcoming livestream trailers

* reuse template in the view when possible

* Fix the upcoming bar not showing

* Do not mark as watched when the user has only watched the trailer

---------

Co-authored-by: absidue <48293849+absidue@users.noreply.github.com>
2025-04-18 06:50:10 +08:00
Raphael-11
fb2aa052b4 Translated using Weblate (Spanish (Argentina))
Currently translated at 51.0% (496 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_AR/
2025-04-18 00:01:44 +02:00
Raphael-11
c3ad852d49 Translated using Weblate (Dutch)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
2025-04-18 00:01:43 +02:00
Raphael-11
ec5202b978 Translated using Weblate (Spanish (Mexico))
Currently translated at 53.8% (523 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_MX/
2025-04-18 00:01:42 +02:00
Raphael-11
bca4318db0 Translated using Weblate (Spanish (Argentina))
Currently translated at 40.9% (398 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_AR/
2025-04-17 22:44:56 +02:00
Raphael-11
f53acaeb96 Translated using Weblate (Spanish (Argentina))
Currently translated at 38.7% (376 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es_AR/
2025-04-17 22:22:12 +02:00
Telaneo
7f56fa147b Translated using Weblate (Norwegian Bokmål)
Currently translated at 93.0% (904 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-17 06:03:00 +02:00
Rhoslyn Prys
765452d9da Translated using Weblate (Welsh)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
2025-04-16 17:44:35 +02:00
Anurag Yadav
33626acb4d remember playlist selection between the sessions (#7139) 2025-04-16 07:32:59 +02:00
Telaneo
d6175ae9c7 Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.9% (903 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-16 07:02:58 +02:00
Sergio Marques
9298ee0495 Translated using Weblate (Portuguese)
Currently translated at 99.8% (970 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
2025-04-15 22:02:56 +00:00
notSelimm
7ce1738d62 Translated using Weblate (Swedish)
Currently translated at 100.0% (971 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sv/
2025-04-15 13:04:25 +02:00
oussama-madimagh
15670f7d27 Translated using Weblate (Afrikaans)
Currently translated at 84.9% (825 of 971 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/af/
2025-04-15 02:02:59 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
549a69baa0 cleanup old string (#7202) 2025-04-15 06:50:36 +08:00
Philip Goto
37911fe824 Translated using Weblate (Dutch)
Currently translated at 99.8% (971 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
2025-04-14 20:58:18 +02:00
dependabot[bot]
f121304dbf Bump json-minimizer-webpack-plugin from 5.0.0 to 5.0.1 (#7197)
Bumps [json-minimizer-webpack-plugin](https://github.com/webpack-contrib/json-minimizer-webpack-plugin) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/webpack-contrib/json-minimizer-webpack-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/json-minimizer-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/json-minimizer-webpack-plugin/compare/v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: json-minimizer-webpack-plugin
  dependency-version: 5.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 19:28:51 +02:00
Myriamdamak
dee96d1dc0 Translated using Weblate (Alemannic)
Currently translated at 5.1% (50 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/gsw/
2025-04-14 17:03:08 +00:00
Myriamdamak
fce17bcce6 Translated using Weblate (English (United Kingdom))
Currently translated at 99.7% (970 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/en_GB/
2025-04-14 17:03:07 +00:00
Myriamdamak
0615861cb4 Translated using Weblate (Arabic)
Currently translated at 99.8% (971 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
2025-04-14 17:03:06 +00:00
Myriamdamak
9e26083916 Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-04-14 17:03:04 +00:00
Telaneo
34f9cd028e Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.6% (901 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-14 14:18:17 +02:00
dependabot[bot]
2f290de817 Bump shaka-player from 4.14.6 to 4.14.7 (#7199)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.6 to 4.14.7.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.7/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.6...v4.14.7)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 07:22:53 -04:00
dependabot[bot]
a3f62e9bc9 Bump marked from 15.0.7 to 15.0.8 (#7196)
Bumps [marked](https://github.com/markedjs/marked) from 15.0.7 to 15.0.8.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v15.0.7...v15.0.8)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 15.0.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 07:10:59 -04:00
dependabot[bot]
fa6cf97409 Bump lefthook from 1.11.7 to 1.11.9 (#7198)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.7 to 1.11.9.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.7...v1.11.9)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.11.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 07:09:49 -04:00
dependabot[bot]
c50c6d75ce Bump webpack from 5.99.1 to 5.99.5 (#7200)
Bumps [webpack](https://github.com/webpack/webpack) from 5.99.1 to 5.99.5.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.99.1...v5.99.5)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.99.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 07:09:25 -04:00
dependabot[bot]
066428cd84 Bump electron from 35.1.4 to 35.1.5 (#7201)
Bumps [electron](https://github.com/electron/electron) from 35.1.4 to 35.1.5.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v35.1.4...v35.1.5)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 35.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 07:08:57 -04:00
Telaneo
99407e8ab5 Translated using Weblate (Norwegian Bokmål)
Currently translated at 92.3% (898 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-14 11:01:41 +02:00
efb4f5ff-1298-471a-8973-3d47447115dc
0868f19e09 Use maxVideoPlaybackRate for Default Playback Rate (#7184) 2025-04-14 13:30:54 +08:00
oussama-madimagh
079c32c7bd Translated using Weblate (Afrikaans)
Currently translated at 82.5% (802 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/af/
2025-04-13 22:07:27 +00:00
Diego-rojiblanco
21161acaa1 Translated using Weblate (Kurdish)
Currently translated at 27.2% (265 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-04-13 10:03:06 +00:00
StruggleSnuggles
dab058b09b Translated using Weblate (Norwegian Bokmål)
Currently translated at 91.4% (889 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-13 06:01:41 +02:00
Telaneo
c7e897980e Translated using Weblate (Norwegian Bokmål)
Currently translated at 91.4% (889 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-13 06:01:41 +02:00
Telaneo
1d5c3ab54a Translated using Weblate (Norwegian Bokmål)
Currently translated at 90.5% (880 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-13 02:01:41 +02:00
NEXI
6fa9624404 Translated using Weblate (Serbian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
2025-04-12 20:01:41 +02:00
Telaneo
1d417def66 Translated using Weblate (Norwegian Bokmål)
Currently translated at 90.5% (880 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-12 20:01:41 +02:00
ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝)
0fcdc66d73 Translated using Weblate (Latvian)
Currently translated at 57.4% (558 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lv/
2025-04-12 14:03:02 +00:00
absidue
6a21dd1be3 Fix playback rate handling while loading/buffering (#7178) 2025-04-12 03:22:48 +00:00
GiannosOB
9b1246d8fa Translated using Weblate (Greek)
Currently translated at 97.5% (948 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-12 02:01:41 +02:00
DontBlameMe99
a3c1dc4b29 Use shadow color for light themes (#7142)
* fix: use shadow color for light themes

* fix: use dark shadow for light theme requiring it

* Update src/renderer/themes.css

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Update src/renderer/themes.css

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* fix: increase light dark shadow color brightness

* fix: remove second light so linter passes

* Update src/renderer/themes.css

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

* Update src/renderer/themes.css

Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>

---------

Co-authored-by: DontBlameMe <dontblameme@noreply.codeberg.org>
Co-authored-by: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com>
2025-04-12 00:19:15 +02:00
GiannosOB
13c5cac264 Translated using Weblate (Greek)
Currently translated at 97.7% (950 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-12 00:01:43 +02:00
R S
dce6ce4ceb Translated using Weblate (Japanese)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
2025-04-12 00:01:42 +02:00
GiannosOB
4c8e362445 Translated using Weblate (Greek)
Currently translated at 97.6% (949 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-11 19:34:36 +02:00
Telaneo
e7da1a61a8 Translated using Weblate (Norwegian Bokmål)
Currently translated at 90.1% (876 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-11 19:34:35 +02:00
GiannosOB
5587e8edb6 Translated using Weblate (Greek)
Currently translated at 97.2% (945 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-11 18:50:44 +02:00
GiannosOB
314bd22871 Translated using Weblate (Greek)
Currently translated at 94.7% (921 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-11 16:01:48 +00:00
GiannosOB
3bd1b5cf77 Translated using Weblate (Greek)
Currently translated at 75.6% (735 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-11 14:01:53 +00:00
KING APPS
9b372e8dc3 Translated using Weblate (Persian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fa/
2025-04-11 12:03:10 +02:00
GiannosOB
0263a0626d Translated using Weblate (Greek)
Currently translated at 64.8% (630 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
2025-04-11 12:03:09 +02:00
Telaneo
c2ea984722 Translated using Weblate (Norwegian Bokmål)
Currently translated at 89.5% (870 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-11 06:04:50 +02:00
Telaneo
28d9479dcc Translated using Weblate (Norwegian Bokmål)
Currently translated at 88.8% (864 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-11 02:01:42 +00:00
Telaneo
17e4334ce9 Translated using Weblate (Norwegian Bokmål)
Currently translated at 82.4% (801 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-11 02:45:18 +02:00
notkaroum
e3543785d9 Translated using Weblate (Persian)
Currently translated at 99.5% (968 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fa/
2025-04-11 00:01:41 +02:00
Telaneo
0ea6c79716 Translated using Weblate (Norwegian Bokmål)
Currently translated at 81.6% (794 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-10 19:06:44 +00:00
Ash
cb2c547199 Translated using Weblate (Hindi)
Currently translated at 15.7% (153 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hi/
2025-04-10 20:02:55 +02:00
Telaneo
20df730bf9 Translated using Weblate (Norwegian Bokmål)
Currently translated at 81.1% (789 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nb_NO/
2025-04-10 20:02:54 +02:00
emna-hergli
ef1065e93c Translated using Weblate (Belarusian)
Currently translated at 97.5% (948 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/be/
2025-04-10 15:02:54 +02:00
Ghost of Sparta
a09b6eca8a Translated using Weblate (Hungarian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
2025-04-10 15:02:53 +02:00
emna-hergli
a5432d9a78 Translated using Weblate (Danish)
Currently translated at 99.1% (964 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/da/
2025-04-10 15:02:52 +02:00
Franc Daviau
856767e933 Translated using Weblate (Finnish)
Currently translated at 75.8% (737 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fi/
2025-04-10 15:02:51 +02:00
Diego-rojiblanco
b0affe58dc Translated using Weblate (Kurdish)
Currently translated at 20.4% (199 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-04-09 23:01:41 +02:00
Diego-rojiblanco
5aff773c2d Translated using Weblate (Kurdish)
Currently translated at 19.9% (194 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ku/
2025-04-09 21:07:49 +02:00
notkaroum
b247fb46b3 Translated using Weblate (Arabic)
Currently translated at 99.8% (971 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
2025-04-09 18:01:42 +02:00
Cloud Esp
f45039ddef Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-04-08 17:42:12 +02:00
PikachuEXE
64e7a66b10 Fix video description display (#7169)
* Revert "Bump webpack from 5.98.0 to 5.99.0 (#7168)"

This reverts commit 249df32171.

* ^ Update to latest version with fix
2025-04-08 10:01:18 +02:00
DontBlameMe99
47f285bfb4 fix: do not use title color as accent color (#7141)
Co-authored-by: DontBlameMe <dontblameme@noreply.codeberg.org>
2025-04-08 09:57:40 +08:00
Anurag Yadav
2b085018cd Fix #4924 : Hide Search Bar and Filter when less than two content in Add Video to Playlists , History, Channels (#7134)
* Added a feature to hide search bar and search filter when the length is less than 2

* Fixed error cannot read the properties of undefine
2025-04-07 21:41:13 -04:00
absidue
593583569b Migrate FtChannelBubble, FtProfileChannelList and FtProfileFilterChannelList to the composition API (#7152) 2025-04-07 21:39:47 -04:00
absidue
07c954b721 Set properties on DOM elements directly instead of using setAttribute (#7115) 2025-04-07 21:36:47 -04:00
dependabot[bot]
249df32171 Bump webpack from 5.98.0 to 5.99.0 (#7168)
Bumps [webpack](https://github.com/webpack/webpack) from 5.98.0 to 5.99.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.98.0...v5.99.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.99.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-08 08:55:07 +08:00
dependabot[bot]
94f3363251 Bump the eslint group with 3 updates (#7165)
Bumps the eslint group with 3 updates: [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js), [eslint](https://github.com/eslint/eslint) and [vue-eslint-parser](https://github.com/vuejs/vue-eslint-parser).


Updates `@eslint/js` from 9.23.0 to 9.24.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.24.0/packages/js)

Updates `eslint` from 9.23.0 to 9.24.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.23.0...v9.24.0)

Updates `vue-eslint-parser` from 10.1.1 to 10.1.3
- [Release notes](https://github.com/vuejs/vue-eslint-parser/releases)
- [Commits](https://github.com/vuejs/vue-eslint-parser/compare/v10.1.1...v10.1.3)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.24.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint
  dependency-version: 9.24.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: vue-eslint-parser
  dependency-version: 10.1.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 18:41:19 +02:00
dependabot[bot]
09493c469f Bump shaka-player from 4.14.5 to 4.14.6 (#7166)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.5 to 4.14.6.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.6/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.5...v4.14.6)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-version: 4.14.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 17:28:00 +02:00
dependabot[bot]
e0c64d1baa Bump sass from 1.86.0 to 1.86.3 (#7164)
Bumps [sass](https://github.com/sass/dart-sass) from 1.86.0 to 1.86.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.86.0...1.86.3)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.86.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 17:23:30 +02:00
absidue
9e05ae8be1 Increase PO token snapshot timeout from 3 to 10 seconds (#7114) 2025-04-07 06:58:57 -04:00
dependabot[bot]
6ef7ea214f Bump lefthook from 1.11.5 to 1.11.7 (#7163)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.5 to 1.11.7.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.5...v1.11.7)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-version: 1.11.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 06:58:23 -04:00
dependabot[bot]
c21027a038 Bump the stylelint group with 2 updates (#7161)
Bumps the stylelint group with 2 updates: [stylelint](https://github.com/stylelint/stylelint) and [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard).


Updates `stylelint` from 16.17.0 to 16.18.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.17.0...16.18.0)

Updates `stylelint-config-standard` from 37.0.0 to 38.0.0
- [Release notes](https://github.com/stylelint/stylelint-config-standard/releases)
- [Changelog](https://github.com/stylelint/stylelint-config-standard/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint-config-standard/compare/37.0.0...38.0.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.18.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
- dependency-name: stylelint-config-standard
  dependency-version: 38.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 06:57:51 -04:00
dependabot[bot]
8b2fc5e87e Bump electron from 35.1.2 to 35.1.4 (#7162)
Bumps [electron](https://github.com/electron/electron) from 35.1.2 to 35.1.4.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v35.1.2...v35.1.4)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 35.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 06:56:59 -04:00
dedakir923
401238624f Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2025-04-07 09:05:33 +02:00
absidue
a058ccdab0 Fix images getting occasionally ratelimited (#7151) 2025-04-06 11:41:30 +02:00
PikachuEXE
03f1aedea4 ! Fix being able to have duplicate keyword search history due to spaces (#7110) 2025-04-05 21:08:18 -04:00
absidue
53b6bb39db Bump linter, build and release workflows to Node.js 22 (#7153) 2025-04-05 18:21:40 -04:00
dependabot[bot]
aee841a691 Bump webpack-dev-server from 5.2.0 to 5.2.1 (#7123)
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v5.2.0...v5.2.1)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-05 14:30:27 +02:00
Bezruchenko Simon
5a8238ea93 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/uk/
2025-04-05 12:05:08 +02:00
Rhoslyn Prys
b6f274a852 Translated using Weblate (Welsh)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
2025-04-04 15:01:41 +02:00
Rhoslyn Prys
085413008b Translated using Weblate (Welsh)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
2025-04-04 13:11:43 +02:00
Rhoslyn Prys
987c36b017 Translated using Weblate (Welsh)
Currently translated at 99.6% (969 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cy/
2025-04-04 13:09:06 +02:00
Goku
38d14485fa Translated using Weblate (Hindi)
Currently translated at 13.7% (134 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hi/
2025-04-03 23:01:42 +02:00
Goku
1fdf0977a7 Translated using Weblate (Romanian)
Currently translated at 99.2% (965 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
2025-04-03 23:01:41 +02:00
Goku
5a3c94e0be Translated using Weblate (Russian)
Currently translated at 99.3% (966 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/
2025-04-03 23:01:40 +02:00
c-s-lab
d875cc6642 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
2025-04-02 17:07:29 +02:00
c-s-lab
87090d5ed7 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.6% (969 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
2025-04-02 12:03:04 +02:00
Sergio Marques
828306e00b Translated using Weblate (Portuguese)
Currently translated at 99.3% (966 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
2025-04-02 00:07:27 +00:00
dependabot[bot]
8993ca606c Bump shaka-player from 4.14.3 to 4.14.4 (#7125)
Bumps [shaka-player](https://github.com/shaka-project/shaka-player) from 4.14.3 to 4.14.4.
- [Release notes](https://github.com/shaka-project/shaka-player/releases)
- [Changelog](https://github.com/shaka-project/shaka-player/blob/v4.14.4/CHANGELOG.md)
- [Commits](https://github.com/shaka-project/shaka-player/compare/v4.14.3...v4.14.4)

---
updated-dependencies:
- dependency-name: shaka-player
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:23:50 -04:00
absidue
6cf17a890e Remove broken Alpine builds (#7129) 2025-03-31 22:21:41 -04:00
mahmutozcan
a92afec4ef Translated using Weblate (Turkish)
Currently translated at 99.6% (969 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
2025-03-31 23:07:39 +02:00
ColorfulRhino
d543d5a5df Translated using Weblate (German)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
2025-03-31 23:07:38 +02:00
dependabot[bot]
bd314a0fb0 Bump lefthook from 1.11.4 to 1.11.5 (#7126)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.4 to 1.11.5.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
- [Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
- [Commits](https://github.com/evilmartians/lefthook/compare/v1.11.4...v1.11.5)

---
updated-dependencies:
- dependency-name: lefthook
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:55:45 +02:00
Aleks ANDRÉ
bca1cbf931 Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-03-31 16:24:04 +02:00
Aleks ANDRÉ
add7f3508f Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-03-31 16:01:40 +02:00
Aleks ANDRÉ
5df14be564 Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-03-31 14:02:38 +02:00
dependabot[bot]
64ba6d1256 Bump stylelint from 16.16.0 to 16.17.0 in the stylelint group (#7122)
Bumps the stylelint group with 1 update: [stylelint](https://github.com/stylelint/stylelint).


Updates `stylelint` from 16.16.0 to 16.17.0
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.16.0...16.17.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: stylelint
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 06:59:20 -04:00
dependabot[bot]
630f47ca67 Bump electron from 35.0.3 to 35.1.2 (#7124)
Bumps [electron](https://github.com/electron/electron) from 35.0.3 to 35.1.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v35.0.3...v35.1.2)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 06:58:16 -04:00
Sveinn í Felli
2a88e3dd71 Translated using Weblate (Icelandic)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
2025-03-31 10:01:44 +00:00
Cloud Esp
e028e9e5bf Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-03-31 10:01:42 +00:00
Aleks ANDRÉ
ecbc6f24fa Translated using Weblate (French)
Currently translated at 100.0% (972 of 972 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
2025-03-31 10:01:41 +00:00
467 changed files with 37164 additions and 37705 deletions

View File

@@ -9,8 +9,5 @@
}
}
]
],
"plugins": [
"@babel/plugin-transform-class-properties"
]
}

View File

@@ -23,6 +23,8 @@ body:
required: true
- label: This issue contains only one bug.
required: true
- label: I have read and agree to follow the [rules](https://docs.freetubeapp.io/community/rules/).
required: true
- type: textarea
attributes:
label: Describe the bug
@@ -82,7 +84,6 @@ body:
label: Installation Method
description: When you select an unofficial installation method, you must have verified that the bug is also present in one of the official installation methods. Please make sure you uninstall the unofficial installation before installing one of the official installations. If you can't reproduce this in one of the official installation methods, you should report the bug to the maintainer of the unofficial installation method you used.
options:
- .apk (Alpine Linux Package)
- .AppImage
- .deb
- .dmg
@@ -93,6 +94,7 @@ body:
- .rpm
- .zip / .7z
- .apk (FreeTubeAndroid Unofficial)
- .apk (Alpine Linux Package Unofficial)
- AUR (Unofficial)
- Chocolatey (Unofficial)
- Homebrew (Unofficial)

View File

@@ -19,6 +19,8 @@ body:
required: true
- label: This issue contains only one feature request.
required: true
- label: I have read and agree to follow the [rules](https://docs.freetubeapp.io/community/rules/).
required: true
- type: textarea
attributes:
label: Problem Description

View File

@@ -1,7 +1,6 @@
# Title
<!-- Thanks for sending a pull request! Make sure to follow the contributing guidelines. -->
<!-- Important note, we may remove your pull request if you do not use this provided PR template correctly. -->
<!-- Do not create PR's with AI! (PRs created mainly with AI will be closed. They waste our team's time. We ban repeat offenders.) -->
## Pull Request Type
<!-- Please select what type of pull request this is: [x] -->
@@ -21,10 +20,9 @@
## Screenshots <!-- If appropriate -->
<!-- Please add before and after screenshots if there is a visible change. -->
## Testing <!-- for code that is not small enough to be easily understandable -->
<!-- Has this pull request been tested? -->
<!-- Please describe shortly how you tested it. -->
<!-- Are there any ramifications remaining? -->
## Testing
<!-- How can reviewers verify that the PR produces correct results? -->
<!-- Please provide instructions so that others can ensure that your pull request would produce correct results. For examples see, https://github.com/FreeTubeApp/FreeTube/pull/5743, https://github.com/FreeTubeApp/FreeTube/pull/7349, https://github.com/FreeTubeApp/FreeTube/pull/5125, https://github.com/FreeTubeApp/FreeTube/pull/7338 -->
## Desktop
<!-- Please complete the following information-->

View File

@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check Comment Author
uses: Amwam/issue-comment-action@v1.3.1
uses: Amwam/issue-comment-action@v1.5.0
with:
keywords: '["duplicate of #", "duplicate of https://github.com/FreeTubeApp/FreeTube/issues/", "duplicate of https://github.com/FreeTubeApp/FreeTube/pulls/"]'
labels: '["U: duplicate"]'

View File

@@ -3,6 +3,8 @@ on:
pull_request_target:
types: [opened, synchronize, reopened, auto_merge_disabled, ready_for_review]
permissions: {}
jobs:
build:
if: ${{ !github.event.pull_request.draft && (contains(github.event.pull_request.base.ref, 'development') || contains(github.event.pull_request.base.ref, 'RC')) }}
@@ -10,8 +12,6 @@ jobs:
steps:
- name: Auto Merge PR
run: |
echo ${{ secrets.PUSH_TOKEN }} >> auth.txt
gh auth login --with-token < auth.txt
rm auth.txt
gh pr merge https://github.com/FreeTubeApp/FreeTube/pull/${{ github.event.pull_request.number }} --auto --squash
env:
GH_TOKEN: ${{ secrets.PUSH_TOKEN }}
run: gh pr merge https://github.com/FreeTubeApp/FreeTube/pull/${{ github.event.pull_request.number }} --auto --squash

View File

@@ -12,7 +12,7 @@ jobs:
build:
strategy:
matrix:
node-version: [20.x]
node-version: [24.x]
runtime:
- linux-x64
- linux-armv7l
@@ -46,13 +46,20 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: 'Use faster D: drive for yarn cache on Windows'
if: startsWith(matrix.os, 'windows')
run: yarn config set cache-folder D:\ft_yarn_cache
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: "yarn"
- run: yarn run ci
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
- run: yarn run lint
- name: Get Version Number
id: getPackageInfo
@@ -60,7 +67,7 @@ jobs:
- name: Set Version Number Variable
id: versionNumber
uses: actions/github-script@v7
uses: actions/github-script@v8
env:
IS_DEV: ${{ contains(github.ref, 'development') }}
IS_RC: ${{ contains(github.ref, 'RC') }}
@@ -114,91 +121,91 @@ jobs:
rm -rf ./squashfs-root ./appimagetool.AppImage
- name: Upload Linux .zip x64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-linux-x64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}.zip
- name: Upload Linux .7z x64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-linux-x64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}.7z
- name: Upload Linux .zip ARMv7l Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-linux-armv7l-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}-armv7l.zip
- name: Upload Linux .7z ARMv7l Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-linux-armv7l-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-armv7l.7z
- name: Upload Linux .zip ARM64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-linux-arm64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.zip
- name: Upload Linux .7z ARM64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-linux-arm64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.7z
- name: Upload .deb x64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_amd64.deb
path: build/freetube_${{ steps.versionNumber.outputs.result }}_amd64.deb
- name: Upload .deb ARMv7l Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_armv7l.deb
path: build/freetube_${{ steps.versionNumber.outputs.result }}_armv7l.deb
- name: Upload .deb ARM64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_arm64.deb
path: build/freetube_${{ steps.versionNumber.outputs.result }}_arm64.deb
- name: Upload AppImage x64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-amd64.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.result }}.AppImage
- name: Upload AppImage ARMv7l Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-armv7l.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.result }}-armv7l.AppImage
- name: Upload AppImage ARM64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-arm64.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.result }}-arm64.AppImage
- name: Upload .rpm x64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}.amd64.rpm
@@ -207,140 +214,119 @@ jobs:
# rpm are not built for armv7l
- name: Upload .rpm ARM64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}.arm64.rpm
path: build/freetube-${{ steps.versionNumber.outputs.result }}.aarch64.rpm
- name: Upload Alpine .apk x64 Artifact
uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-alpine-amd64.apk
path: build/freetube-${{ steps.versionNumber.outputs.result }}.apk
- name: Upload Alpine .apk ARMv7l Artifact
uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-alpine-armv7l.apk
path: build/freetube-${{ steps.versionNumber.outputs.result }}-armv7l.apk
- name: Upload Alpine .apk ARM64 Artifact
uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-alpine-arm64.apk
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.apk
- name: Upload Pacman .pacman x64 Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-amd64.pacman
path: build/freetube-${{ steps.versionNumber.outputs.result }}.pacman
# - name: Upload Web Build
# uses: actions/upload-artifact@v4
# uses: actions/upload-artifact@v5
# if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
# with:
# name: freetube-${{ steps.versionNumber.outputs.result }}-static-web
# path: dist/web
- name: Upload Windows x64 .exe Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-setup-x64.exe
path: build/freetube Setup ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Windows x64 Portable Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-x64-portable.exe
path: build/freetube ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Windows x64 .zip Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-x64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}-win.zip
- name: Upload Windows x64 .7z Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-x64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-win.7z
- name: Upload Windows arm64 .exe Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-setup-arm64.exe
path: build/freetube Setup ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Windows arm64 Portable Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-arm64-portable.exe
path: build/freetube ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Windows arm64 .zip Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-arm64-portable.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64-win.zip
- name: Upload Windows arm64 .7z Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-arm64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64-win.7z
- name: Upload Mac x64 .dmg Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-x64.dmg
path: build/freetube-${{ steps.versionNumber.outputs.result }}.dmg
- name: Upload Mac x64 .zip Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-x64.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}-mac.zip
- name: Upload Mac x64 .7z Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-x64.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-mac.7z
- name: Upload Mac arm64 .dmg Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-arm64.dmg
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.dmg
- name: Upload Mac arm64 .zip Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-arm64.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64-mac.zip
- name: Upload Mac arm64 .7z Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-arm64.7z

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Compress Images
id: calibre
uses: calibreapp/image-actions@main

View File

@@ -27,11 +27,11 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -44,7 +44,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v4
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -57,6 +57,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"

View File

@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
repository: flathub/io.freetubeapp.FreeTube
token: ${{ secrets.FLATHUB_TOKEN }}
@@ -50,24 +50,24 @@ jobs:
with:
version: v${{ steps.sub.outputs.result }}-beta
repository: FreeTubeApp/FreeTube
file: freetube-${{ steps.sub.outputs.result }}-linux-x64-portable.zip
file: freetube-${{ steps.sub.outputs.result }}-beta-linux-x64-portable.zip
- name: Download ARM Release
uses: fabriciobastian/download-release-asset-action@v1.0.6
with:
version: v${{ steps.sub.outputs.result }}-beta
repository: FreeTubeApp/FreeTube
file: freetube-${{ steps.sub.outputs.result }}-linux-arm64-portable.zip
file: freetube-${{ steps.sub.outputs.result }}-beta-linux-arm64-portable.zip
- name: Set x64 Hash Variable
id: hash-x64
run: |
echo 'HASH_X64<<EOF' >> $GITHUB_ENV
sha256sum freetube-${{ steps.sub.outputs.result }}-linux-x64-portable.zip | awk '{print $1}' >> $GITHUB_ENV
sha256sum freetube-${{ steps.sub.outputs.result }}-beta-linux-x64-portable.zip | awk '{print $1}' >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: Set ARM Hash Variable
id: hash-arm64
run: |
echo 'HASH_ARM64<<EOF' >> $GITHUB_ENV
sha256sum freetube-${{ steps.sub.outputs.result }}-linux-arm64-portable.zip | awk '{print $1}' >> $GITHUB_ENV
sha256sum freetube-${{ steps.sub.outputs.result }}-beta-linux-arm64-portable.zip | awk '{print $1}' >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: Set Date Variable
id: current-date
@@ -76,22 +76,22 @@ jobs:
date +"%Y-%m-%d" >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: Update x64 File Location in yml File
uses: mikefarah/yq@v4.45.1
uses: mikefarah/yq@v4.49.1
with:
# The Command which should be run
cmd: yq -i '.modules[0].sources[0].url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${{ steps.sub.outputs.result }}-beta/freetube-${{ steps.sub.outputs.result }}-linux-x64-portable.zip"' io.freetubeapp.FreeTube.yml
cmd: yq -i '.modules[0].sources[0].url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${{ steps.sub.outputs.result }}-beta/freetube-${{ steps.sub.outputs.result }}-beta-linux-x64-portable.zip"' io.freetubeapp.FreeTube.yml
- name: Update x64 Hash in yml File
uses: mikefarah/yq@v4.45.1
uses: mikefarah/yq@v4.49.1
with:
# The Command which should be run
cmd: yq -i '.modules[0].sources[0].sha256 = "${{ env.HASH_X64 }}"' io.freetubeapp.FreeTube.yml
- name: Update ARM File Location in yml File
uses: mikefarah/yq@v4.45.1
uses: mikefarah/yq@v4.49.1
with:
# The Command which should be run
cmd: yq -i '.modules[0].sources[1].url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${{ steps.sub.outputs.result }}-beta/freetube-${{ steps.sub.outputs.result }}-linux-arm64-portable.zip"' io.freetubeapp.FreeTube.yml
cmd: yq -i '.modules[0].sources[1].url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${{ steps.sub.outputs.result }}-beta/freetube-${{ steps.sub.outputs.result }}-beta-linux-arm64-portable.zip"' io.freetubeapp.FreeTube.yml
- name: Update ARM Hash in yml File
uses: mikefarah/yq@v4.45.1
uses: mikefarah/yq@v4.49.1
with:
# The Command which should be run
cmd: yq -i '.modules[0].sources[1].sha256 = "${{ env.HASH_ARM64 }}"' io.freetubeapp.FreeTube.yml
@@ -99,10 +99,10 @@ jobs:
run: xmlstarlet ed -L -i /component/releases/release[1] -t elem -n releaseTMP -v "" -i //releaseTMP -t attr -n version -v "${{ steps.sub.outputs.result }} Beta" -i //releaseTMP -t attr -n date -v "${{ env.CURRENT_DATE }}" -s //releaseTMP -t elem -n url -v "" -s //releaseTMP/url -t text -n "" -v "https://github.com/FreeTubeApp/FreeTube/releases/tag/v${{ steps.sub.outputs.result }}-beta" -r //releaseTMP -v "release" io.freetubeapp.FreeTube.metainfo.xml
- name: Remove Release Files
run: |
rm freetube-${{ steps.sub.outputs.result }}-linux-x64-portable.zip
rm freetube-${{ steps.sub.outputs.result }}-linux-arm64-portable.zip
rm freetube-${{ steps.sub.outputs.result }}-beta-linux-x64-portable.zip
rm freetube-${{ steps.sub.outputs.result }}-beta-linux-arm64-portable.zip
- name: Commit Files
uses: stefanzweifel/git-auto-commit-action@v5
uses: stefanzweifel/git-auto-commit-action@v7
with:
# Optional but recommended
# Defaults to "Apply automatic changes"

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ !github.event.pull_request.draft }}
steps:
- uses: actions/labeler@v5
- uses: actions/labeler@v6
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: .github/pr-labeler.yml

View File

@@ -17,13 +17,15 @@ jobs:
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20.x
uses: actions/setup-node@v4
- uses: actions/checkout@v6
- name: Use Node.js 24.x
uses: actions/setup-node@v6
with:
node-version: 20.x
node-version: 24.x
cache: "yarn"
- run: yarn run ci
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
- run: yarn run lint
# let's verify that webpack is able to package the project
- run: yarn run pack

View File

@@ -17,7 +17,7 @@ jobs:
build:
strategy:
matrix:
node-version: [20.x]
node-version: [24.x]
runtime:
- linux-x64
- linux-armv7l
@@ -51,13 +51,20 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: 'Use faster D: drive for yarn cache on Windows'
if: startsWith(matrix.os, 'windows')
run: yarn config set cache-folder D:\ft_yarn_cache
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: "yarn"
- run: yarn run ci
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
- run: yarn run lint
- name: Get Version Number
@@ -80,7 +87,7 @@ jobs:
if: contains(matrix.runtime, 'arm64')
run: yarn run build:arm64
- name: Convert X64 AppImage to static runtime
- name: Convert X64 AppImage to static runtime and add update information
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
run: |
sudo apt install desktop-file-utils
@@ -88,11 +95,42 @@ jobs:
appimage="FreeTube-${{ steps.getPackageInfo.outputs.version }}.AppImage"
wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -O ./appimagetool.AppImage
chmod +x ./"$appimage" ./appimagetool.AppImage
update_information="gh-releases-zsync|FreeTubeApp|FreeTube|latest-all|freetube-*-amd64.AppImage.zsync"
./"$appimage" --appimage-extract && rm -f ./"$appimage"
./appimagetool.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 20 \
-n ./squashfs-root ./"$appimage"
-u "$update_information" -n ./squashfs-root ./"$appimage"
rm -rf ./squashfs-root ./appimagetool.AppImage
- name: Convert ARMv7l AppImage to static runtime and add update information
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
run: |
sudo apt install desktop-file-utils
cd build
appimage="FreeTube-${{ steps.getPackageInfo.outputs.version }}.AppImage"
wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -O ./appimagetool.AppImage
wget "https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64" -O runtime
chmod +x ./"$appimage" ./appimagetool.AppImage ./runtime
update_information="gh-releases-zsync|FreeTubeApp|FreeTube|latest-all|freetube-*-armv7l.AppImage.zsync"
TARGET_APPIMAGE=$appimage" ./runtime --appimage-extract && rm -f ./"$appimage"
ARCH=armhf ./appimagetool.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 20 \
-u "$update_information" -n ./squashfs-root ./"$appimage"
rm -rf ./squashfs-root ./appimagetool.AppImage ./runtime
- name: Convert ARM64 AppImage to static runtime and add update information
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
run: |
sudo apt install desktop-file-utils
cd build
appimage="FreeTube-${{ steps.getPackageInfo.outputs.version }}.AppImage"
wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -O ./appimagetool.AppImage
wget "https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64" -O runtime
chmod +x ./"$appimage" ./appimagetool.AppImage ./runtime
update_information="gh-releases-zsync|FreeTubeApp|FreeTube|latest-all|freetube-*-arm64.AppImage.zsync"
TARGET_APPIMAGE=$appimage" ./runtime --appimage-extract && rm -f ./"$appimage"
ARCH=aarch64 ./appimagetool.AppImage --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 20 \
-u "$update_information" -n ./squashfs-root ./"$appimage"
rm -rf ./squashfs-root ./appimagetool.AppImage ./runtime
- name: Upload Linux .zip x64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
@@ -100,7 +138,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-linux-x64-portable.zip
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-linux-x64-portable.zip
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}.zip
asset_content_type: application/zip
@@ -111,7 +149,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-linux-x64-portable.7z
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-linux-x64-portable.7z
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}.7z
asset_content_type: application/x-7z-compressed
@@ -122,7 +160,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-linux-armv7l-portable.zip
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-linux-armv7l-portable.zip
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-armv7l.zip
asset_content_type: application/zip
@@ -133,7 +171,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-linux-armv7l-portable.7z
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-linux-armv7l-portable.7z
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-armv7l.7z
asset_content_type: application/x-7z-compressed
@@ -144,7 +182,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-linux-arm64-portable.zip
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-linux-arm64-portable.zip
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64.zip
asset_content_type: application/zip
@@ -155,7 +193,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-linux-arm64-portable.7z
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-linux-arm64-portable.7z
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64.7z
asset_content_type: application/x-7z-compressed
@@ -166,7 +204,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube_${{ steps.getPackageInfo.outputs.version }}_amd64.deb
asset_name: freetube_${{ steps.getPackageInfo.outputs.version }}_beta_amd64.deb
asset_path: build/freetube_${{ steps.getPackageInfo.outputs.version }}_amd64.deb
asset_content_type: application/vnd.debian.binary-package
@@ -177,7 +215,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube_${{ steps.getPackageInfo.outputs.version }}_armv7l.deb
asset_name: freetube_${{ steps.getPackageInfo.outputs.version }}_beta_armv7l.deb
asset_path: build/freetube_${{ steps.getPackageInfo.outputs.version }}_armv7l.deb
asset_content_type: application/vnd.debian.binary-package
@@ -188,7 +226,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube_${{ steps.getPackageInfo.outputs.version }}_arm64.deb
asset_name: freetube_${{ steps.getPackageInfo.outputs.version }}_beta_arm64.deb
asset_path: build/freetube_${{ steps.getPackageInfo.outputs.version }}_arm64.deb
asset_content_type: application/vnd.debian.binary-package
@@ -199,10 +237,21 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-amd64.AppImage
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-amd64.AppImage
asset_path: build/FreeTube-${{ steps.getPackageInfo.outputs.version }}.AppImage
asset_content_type: application/vnd.appimage
- name: Upload AppImage .zsync x64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-amd64.AppImage.zsync
asset_path: build/FreeTube-${{ steps.getPackageInfo.outputs.version }}.AppImage.zsync
asset_content_type: application/x-zsync
- name: Upload AppImage ARMv7l Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
@@ -210,10 +259,21 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-armv7l.AppImage
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-armv7l.AppImage
asset_path: build/FreeTube-${{ steps.getPackageInfo.outputs.version }}-armv7l.AppImage
asset_content_type: application/vnd.appimage
- name: Upload AppImage .zsync ARMv7l Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-armv7l.AppImage.zsync
asset_path: build/FreeTube-${{ steps.getPackageInfo.outputs.version }}-armv7l.AppImage.zsync
asset_content_type: application/x-zsync
- name: Upload AppImage ARM64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
@@ -221,10 +281,21 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-arm64.AppImage
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-arm64.AppImage
asset_path: build/FreeTube-${{ steps.getPackageInfo.outputs.version }}-arm64.AppImage
asset_content_type: application/vnd.appimage
- name: Upload AppImage .zsync ARM64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-arm64.AppImage.zsync
asset_path: build/FreeTube-${{ steps.getPackageInfo.outputs.version }}-arm64.AppImage.zsync
asset_content_type: application/x-zsync
- name: Upload Linux .rpm x64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
@@ -232,7 +303,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}.amd64.rpm
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta.amd64.rpm
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}.x86_64.rpm
asset_content_type: application/x-rpm
@@ -245,43 +316,10 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}.arm64.rpm
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta.arm64.rpm
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}.aarch64.rpm
asset_content_type: application/x-rpm
- name: Upload Alpine .apk x64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-alpine-amd64.apk
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}.apk
asset_content_type: application/octet-stream
- name: Upload Alpine .apk ARMv7l Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-alpine-armv7l.apk
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-armv7l.apk
asset_content_type: application/octet-stream
- name: Upload Alpine .apk ARM64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-alpine-arm64.apk
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64.apk
asset_content_type: application/octet-stream
- name: Upload Pacman .pacman x64 Release
uses: actions/upload-release-asset@v1
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
@@ -289,7 +327,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-amd64.pacman
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-amd64.pacman
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}.pacman
asset_content_type: application/x-zstd-compressed-tar
@@ -300,7 +338,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-setup-x64.exe
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-setup-x64.exe
asset_path: build/freetube Setup ${{ steps.getPackageInfo.outputs.version }}.exe
asset_content_type: application/x-ms-dos-executable
@@ -311,7 +349,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-win-x64-portable.exe
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-win-x64-portable.exe
asset_path: build/FreeTube ${{ steps.getPackageInfo.outputs.version }}.exe
asset_content_type: application/x-ms-dos-executable
@@ -322,7 +360,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-win-x64-portable.zip
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-win-x64-portable.zip
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-win.zip
asset_content_type: application/zip
@@ -333,7 +371,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-win-x64-portable.7z
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-win-x64-portable.7z
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-win.7z
asset_content_type: application/x-7z-compressed
@@ -344,7 +382,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-setup-arm64.exe
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-setup-arm64.exe
asset_path: build/freetube Setup ${{ steps.getPackageInfo.outputs.version }}.exe
asset_content_type: application/x-ms-dos-executable
@@ -355,7 +393,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-win-arm64-portable.exe
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-win-arm64-portable.exe
asset_path: build/FreeTube ${{ steps.getPackageInfo.outputs.version }}.exe
asset_content_type: application/x-ms-dos-executable
@@ -366,7 +404,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-win-arm64-portable.zip
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-win-arm64-portable.zip
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64-win.zip
asset_content_type: application/zip
@@ -377,7 +415,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-win-arm64-portable.7z
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-win-arm64-portable.7z
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64-win.7z
asset_content_type: application/x-7z-compressed
@@ -388,7 +426,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-mac-x64.dmg
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-mac-x64.dmg
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}.dmg
asset_content_type: application/x-apple-diskimage
@@ -399,7 +437,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-mac-x64.zip
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-mac-x64.zip
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-mac.zip
asset_content_type: application/zip
@@ -410,7 +448,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-mac-x64.7z
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-mac-x64.7z
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-mac.7z
asset_content_type: application/x-7z-compressed
@@ -421,7 +459,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-mac-arm64.dmg
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-mac-arm64.dmg
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64.dmg
asset_content_type: application/x-apple-diskimage
@@ -432,7 +470,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-mac-arm64.zip
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-mac-arm64.zip
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64-mac.zip
asset_content_type: application/x-apple-diskimage
@@ -443,6 +481,6 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: https://uploads.github.com/repos/FreeTubeApp/FreeTube/releases/${{ inputs.releaseId }}/assets{?name,label}
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-mac-arm64.7z
asset_name: freetube-${{ steps.getPackageInfo.outputs.version }}-beta-mac-arm64.7z
asset_path: build/freetube-${{ steps.getPackageInfo.outputs.version }}-arm64-mac.7z
asset_content_type: application/x-7z-compressed

View File

@@ -11,7 +11,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
- uses: actions/stale@v10
with:
stale-issue-message: 'This issue is stale because it has been open 28 days with no activity. Remove stale label or comment or this will be closed in 7 days.'
stale-pr-message: 'This PR is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 14 days.'

68
.github/workflows/updateSite.yml vendored Normal file
View File

@@ -0,0 +1,68 @@
# This is a basic workflow that is manually triggered
name: Update Site Version Number
# Controls when the action will run. Workflow runs when manually triggered using the UI
# or API.
on:
workflow_dispatch:
release:
types: [published]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
repository: FreeTubeApp/FreeTubeApp.io
token: ${{ secrets.FLATHUB_TOKEN }}
- name: Get Repo Release List
uses: moustacheful/github-api-exec-action@v0
id: list_results
with:
# Command to execute, (e.g: `pulls.create`), see https://octokit.github.io/rest.js/ for available commands
command: repos.listReleases
payload: >
{
"owner": "FreeTubeApp",
"repo": "FreeTube"
}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Current Version Variable
uses: bluwy/substitute-string-action@v3
id: current
with:
_input-text: ${{ fromJson(steps.list_results.outputs.result)[0].tag_name }}
-beta: ''
v: ''
- name: Create Previous Version Variable
uses: bluwy/substitute-string-action@v3
id: previous
with:
_input-text: ${{ fromJson(steps.list_results.outputs.result)[1].tag_name }}
-beta: ''
v: ''
- name: Set Master Branch
# Currently the default branch is master, but if that changes later, then this acts as a failsafe.
run: |
git checkout master
- name: Update index.php
run: |
sed -i 's/${{ steps.previous.outputs.result }}/${{ steps.current.outputs.result }}/g' src/index.php
- name: Commit Files
uses: stefanzweifel/git-auto-commit-action@v7
with:
# Optional but recommended
# Defaults to "Apply automatic changes"
commit_message: Update version number to v${{ steps.current.outputs.result }}
# Optional options appended to `git-commit`
# See https://git-scm.com/docs/git-commit for a list of available options
commit_options: '--no-verify --signoff'
# Optional: Disable dirty check and always try to create a commit and push
skip_dirty_check: true

2
.gitignore vendored
View File

@@ -28,3 +28,5 @@ debug/
# Lefthook
lefthook-local.yml
locale-errors.json

View File

@@ -14,11 +14,11 @@ Please follow these guidelines before sending your pull request and making contr
* Make sure your pull request is set up to merge your branch to FreeTube's development branch.
* Make sure your branch is up to date with the development branch before submitting your pull request.
* Stick to a similar style of code already in the project. Please look at current code to get an idea on how to do this.
* Follow [ES6](http://es6-features.org/) standards in your code. Ex: Use `let` and `const` instead of `var`. Do not use `function(response){//code}` for callbacks, use `(response) => {//code}`.
* Follow [ES6](https://rse.github.io/es6-features/) standards in your code. Ex: Use `let` and `const` instead of `var`. Do not use `function(response){//code}` for callbacks, use `(response) => {//code}`.
* Comment your code when necessary. Follow the [JavaScript Documentation and Comments Standard](https://www.drupal.org/docs/develop/standards/javascript/javascript-api-documentation-and-comment-standards) for functions.
* Please follow proper Vue structure when creating new code / components. Use existing code as well as the [Vue.js Guide](https://vuejs.org/v2/guide/) for reference.
* Please follow proper Vue structure when creating new code / components. Use existing code as well as the [Vue.js Guide](https://vuejs.org/guide/introduction.html) for reference.
* Please test your code. Make sure new features work as well as existing core features such as watching videos or loading subscriptions. New features need to work with both the Local API as well as the Invidious API
* Please make sure your code does not violate any standards set by our linter. It's up to you to make fixes whenever necessary. You can run `npm run lint` to check locally and `npm run lint-fix` to automatically fix smaller issues.
* Please make sure your code does not violate any standards set by our linter. It's up to you to make fixes whenever necessary. You can run `yarn run lint` to check locally and `yarn run lint-fix` to automatically fix smaller issues.
* Please limit the amount of Node Modules that you introduce into the project. Only include them when **absolutely necessary** for your code to work (Ex: Using nedb for databases) or if a module provides similar functionality to what you are trying to achieve (Ex: Using autolinker to create links to outside URLs instead of writing the functionality myself).
* Please try to stay involved with the community and maintain your code. We are only a handful of developers working on FreeTube in our spare time. We do not have time to work on everything, and it would be nice if you can maintain your code when necessary.

View File

@@ -4,7 +4,7 @@
FreeTube is an open source desktop YouTube player built with privacy in mind.
Use YouTube without advertisements and prevent Google from tracking you with their cookies and JavaScript.
Available for Windows (10 and later), Mac (macOS 11 and later) & Linux thanks to Electron.
Available for Windows (10 and later), Mac (macOS 12 and later) & Linux thanks to Electron.
<p align="center"><a href="https://github.com/FreeTubeApp/FreeTube/releases">Download FreeTube</a></p>
<p align="center">
@@ -27,11 +27,21 @@ Available for Windows (10 and later), Mac (macOS 11 and later) & Linux thanks to
> If you have an idea or if you found a bug, please submit a [GitHub issue](https://github.com/FreeTubeApp/FreeTube/issues/new/choose) so that we can track it. Please [search the existing issues](https://github.com/FreeTubeApp/FreeTube/issues?q=is%3Aissue+sort%3Arelevance-desc) before submitting to prevent duplicates!
## Screenshots
<img src="https://i.imgur.com/zFgZUUV.png" width=300> <img src="https://i.imgur.com/9evYHgN.png" width=300> <img src="https://i.imgur.com/yT2UzPa.png" width=300> <img src="https://i.imgur.com/47zIEt4.png" width=300> <img src="https://i.imgur.com/hFB2fKC.png" width=300>
| The main FreeTube window |
|--------------------------------------------------------------------------------------------------|
| ![](https://raw.githubusercontent.com/FreeTubeApp/FreeTubeApp.io/master/src/images/FreeTube1.png)|
| Watching a video |
|--------------------------------------------------------------------------------------------------|
| ![](https://raw.githubusercontent.com/FreeTubeApp/FreeTubeApp.io/master/src/images/FreeTube2.png)|
| Settings |
|--------------------------------------------------------------------------------------------------|
| ![](https://raw.githubusercontent.com/FreeTubeApp/FreeTubeApp.io/master/src/images/FreeTube3.png)|
## How does it work?
FreeTube uses a built in extractor to grab and serve data / videos. The [Invidious API](https://github.com/iv-org/invidious) can also optionally be used. FreeTube does not use any official APIs to obtain data. While YouTube can still see your video requests, it can no
longer track you using cookies or JavaScript. Your subscriptions and history are stored locally on your computer and never sent out.
longer track you using cookies or JavaScript. Your subscriptions, playlists and history are stored locally on your computer and never sent out.
> [!IMPORTANT]
> Using a VPN or Tor is highly recommended to hide your IP while using FreeTube.
@@ -42,13 +52,14 @@ longer track you using cookies or JavaScript. Your subscriptions and history are
* Two extractor APIs to choose from (Built in or Invidious)
* Subscribe to channels without an account
* Connect to an externally setup proxy such as Tor
* View and search your local subscriptions, history, and saved videos
* View and search your local subscriptions, playlists and history
* Organize your subscriptions into "Profiles" to create a more focused feed
* Export & import subscriptions
* Youtube Trending
* Youtube Chapters
* Most popular videos page based on the set Invidious instance
* SponsorBlock
* SponsorBlock
* DeArrow
* Open videos from your browser directly into FreeTube (with extension)
* Watch videos using an external player
* Full Theme support
@@ -58,7 +69,7 @@ longer track you using cookies or JavaScript. Your subscriptions and history are
* Keyboard shortcuts
* Option to show only family friendly content
* Show/hide functionality or elements within the app using the distraction free settings
* View channel community posts
* View channel posts
### Browser Extensions
The following extensions open YouTube links directly in FreeTube:
@@ -85,7 +96,7 @@ RedirectTube, doesnt automatically open YouTube links in FreeTube. Instead, i
### Official Downloads
> [!CAUTION]
> FreeTube is only supported on Windows 10 and later, macOS 11 and above, and various Linux distributions. Installing it on unsupported systems may result in unexpected issues.
> FreeTube is only supported on Windows 10 and later, macOS 12 and above, and various Linux distributions. Installing it on unsupported systems may result in unexpected issues.
* [GitHub Releases](https://github.com/FreeTubeApp/FreeTube/releases)
@@ -114,7 +125,7 @@ The first build with a green check mark is the latest build.
* FreeTubeAndroid (FreeTube port for Android and PWA): [Download](https://github.com/MarmadileManteater/FreeTubeAndroid/releases) and [Source Code](https://github.com/MarmadileManteater/FreeTubeAndroid)
* Homebrew Formulae (Mac only): [Download](https://formulae.brew.sh/cask/freetube)
* Homebrew Formulae (Mac only): [Download for Apple Silicon](https://github.com/PikachuEXE/homebrew-FreeTube)
* makedeb Package Repository (MPR): [Download](https://mpr.makedeb.org/packages/freetube-bin)
@@ -149,7 +160,7 @@ We are actively looking for translations! We use [Weblate](https://hosted.webla
For the Linux Flatpak, the desktop entry comment string can be translated at our [Flatpak repository](https://github.com/flathub/io.freetubeapp.FreeTube/blob/master/io.freetubeapp.FreeTube.desktop).
## Contact
If you ever have any questions, feel free to ask it on our [Discussions](https://github.com/FreeTubeApp/FreeTube/discussions) page. Alternatively, you can email us at FreeTubeApp@protonmail.com or you can join our [Matrix Community](https://matrix.to/#/#freetube:matrix.org).
If you ever have any questions, feel free to ask it on our [Discussions](https://github.com/FreeTubeApp/FreeTube/discussions) page. Alternatively, you can email us at FreeTubeApp@protonmail.com or you can join our [Matrix Room](https://matrix.to/#/#freetube:matrix.org).
> [!IMPORTANT]
> Don't forget to check out the [rules](https://docs.freetubeapp.io/community/matrix/) before joining.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1021 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

View File

@@ -1 +0,0 @@
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M49.027 0C58.401 0 66 7.599 66 16.973V250H42.701A42.7 42.7 0 0 1 0 207.299V16.973C0 7.599 7.599 0 16.973 0h32.054zm130.331 122.23a6.44 6.44 0 0 1 0 11.54l-92.732 45.959A6.667 6.667 0 0 1 77 173.756V82.244a6.667 6.667 0 0 1 9.626-5.973l92.732 45.959zM250 0v20.217A45.783 45.783 0 0 1 204.217 66H93.805C84.524 66 77 58.476 77 49.195v-32.39C77 7.524 84.524 0 93.805 0H250z"/></svg>

Before

Width:  |  Height:  |  Size: 559 B

View File

@@ -0,0 +1 @@
<svg width="25" height="25" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M4.903 0C5.84 0 6.6.76 6.6 1.697V25H4.27A4.268 4.268 0 0 1 0 20.73V1.697C0 .76.76 0 1.697 0h3.206zM25 0v2.022A4.577 4.577 0 0 1 20.422 6.6H9.38A1.68 1.68 0 0 1 7.7 4.92V1.68C7.7.752 8.452 0 9.38 0H25zm-7.064 12.223a.645.645 0 0 1 0 1.154l-9.273 4.596a.668.668 0 0 1-.963-.597V8.224a.667.667 0 0 1 .963-.597l9.273 4.596z" style="fill:#4c4f69"/></svg>

After

Width:  |  Height:  |  Size: 508 B

View File

@@ -0,0 +1 @@
<svg width="25" height="25" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M4.903 0C5.84 0 6.6.76 6.6 1.697V25H4.27A4.268 4.268 0 0 1 0 20.73V1.697C0 .76.76 0 1.697 0h3.206zM25 0v2.022A4.577 4.577 0 0 1 20.422 6.6H9.38A1.68 1.68 0 0 1 7.7 4.92V1.68C7.7.752 8.452 0 9.38 0H25zm-7.064 12.223a.645.645 0 0 1 0 1.154l-9.273 4.596a.668.668 0 0 1-.963-.597V8.224a.667.667 0 0 1 .963-.597l9.273 4.596z" style="fill:#eff1f5"/></svg>

After

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1 +0,0 @@
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M49.027 0C58.401 0 66 7.599 66 16.973V250H42.701A42.7 42.7 0 0 1 0 207.299V16.973C0 7.599 7.599 0 16.973 0h32.054zM250 0v20.217A45.783 45.783 0 0 1 204.217 66H93.805C84.524 66 77 58.476 77 49.195v-32.39C77 7.524 84.524 0 93.805 0H250z" style="fill:#f33"/><path d="M179.358 122.23a6.44 6.44 0 0 1 0 11.54l-92.732 45.959A6.667 6.667 0 0 1 77 173.756V82.244a6.667 6.667 0 0 1 9.626-5.973l92.732 45.959z" style="fill:#29abe1"/></svg>

Before

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

View File

@@ -1 +0,0 @@
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M49.027 0C58.401 0 66 7.599 66 16.973V250H42.701A42.7 42.7 0 0 1 0 207.299V16.973C0 7.599 7.599 0 16.973 0h32.054zm130.331 122.23a6.44 6.44 0 0 1 0 11.54l-92.732 45.959A6.667 6.667 0 0 1 77 173.756V82.244a6.667 6.667 0 0 1 9.626-5.973l92.732 45.959zM250 0v20.217A45.783 45.783 0 0 1 204.217 66H93.805C84.524 66 77 58.476 77 49.195v-32.39C77 7.524 84.524 0 93.805 0H250z" style="fill:#fff"/></svg>

Before

Width:  |  Height:  |  Size: 577 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="120"><style>.st0{fill:#fff;width:16px;height:16px}.st1{stroke-linecap:round;fill:none;stroke:#fff;stroke-width:1.5}</style><path d="M16.5 8.5c.3.1.4.5.2.8-.1.1-.1.2-.2.2l-11.4 7c-.5.3-.8.1-.8-.5V2c0-.5.4-.8.8-.5l11.4 7zM24 1h2.2c.6 0 1 .4 1 1v14c0 .6-.4 1-1 1H24c-.6 0-1-.4-1-1V2c0-.5.4-1 1-1zm9.8 0H36c.6 0 1 .4 1 1v14c0 .6-.4 1-1 1h-2.2c-.6 0-1-.4-1-1V2c0-.5.4-1 1-1zM81 1.4c0-.6.4-1 1-1h5.4c.6 0 .7.3.3.7l-6 6c-.4.4-.7.3-.7-.3V1.4zm0 15.8c0 .6.4 1 1 1h5.4c.6 0 .7-.3.3-.7l-6-6c-.4-.4-.7-.3-.7.3v5.4zM98.8 1.4c0-.6-.4-1-1-1h-5.4c-.6 0-.7.3-.3.7l6 6c.4.4.7.3.7-.3V1.4zm0 15.8c0 .6-.4 1-1 1h-5.4c-.6 0-.7-.3-.3-.7l6-6c.4-.4.7-.3.7.3v5.4zM112.7 5c0 .6.4 1 1 1h4.1c.6 0 .7-.3.3-.7L113.4.6c-.4-.4-.7-.3-.7.3V5zm-7.1 1c.6 0 1-.4 1-1V.9c0-.6-.3-.7-.7-.3l-4.7 4.7c-.4.4-.3.7.3.7h4.1zm1 7.1c0-.6-.4-1-1-1h-4.1c-.6 0-.7.3-.3.7l4.7 4.7c.4.4.7.3.7-.3v-4.1zm7.1-1c-.6 0-1 .4-1 1v4.1c0 .5.3.7.7.3l4.7-4.7c.4-.4.3-.7-.3-.7h-4.1zM67 5.8c-.5.4-1.2.6-1.8.6H62c-.6 0-1 .4-1 1v5.7c0 .6.4 1 1 1h4.2c.3.2.5.4.8.6l3.5 2.6c.4.3.8.1.8-.4V3.5c0-.5-.4-.7-.8-.4L67 5.8z" class="st0"/><path d="M73.9 2.5s3.9-.8 3.9 7.7-3.9 7.8-3.9 7.8" class="st1"/><path d="M72.6 6.4s2.6-.4 2.6 3.8-2.6 3.9-2.6 3.9" class="st1"/><path d="M47 5.8c-.5.4-1.2.6-1.8.6H42c-.6 0-1 .4-1 1v5.7c0 .6.4 1 1 1h4.2c.3.2.5.4.8.6l3.5 2.6c.4.3.8.1.8-.4V3.5c0-.5-.4-.7-.8-.4L47 5.8z" class="st0"/><path d="m52.8 7 5.4 5.4m-5.4 0L58.2 7" style="fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round"/><path d="M128.7 8.6c-6.2-4.2-6.5 7.8 0 3.9m6.5-3.9c-6.2-4.2-6.5 7.8 0 3.9" style="fill:none;stroke:#fff"/><path d="M122.2 3.4h15.7v13.1h-15.7V3.4zM120.8 2v15.7h18.3V2h-18.3zM143.2 3h14c1.1 0 2 .9 2 2v10c0 1.1-.9 2-2 2h-14c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2z" class="st0"/><path d="M146.4 13.8c-.8 0-1.6-.4-2.1-1-1.1-1.4-1-3.4.1-4.8.5-.6 2-1.7 4.6.2l-.6.8c-1.4-1-2.6-1.1-3.3-.3-.8 1-.8 2.4-.1 3.5.7.9 1.9.8 3.4-.1l.5.9c-.7.5-1.6.7-2.5.8zm7.5 0c-.8 0-1.6-.4-2.1-1-1.1-1.4-1-3.4.1-4.8.5-.6 2-1.7 4.6.2l-.5.8c-1.4-1-2.6-1.1-3.3-.3-.8 1-.8 2.4-.1 3.5.7.9 1.9.8 3.4-.1l.5.9c-.8.5-1.7.7-2.6.8z" style="fill:#231f20"/><path d="M60.3 77c.6.2.8.8.6 1.4-.1.3-.3.5-.6.6L30 96.5c-1 .6-1.7.1-1.7-1v-35c0-1.1.8-1.5 1.7-1L60.3 77z" class="st0"/><path d="M2.5 79c0-20.7 16.8-37.5 37.5-37.5S77.5 58.3 77.5 79 60.7 116.5 40 116.5 2.5 99.7 2.5 79z" style="fill:none;stroke:#fff;stroke-width:5;opacity:.75;enable-background:new"/><path d="M140.3 77c.6.2.8.8.6 1.4-.1.3-.3.5-.6.6L110 96.5c-1 .6-1.7.1-1.7-1v-35c0-1.1.8-1.5 1.7-1L140.3 77z" class="st0"/><path d="M82.5 79c0-20.7 16.8-37.5 37.5-37.5s37.5 16.8 37.5 37.5-16.8 37.5-37.5 37.5S82.5 99.7 82.5 79z" style="fill:none;stroke:#fff;stroke-width:5"/><circle cx="201.9" cy="47.1" r="8.1" class="st0"/><circle cx="233.9" cy="79" r="5" style="fill:#fff;enable-background:new;opacity:.4"/><circle cx="201.9" cy="110.9" r="6" style="opacity:.6;fill:#fff;enable-background:new"/><circle cx="170.1" cy="79" r="7" style="opacity:.8;fill:#fff;enable-background:new"/><circle cx="178.2" cy="56.3" r="7.5" style="opacity:.9;fill:#fff;enable-background:new"/><circle cx="226.3" cy="56.1" r="4.5" style="opacity:.3;fill:#fff;enable-background:new"/><circle cx="225.8" cy="102.8" r="5.5" style="opacity:.5;fill:#fff;enable-background:new"/><circle cx="178.2" cy="102.8" r="6.5" style="opacity:.7;fill:#fff;enable-background:new"/><path d="M178 9.4c0 .4-.4.7-.9.7-.1 0-.2 0-.2-.1L172 8.2c-.5-.2-.6-.6-.1-.8l6.2-3.6c.5-.3.8-.1.7.5l-.8 5.1z" class="st0"/><path d="M169.4 15.9c-1 0-2-.2-2.9-.7-2-1-3.2-3-3.2-5.2.1-3.4 2.9-6 6.3-6 2.5.1 4.8 1.7 5.6 4.1l.1-.1 2.1 1.1c-.6-4.4-4.7-7.5-9.1-6.9-3.9.6-6.9 3.9-7 7.9 0 2.9 1.7 5.6 4.3 7 1.2.6 2.5.9 3.8 1 2.6 0 5-1.2 6.6-3.3l-1.8-.9c-1.2 1.2-3 2-4.8 2zM183.4 3.2c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5c0-.9.7-1.5 1.5-1.5zm5.1 0h8.5c.9 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5h-8.5c-.9 0-1.5-.7-1.5-1.5-.1-.9.6-1.5 1.5-1.5zm-5.1 5c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5c0-.9.7-1.5 1.5-1.5zm5.1 0h8.5c.9 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5h-8.5c-.9 0-1.5-.7-1.5-1.5-.1-.9.6-1.5 1.5-1.5zm-5.1 5c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5c0-.9.7-1.5 1.5-1.5zm5.1 0h8.5c.9 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5h-8.5c-.9 0-1.5-.7-1.5-1.5-.1-.9.6-1.5 1.5-1.5z" class="st0"/></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1 @@
<svg width="100" height="49" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M3.029 33.471c-.452 0-.815-.141-1.088-.422-.272-.282-.409-.65-.409-1.104V18.21c0-.454.129-.806.386-1.057.257-.25.612-.376 1.064-.376h8.204c.951 0 1.426.407 1.426 1.221 0 .799-.475 1.198-1.426 1.198H4.501v4.508h6.218c.95 0 1.425.407 1.425 1.221 0 .798-.475 1.197-1.425 1.197H4.501v5.823c0 .454-.132.822-.397 1.104-.265.281-.624.422-1.075.422zm16.403-11.857c.367-.031.656.055.868.258.211.204.317.509.317.916 0 .423-.092.736-.275.939-.183.204-.515.337-.994.399l-.635.071c-.832.094-1.441.407-1.829.939-.388.532-.582 1.197-.582 1.996v4.93c0 .454-.127.803-.381 1.045-.253.243-.571.364-.951.364-.381 0-.695-.121-.941-.364-.247-.242-.37-.591-.37-1.045v-9.086c0-.438.123-.775.37-1.01.246-.234.553-.352.92-.352.366 0 .662.114.888.34.226.228.338.552.338.975v.939c.268-.689.667-1.221 1.195-1.597a3.419 3.419 0 0 1 1.766-.633l.296-.024zm12.444 8.57c.277 0 .501.102.672.305.171.204.257.478.257.822 0 .485-.302.892-.905 1.221a8.382 8.382 0 0 1-1.882.716 8.06 8.06 0 0 1-2.004.27c-1.923 0-3.447-.532-4.571-1.596-1.125-1.065-1.687-2.521-1.687-4.368 0-1.174.244-2.215.734-3.122a5.2 5.2 0 0 1 2.065-2.113c.888-.502 1.894-.752 3.019-.752 1.075 0 2.012.227 2.811.681a4.7 4.7 0 0 1 1.857 1.925c.44.83.66 1.808.66 2.935 0 .673-.309 1.01-.928 1.01h-7.211c.097 1.08.415 1.874.953 2.383.538.509 1.32.763 2.347.763.521 0 .981-.063 1.381-.188.399-.125.851-.297 1.356-.516.489-.251.848-.376 1.076-.376zm-4.229-6.551c-.831 0-1.495.251-1.992.752-.497.501-.795 1.22-.892 2.16h5.524c-.033-.955-.277-1.679-.733-2.172-.457-.493-1.092-.74-1.907-.74zm17.487 6.551c.277 0 .501.102.672.305.171.204.257.478.257.822 0 .485-.302.892-.905 1.221a8.382 8.382 0 0 1-1.882.716c-.7.18-1.369.27-2.004.27-1.923 0-3.447-.532-4.571-1.596-1.125-1.065-1.687-2.521-1.687-4.368 0-1.174.245-2.215.734-3.122a5.2 5.2 0 0 1 2.065-2.113c.888-.502 1.894-.752 3.019-.752 1.075 0 2.012.227 2.811.681a4.7 4.7 0 0 1 1.857 1.925c.44.83.66 1.808.66 2.935 0 .673-.309 1.01-.928 1.01h-7.211c.098 1.08.415 1.874.953 2.383.538.509 1.32.763 2.347.763.521 0 .981-.063 1.381-.188.399-.125.851-.297 1.356-.516.489-.251.848-.376 1.076-.376zm-4.229-6.551c-.831 0-1.495.251-1.992.752-.497.501-.794 1.22-.892 2.16h5.524c-.033-.955-.277-1.679-.733-2.172-.456-.493-1.092-.74-1.907-.74zm13.402 9.838c-.521 0-1.186-.164-1.506-.494-.32-.329-.48-.768-.48-1.316V19.763h-3.374c-1.102 0-1.652-.501-1.652-1.504 0-.988.55-1.482 1.652-1.482h10.719c1.102 0 1.653.494 1.653 1.482 0 1.003-.551 1.504-1.653 1.504h-3.374v11.898c0 .548-.156.987-.468 1.316-.313.33-.981.494-1.517.494zM69.693 21.69c.545 0 .978.148 1.297.446.32.297.479.704.479 1.221v8.616c0 .486-.167.877-.502 1.175-.335.297-.768.446-1.297.446-.499 0-.896-.141-1.192-.423-.297-.282-.445-.658-.445-1.127v-.235a3.63 3.63 0 0 1-1.414 1.362c-.584.313-1.242.469-1.975.469-1.449 0-2.528-.403-3.237-1.209-.709-.806-1.064-2.023-1.064-3.651v-5.423c0-.517.16-.924.479-1.221.32-.298.752-.446 1.298-.446.545 0 .974.148 1.285.446.312.297.468.704.468 1.221v5.494c0 .688.144 1.197.432 1.526.288.329.729.493 1.321.493.685 0 1.243-.235 1.671-.704.429-.47.643-1.088.643-1.855v-4.954c0-.517.156-.924.467-1.221.312-.298.741-.446 1.286-.446zm11.736-.047c1.017 0 1.915.242 2.694.727.779.486 1.387 1.178 1.824 2.079.437.899.655 1.944.655 3.134s-.218 2.242-.655 3.158c-.437.915-1.049 1.628-1.836 2.137-.787.508-1.681.762-2.682.762-.811 0-1.542-.168-2.194-.504a3.633 3.633 0 0 1-1.502-1.397v.187c0 .501-.159.904-.477 1.21-.317.305-.747.458-1.287.458-.54 0-.974-.153-1.299-.458-.326-.306-.489-.709-.489-1.21V18.402c0-.485.171-.876.512-1.173.342-.298.791-.447 1.347-.447.525 0 .946.141 1.264.423.318.282.477.657.477 1.127v5.142a3.534 3.534 0 0 1 1.49-1.35c.644-.321 1.363-.481 2.158-.481zm-1.049 9.298c.842 0 1.494-.294 1.955-.881.461-.587.691-1.412.691-2.477 0-1.049-.23-1.851-.691-2.407-.461-.555-1.113-.833-1.955-.833-.843 0-1.494.286-1.955.857-.461.571-.692 1.381-.692 2.43 0 1.064.231 1.882.692 2.454.461.571 1.112.857 1.955.857zm18.404-.916c.337 0 .612.125.823.375.211.251.317.572.317.963 0 .266-.084.513-.254.74a2.005 2.005 0 0 1-.709.575 9.445 9.445 0 0 1-2.002.692c-.76.181-1.461.27-2.103.27-1.351 0-2.53-.242-3.535-.727-1.005-.486-1.778-1.178-2.318-2.078-.541-.9-.811-1.961-.811-3.182 0-1.174.262-2.214.786-3.122a5.526 5.526 0 0 1 2.179-2.125c.929-.509 1.984-.763 3.167-.763 1.132 0 2.124.231 2.977.692a4.895 4.895 0 0 1 1.989 1.973c.473.853.71 1.85.71 2.993 0 .345-.089.607-.266.787-.177.18-.427.27-.748.27h-7.095c.119.923.423 1.593.913 2.007.49.415 1.191.622 2.103.622.49 0 .929-.054 1.317-.164.389-.11.82-.258 1.293-.446.236-.094.464-.176.684-.247.219-.07.414-.105.583-.105zm-4.359-5.941c-.726 0-1.309.216-1.748.646-.439.431-.701 1.053-.786 1.867h4.891c-.051-.83-.275-1.456-.672-1.878-.397-.423-.958-.635-1.685-.635z" style="fill-rule:nonzero;fill:#4c4f69"/></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1 @@
<svg width="100" height="49" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M3.029 33.471c-.452 0-.815-.141-1.088-.422-.272-.282-.409-.65-.409-1.104V18.21c0-.454.129-.806.386-1.057.257-.25.612-.376 1.064-.376h8.204c.951 0 1.426.407 1.426 1.221 0 .799-.475 1.198-1.426 1.198H4.501v4.508h6.218c.95 0 1.425.407 1.425 1.221 0 .798-.475 1.197-1.425 1.197H4.501v5.823c0 .454-.132.822-.397 1.104-.265.281-.624.422-1.075.422zm16.403-11.857c.367-.031.656.055.868.258.211.204.317.509.317.916 0 .423-.092.736-.275.939-.183.204-.515.337-.994.399l-.635.071c-.832.094-1.441.407-1.829.939-.388.532-.582 1.197-.582 1.996v4.93c0 .454-.127.803-.381 1.045-.253.243-.571.364-.951.364-.381 0-.695-.121-.941-.364-.247-.242-.37-.591-.37-1.045v-9.086c0-.438.123-.775.37-1.01.246-.234.553-.352.92-.352.366 0 .662.114.888.34.226.228.338.552.338.975v.939c.268-.689.667-1.221 1.195-1.597a3.419 3.419 0 0 1 1.766-.633l.296-.024zm12.444 8.57c.277 0 .501.102.672.305.171.204.257.478.257.822 0 .485-.302.892-.905 1.221a8.382 8.382 0 0 1-1.882.716 8.06 8.06 0 0 1-2.004.27c-1.923 0-3.447-.532-4.571-1.596-1.125-1.065-1.687-2.521-1.687-4.368 0-1.174.244-2.215.734-3.122a5.2 5.2 0 0 1 2.065-2.113c.888-.502 1.894-.752 3.019-.752 1.075 0 2.012.227 2.811.681a4.7 4.7 0 0 1 1.857 1.925c.44.83.66 1.808.66 2.935 0 .673-.309 1.01-.928 1.01h-7.211c.097 1.08.415 1.874.953 2.383.538.509 1.32.763 2.347.763.521 0 .981-.063 1.381-.188.399-.125.851-.297 1.356-.516.489-.251.848-.376 1.076-.376zm-4.229-6.551c-.831 0-1.495.251-1.992.752-.497.501-.795 1.22-.892 2.16h5.524c-.033-.955-.277-1.679-.733-2.172-.457-.493-1.092-.74-1.907-.74zm17.487 6.551c.277 0 .501.102.672.305.171.204.257.478.257.822 0 .485-.302.892-.905 1.221a8.382 8.382 0 0 1-1.882.716c-.7.18-1.369.27-2.004.27-1.923 0-3.447-.532-4.571-1.596-1.125-1.065-1.687-2.521-1.687-4.368 0-1.174.245-2.215.734-3.122a5.2 5.2 0 0 1 2.065-2.113c.888-.502 1.894-.752 3.019-.752 1.075 0 2.012.227 2.811.681a4.7 4.7 0 0 1 1.857 1.925c.44.83.66 1.808.66 2.935 0 .673-.309 1.01-.928 1.01h-7.211c.098 1.08.415 1.874.953 2.383.538.509 1.32.763 2.347.763.521 0 .981-.063 1.381-.188.399-.125.851-.297 1.356-.516.489-.251.848-.376 1.076-.376zm-4.229-6.551c-.831 0-1.495.251-1.992.752-.497.501-.794 1.22-.892 2.16h5.524c-.033-.955-.277-1.679-.733-2.172-.456-.493-1.092-.74-1.907-.74zm13.402 9.838c-.521 0-1.186-.164-1.506-.494-.32-.329-.48-.768-.48-1.316V19.763h-3.374c-1.102 0-1.652-.501-1.652-1.504 0-.988.55-1.482 1.652-1.482h10.719c1.102 0 1.653.494 1.653 1.482 0 1.003-.551 1.504-1.653 1.504h-3.374v11.898c0 .548-.156.987-.468 1.316-.313.33-.981.494-1.517.494zM69.693 21.69c.545 0 .978.148 1.297.446.32.297.479.704.479 1.221v8.616c0 .486-.167.877-.502 1.175-.335.297-.768.446-1.297.446-.499 0-.896-.141-1.192-.423-.297-.282-.445-.658-.445-1.127v-.235a3.63 3.63 0 0 1-1.414 1.362c-.584.313-1.242.469-1.975.469-1.449 0-2.528-.403-3.237-1.209-.709-.806-1.064-2.023-1.064-3.651v-5.423c0-.517.16-.924.479-1.221.32-.298.752-.446 1.298-.446.545 0 .974.148 1.285.446.312.297.468.704.468 1.221v5.494c0 .688.144 1.197.432 1.526.288.329.729.493 1.321.493.685 0 1.243-.235 1.671-.704.429-.47.643-1.088.643-1.855v-4.954c0-.517.156-.924.467-1.221.312-.298.741-.446 1.286-.446zm11.736-.047c1.017 0 1.915.242 2.694.727.779.486 1.387 1.178 1.824 2.079.437.899.655 1.944.655 3.134s-.218 2.242-.655 3.158c-.437.915-1.049 1.628-1.836 2.137-.787.508-1.681.762-2.682.762-.811 0-1.542-.168-2.194-.504a3.633 3.633 0 0 1-1.502-1.397v.187c0 .501-.159.904-.477 1.21-.317.305-.747.458-1.287.458-.54 0-.974-.153-1.299-.458-.326-.306-.489-.709-.489-1.21V18.402c0-.485.171-.876.512-1.173.342-.298.791-.447 1.347-.447.525 0 .946.141 1.264.423.318.282.477.657.477 1.127v5.142a3.534 3.534 0 0 1 1.49-1.35c.644-.321 1.363-.481 2.158-.481zm-1.049 9.298c.842 0 1.494-.294 1.955-.881.461-.587.691-1.412.691-2.477 0-1.049-.23-1.851-.691-2.407-.461-.555-1.113-.833-1.955-.833-.843 0-1.494.286-1.955.857-.461.571-.692 1.381-.692 2.43 0 1.064.231 1.882.692 2.454.461.571 1.112.857 1.955.857zm18.404-.916c.337 0 .612.125.823.375.211.251.317.572.317.963 0 .266-.084.513-.254.74a2.005 2.005 0 0 1-.709.575 9.445 9.445 0 0 1-2.002.692c-.76.181-1.461.27-2.103.27-1.351 0-2.53-.242-3.535-.727-1.005-.486-1.778-1.178-2.318-2.078-.541-.9-.811-1.961-.811-3.182 0-1.174.262-2.214.786-3.122a5.526 5.526 0 0 1 2.179-2.125c.929-.509 1.984-.763 3.167-.763 1.132 0 2.124.231 2.977.692a4.895 4.895 0 0 1 1.989 1.973c.473.853.71 1.85.71 2.993 0 .345-.089.607-.266.787-.177.18-.427.27-.748.27h-7.095c.119.923.423 1.593.913 2.007.49.415 1.191.622 2.103.622.49 0 .929-.054 1.317-.164.389-.11.82-.258 1.293-.446.236-.094.464-.176.684-.247.219-.07.414-.105.583-.105zm-4.359-5.941c-.726 0-1.309.216-1.748.646-.439.431-.701 1.053-.786 1.867h4.891c-.051-.83-.275-1.456-.672-1.878-.397-.423-.958-.635-1.685-.635z" style="fill-rule:nonzero;fill:#eff1f5"/></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.6 KiB

View File

View File

@@ -1,14 +1,11 @@
const os = require('os')
const builder = require('electron-builder')
const config = require('./ebuilder.config.js')
import { Arch, build, Platform } from 'electron-builder'
import config from './ebuilder.config.mjs'
const Platform = builder.Platform
const Arch = builder.Arch
const args = process.argv
/** @type {Map<import('electron-builder').Platform, Map<import('electron-builder').Arch, Array<string>>>} */
let targets
const platform = os.platform()
const platform = process.platform
if (platform === 'darwin') {
let arch = Arch.x64
@@ -37,18 +34,12 @@ if (platform === 'darwin') {
arch = Arch.armv7l
}
targets = Platform.LINUX.createTarget(['deb', 'zip', '7z', 'apk', 'rpm', 'AppImage', 'pacman'], arch)
targets = Platform.LINUX.createTarget(['deb', 'zip', '7z', 'rpm', 'AppImage', 'pacman'], arch)
}
builder
.build({
targets,
config,
publish: 'never'
})
.then(m => {
console.log(m)
})
.catch(e => {
console.error(e)
})
try {
const output = await build({ targets, config, publish: 'never' })
console.log(output)
} catch (error) {
console.error(error)
}

View File

@@ -18,6 +18,7 @@ const web = process.argv.indexOf('--web') !== -1
let mainConfig
let rendererConfig
let preloadConfig
let botGuardScriptConfig
let webConfig
let SHAKA_LOCALES_TO_BE_BUNDLED
@@ -25,6 +26,7 @@ let SHAKA_LOCALES_TO_BE_BUNDLED
if (!web) {
mainConfig = require('./webpack.main.config')
rendererConfig = require('./webpack.renderer.config')
preloadConfig = require('./webpack.preload.config.js')
botGuardScriptConfig = require('./webpack.botGuardScript.config')
SHAKA_LOCALES_TO_BE_BUNDLED = rendererConfig.SHAKA_LOCALES_TO_BE_BUNDLED
@@ -132,6 +134,36 @@ function startMain() {
})
}
function startPreload() {
const compiler = webpack(preloadConfig)
const { name } = compiler
let firstTime = true
compiler.hooks.afterEmit.tap('afterEmit', async () => {
console.log(`\nCompiled ${name} script!`)
if (firstTime) {
firstTime = false
} else {
manualRestart = true
await restartElectron()
setTimeout(() => {
manualRestart = false
}, 2500)
}
console.log(`\nWatching file changes for ${name} script...`)
})
compiler.watch({
aggregateTimeout: 500,
},
err => {
if (err) console.error(err)
})
}
function startRenderer(callback) {
const compiler = webpack(rendererConfig)
const { name } = compiler
@@ -142,6 +174,11 @@ function startRenderer(callback) {
})
const server = new WebpackDevServer({
client: {
overlay: {
runtimeErrors: false
}
},
static: [
{
directory: path.resolve(__dirname, '..', 'static'),
@@ -208,6 +245,7 @@ function startWeb () {
if (!web) {
startRenderer(() => {
startBotGuardScript()
startPreload()
startMain()
})
} else {

View File

@@ -1,12 +1,12 @@
const { name, productName } = require('../package.json')
import packageDetails from '../package.json' with { type: 'json' }
/** @type {import('electron-builder').Configuration} */
const config = {
appId: `io.freetubeapp.${name}`,
export default {
appId: `io.freetubeapp.${packageDetails.name}`,
copyright: 'Copyleft © 2020-2025 freetubeapp@protonmail.com',
// asar: false,
// compression: 'store',
productName,
productName: packageDetails.productName,
directories: {
output: './build/',
},
@@ -52,7 +52,7 @@ const config = {
linux: {
category: 'Network',
icon: '_icons/icon.svg',
target: ['deb', 'zip', '7z', 'apk', 'rpm', 'AppImage', 'pacman'],
target: ['deb', 'zip', '7z', 'rpm', 'AppImage', 'pacman'],
},
// See the following issues for more information
// https://github.com/jordansissel/fpm/issues/1503
@@ -96,5 +96,3 @@ const config = {
oneClick: false,
},
}
module.exports = config

View File

@@ -0,0 +1,86 @@
import { readdirSync, readFileSync, writeFileSync } from 'node:fs'
import { join } from 'node:path'
import { load as loadYaml } from 'js-yaml'
const localesPath = join(import.meta.dirname, '..', 'static', 'locales')
const defaultLocale = 'en-US.yaml'
const errors = [
]
const defaultData = loadYaml(readFileSync(`${localesPath}/${defaultLocale}`, { encoding: 'utf-8' }))
const defaultKeys = Object.keys(defaultData)
const filesInLocaleDir = readdirSync(localesPath)
for (const file of filesInLocaleDir) {
if (file !== defaultLocale && file.endsWith('.yaml')) {
const fileData = loadYaml(readFileSync(`${localesPath}/${file}`, { encoding: 'utf-8' }))
const fileDataKeys = Object.keys(fileData)
addErrors(defaultData, fileData, defaultKeys, fileDataKeys, file)
}
}
writeFileSync('locale-errors.json', JSON.stringify(errors, null, 2))
if (errors.length > 0) {
console.error(errors)
} else {
console.log('no issues found')
}
/**
* @param {unknown} originalData - data from en-US converted to a JavaScript object
* @param {unknown} newData - data from the file we are analyzing converted to a JavaScript object
* @param {string[]} originalKeys - keys from en-US file
* @param {string[]} newKeys - keys from the file we are currently analyzing
* @param {string} file - the file we are currently analyzing
*/
function addErrors(originalData, newData, originalKeys, newKeys, file) {
newKeys.forEach(newKey => {
if (originalKeys.includes(newKey)) {
if (typeof originalData[newKey] === 'object') {
addErrors(originalData[newKey], newData[newKey], Object.keys(originalData[newKey]), Object.keys(newData[newKey]), file)
} else if (isMissingInterpolation(originalData[newKey], newData[newKey], file)) {
errors.push({ fileName: file, error: 'value is missing a template or has an extra template', key: newKey, defaultValue: originalData[newKey], value: newData[newKey] })
}
} else {
// The key doesn't exist in the en-US file but exists in current yaml file.
// We should go through this eventually but it's not as important as invalid templates
// errors.push({ fileName: file, error: 'extra key found', key: fdk })
}
})
}
/**
*
* @param {String} defaultValue
* @param {String} otherValue
*/
function isMissingInterpolation(defaultValue, otherValue, filename) {
if (otherValue === '') {
// not translated yet, we don't care
return false
}
const defaultMatches = Array.from(new Set(defaultValue.match(/{[^}]*}/g)))
const otherMatches = Array.from(new Set(otherValue.match(/{[^}]*}/g)))
if (defaultMatches) {
if (!otherMatches) {
// no templates found.
return true
}
defaultMatches.sort()
otherMatches.sort()
const defaultMatchesStringified = JSON.stringify(defaultMatches)
const otherMatchesStringified = JSON.stringify(otherMatches)
// check if templates match.
return defaultMatchesStringified !== otherMatchesStringified
} else if (otherMatches) {
// extra template found
return true
}
}

View File

@@ -119,6 +119,9 @@ for (const { youTube, freeTube } of languagesToScrape) {
processGeolocations(freeTube, youTube, response)
}
/**
* @param {string} youTubeLanguageCode
*/
async function scrapeLanguage(youTubeLanguageCode) {
const session = await Innertube.create({
retrieve_player: false,
@@ -129,7 +132,13 @@ async function scrapeLanguage(youTubeLanguageCode) {
return await session.actions.execute('/account/account_menu')
}
/**
* @param {string} freeTubeLanguage
* @param {string} youTubeLanguage
* @param {import('youtubei.js').ApiResponse} response
*/
function processGeolocations(freeTubeLanguage, youTubeLanguage, response) {
/** @type {{ name: string, code: string }[]} */
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
.map(({ compactLinkRenderer }) => {
return {
@@ -158,5 +167,10 @@ function processGeolocations(freeTubeLanguage, youTubeLanguage, response) {
geolocations.sort((a, b) => collator.compare(a.name, b.name))
}
writeFileSync(`${STATIC_DIRECTORY}/geolocations/${freeTubeLanguage}.json`, JSON.stringify(geolocations))
const output = {
names: geolocations.map(entry => entry.name),
codes: geolocations.map(entry => entry.code)
}
writeFileSync(`${STATIC_DIRECTORY}/geolocations/${freeTubeLanguage}.json`, JSON.stringify(output))
}

View File

@@ -1,7 +1,8 @@
const { readFileSync, readdirSync } = require('fs')
const { join } = require('path')
function getPreloadedLocales() {
const localesFile = readFileSync(`${__dirname}/../node_modules/shaka-player/dist/locales.js`, 'utf-8')
const localesFile = readFileSync(join(__dirname, '../node_modules/shaka-player/dist/locales.js'), 'utf-8')
const localesLine = localesFile.match(/^\/\/ LOCALES: ([\w ,-]+)$/m)
@@ -13,7 +14,7 @@ function getPreloadedLocales() {
}
function getAllLocales() {
const filenames = readdirSync(`${__dirname}/../node_modules/shaka-player/ui/locales`)
const filenames = readdirSync(join(__dirname, '../node_modules/shaka-player/ui/locales'))
return new Set(filenames
.filter(filename => filename !== 'source.json' && filename.endsWith('.json'))
@@ -85,7 +86,7 @@ function getShakaLocales() {
const shakaLocales = getAllLocales()
/** @type {string[]} */
const freeTubeLocales = JSON.parse(readFileSync(`${__dirname}/../static/locales/activeLocales.json`, 'utf-8'))
const freeTubeLocales = JSON.parse(readFileSync(join(__dirname, '../static/locales/activeLocales.json'), 'utf-8'))
const mappings = getMappings(shakaLocales, freeTubeLocales)

View File

@@ -21,6 +21,8 @@ const paths = readdirSync(distDirectory, {
// disallow the renderer process/browser windows to read the main.js file
dirent.name !== 'main.js' &&
dirent.name !== 'main.js.LICENSE.txt' &&
// disallow the renderer process/browser windows to read the preload.js file
dirent.name !== 'preload.js' &&
// disallow the renderer process/browser windows to read the botGuardScript.js file
dirent.name !== 'botGuardScript.js' &&
// filter out any web build files, in case the dist directory contains a web build

View File

@@ -1,61 +1,13 @@
// This script fixes shaka not exporting its type definitions and referencing remote google fonts in its CSS
// by adding an export line to the type definitions and downloading the fonts and updating the CSS to point to the local files
// This script fixes shaka-player referencing the Roboto font on google fonts in its CSS
// by updating the CSS to point to the local Roboto font
// this script only makes changes if they are needed, so running it multiple times doesn't cause any problems
import { appendFileSync, closeSync, ftruncateSync, openSync, readFileSync, writeFileSync, writeSync } from 'fs'
import { closeSync, ftruncateSync, openSync, readFileSync, writeSync } from 'fs'
import { resolve } from 'path'
const SHAKA_DIST_DIR = resolve(import.meta.dirname, '../node_modules/shaka-player/dist')
function fixTypes() {
let fixedTypes = false
let fileHandleNormal
try {
fileHandleNormal = openSync(`${SHAKA_DIST_DIR}/shaka-player.ui.d.ts`, 'a+')
const contents = readFileSync(fileHandleNormal, 'utf-8')
// This script is run after every `yarn install`, even if shaka-player wasn't updated
// So we want to check first, if we actually need to make any changes
// or if the ones from the previous run are still intact
if (!contents.includes('export default shaka')) {
appendFileSync(fileHandleNormal, 'export default shaka;\n')
fixedTypes = true
}
} finally {
if (typeof fileHandleNormal !== 'undefined') {
closeSync(fileHandleNormal)
}
}
let fileHandleDebug
try {
fileHandleDebug = openSync(`${SHAKA_DIST_DIR}/shaka-player.ui.debug.d.ts`, 'a+')
const contents = readFileSync(fileHandleDebug, 'utf-8')
// This script is run after every `yarn install`, even if shaka-player wasn't updated
// So we want to check first, if we actually need to make any changes
// or if the ones from the previous run are still intact
if (!contents.includes('export default shaka')) {
appendFileSync(fileHandleDebug, 'export default shaka;\n')
fixedTypes = true
}
} finally {
if (typeof fileHandleDebug !== 'undefined') {
closeSync(fileHandleDebug)
}
}
if (fixedTypes) {
console.log('Fixed shaka-player types')
}
}
async function removeRobotoFont() {
function removeRobotoFont() {
let cssFileHandle
try {
cssFileHandle = openSync(`${SHAKA_DIST_DIR}/controls.css`, 'r+')
@@ -72,63 +24,10 @@ async function removeRobotoFont() {
console.log('Removed shaka-player Roboto font, so it uses ours')
}
} finally {
if (typeof cssFileHandle !== 'undefined') {
if (cssFileHandle !== undefined) {
closeSync(cssFileHandle)
}
}
}
async function replaceAndDownloadMaterialIconsFont() {
let cssFileHandle
try {
cssFileHandle = openSync(`${SHAKA_DIST_DIR}/controls.css`, 'r+')
let cssContents = readFileSync(cssFileHandle, 'utf-8')
const fontFaceRegex = /@font-face{font-family:'Material Icons Round'[^}]+format\('opentype'\)}/
if (fontFaceRegex.test(cssContents)) {
const cssResponse = await fetch('https://fonts.googleapis.com/icon?family=Material+Icons+Round', {
headers: {
// Without the user-agent it returns the otf file instead of the woff2 one
'user-agent': 'Firefox/125.0'
}
})
const text = await cssResponse.text()
let newFontCSS = text.match(/(@font-face\s*{[^}]+})/)[1].replaceAll('\n', '')
const urlMatch = newFontCSS.match(/https:\/\/fonts\.gstatic\.com\/s\/materialiconsround\/(?<version>[^/]+)\/[^.]+\.(?<extension>\w+)/)
const url = urlMatch[0]
const { version, extension } = urlMatch.groups
const fontResponse = await fetch(url)
const fontContent = new Uint8Array(await fontResponse.arrayBuffer())
const filename = `shaka-materialiconsround-${version}.${extension}`
writeFileSync(`${SHAKA_DIST_DIR}/${filename}`, fontContent)
newFontCSS = newFontCSS.replace(url, `./${filename}`)
cssContents = cssContents.replace(fontFaceRegex, newFontCSS)
ftruncateSync(cssFileHandle)
writeSync(cssFileHandle, cssContents, 0, 'utf-8')
console.log('Changed shaka-player Material Icons Rounded font to use the smaller woff2 format instead of otf')
console.log('Downloaded shaka-player Material Icons Rounded font')
}
} catch (e) {
console.error(e)
} finally {
if (typeof cssFileHandle !== 'undefined') {
closeSync(cssFileHandle)
}
}
}
fixTypes()
await removeRobotoFont()
await replaceAndDownloadMaterialIconsFont()
removeRobotoFont()

View File

@@ -0,0 +1,13 @@
const { hash } = require('crypto')
const { join } = require('path')
const { readFileSync } = require('fs')
const path = join(__dirname, '../src/renderer/sigFrameScript.js')
const rawScript = readFileSync(path, 'utf8')
const script = require('terser').minify_sync({ [path]: rawScript }).code
module.exports.sigFrameTemplateParameters = {
sigFrameSrc: `data:text/html,${encodeURIComponent(`<!doctype html><script>${script}</script>`)}`,
sigFrameCspHash: `sha512-${hash('sha512', script, 'base64')}`
}

View File

@@ -25,6 +25,11 @@ const config = {
use: path.join(__dirname, 'mime-db-shrinking-loader.js')
}
],
generator: {
json: {
JSONParse: false
}
}
},
// webpack defaults to only optimising the production builds, so having this here is fine
optimization: {

View File

@@ -0,0 +1,34 @@
const path = require('path')
const isDevMode = process.env.NODE_ENV === 'development'
/** @type {import('webpack').Configuration} */
const config = {
name: 'preload',
mode: process.env.NODE_ENV,
devtool: isDevMode ? 'eval-cheap-module-source-map' : false,
entry: {
preload: path.join(__dirname, '../src/preload/main.js'),
},
infrastructureLogging: {
// Only warnings and errors
// level: 'none' disable logging
// Please read https://webpack.js.org/configuration/other-options/#infrastructurelogginglevel
level: isDevMode ? 'info' : 'none'
},
output: {
path: path.join(__dirname, '../dist'),
filename: '[name].js'
},
externals: [
'electron/renderer'
],
externalsType: 'commonjs',
node: {
__dirname: false,
__filename: false
},
target: 'electron-preload',
}
module.exports = config

View File

@@ -2,7 +2,7 @@ const path = require('path')
const { readFileSync, readdirSync } = require('fs')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const { VueLoaderPlugin } = require('vue-loader')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
@@ -12,6 +12,7 @@ const {
SHAKA_LOCALES_PREBUNDLED,
SHAKA_LOCALES_TO_BE_BUNDLED
} = require('./getShakaLocales')
const { sigFrameTemplateParameters } = require('./sigFrameConfig')
const isDevMode = process.env.NODE_ENV === 'development'
@@ -39,7 +40,7 @@ const config = {
level: isDevMode ? 'info' : 'none'
},
output: {
libraryTarget: 'commonjs2',
scriptType: 'text/javascript',
path: path.join(__dirname, '../dist'),
filename: '[name].js',
},
@@ -55,7 +56,7 @@ const config = {
loader: 'vue-loader',
options: {
compilerOptions: {
whitespace: 'condense',
isCustomElement: (tag) => tag === 'swiper-container' || tag === 'swiper-slide'
}
}
},
@@ -108,6 +109,11 @@ const config = {
}
},
],
generator: {
json: {
JSONParse: false
}
}
},
// webpack defaults to only optimising the production builds, so having this here is fine
optimization: {
@@ -127,6 +133,12 @@ const config = {
'process.env.IS_ELECTRON': true,
'process.env.IS_ELECTRON_MAIN': false,
'process.env.SUPPORTS_LOCAL_API': true,
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false',
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false',
__VUE_I18N_LEGACY_API__: 'true',
__VUE_I18N_FULL_INSTALL__: 'false',
__INTLIFY_PROD_DEVTOOLS__: 'false',
'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames),
'process.env.GEOLOCATION_NAMES': JSON.stringify(readdirSync(path.join(__dirname, '..', 'static', 'geolocations')).map(filename => filename.replace('.json', ''))),
'process.env.SWIPER_VERSION': `'${swiperVersion}'`,
@@ -134,9 +146,9 @@ const config = {
'process.env.SHAKA_LOCALES_PREBUNDLED': JSON.stringify(SHAKA_LOCALES_PREBUNDLED)
}),
new HtmlWebpackPlugin({
excludeChunks: ['processTaskWorker'],
filename: 'index.html',
template: path.resolve(__dirname, '../src/index.ejs')
template: path.resolve(__dirname, '../src/index.ejs'),
templateParameters: sigFrameTemplateParameters
}),
new VueLoaderPlugin(),
new MiniCssExtractPlugin({
@@ -174,9 +186,6 @@ const config = {
],
resolve: {
alias: {
vue$: 'vue/dist/vue.runtime.esm.js',
'portal-vue$': 'portal-vue/dist/portal-vue.esm.js',
DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$: path.resolve(__dirname, '../src/datastores/handlers/electron.js'),
'youtubei.js$': 'youtubei.js/web',
@@ -186,7 +195,7 @@ const config = {
},
extensions: ['.js', '.vue']
},
target: 'electron-renderer',
target: 'web',
}
if (isDevMode) {

View File

@@ -2,7 +2,7 @@ const path = require('path')
const fs = require('fs')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const { VueLoaderPlugin } = require('vue-loader')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const JsonMinimizerPlugin = require('json-minimizer-webpack-plugin')
@@ -45,7 +45,7 @@ const config = {
loader: 'vue-loader',
options: {
compilerOptions: {
whitespace: 'condense',
isCustomElement: (tag) => tag === 'swiper-container' || tag === 'swiper-slide',
}
}
},
@@ -102,6 +102,11 @@ const config = {
}
},
],
generator: {
json: {
JSONParse: false
}
}
},
// webpack defaults to only optimising the production builds, so having this here is fine
optimization: {
@@ -123,6 +128,12 @@ const config = {
'process.env.IS_ELECTRON': false,
'process.env.IS_ELECTRON_MAIN': false,
'process.env.SUPPORTS_LOCAL_API': false,
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false',
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false',
__VUE_I18N_LEGACY_API__: 'true',
__VUE_I18N_FULL_INSTALL__: 'false',
__INTLIFY_PROD_DEVTOOLS__: 'false',
'process.env.SWIPER_VERSION': `'${swiperVersion}'`
}),
new webpack.ProvidePlugin({
@@ -153,18 +164,11 @@ const config = {
],
resolve: {
alias: {
vue$: 'vue/dist/vue.runtime.esm.js',
'portal-vue$': 'portal-vue/dist/portal-vue.esm.js',
DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$: path.resolve(__dirname, '../src/datastores/handlers/web.js'),
// change to "shaka-player.ui.debug.js" to get debug logs (update jsconfig to get updated types)
'shaka-player$': 'shaka-player/dist/shaka-player.ui.js',
},
fallback: {
'fs/promises': path.resolve(__dirname, '_empty.js'),
path: require.resolve('path-browserify'),
},
extensions: ['.js', '.vue']
},
target: 'web',

View File

@@ -33,9 +33,9 @@ export default [
ts: false,
}),
js.configs.recommended,
...eslintPluginVue.configs['flat/vue2-recommended'],
...eslintPluginVue.configs['flat/recommended'],
...vuejsAccessibility.configs["flat/recommended"],
...intlifyVueI18N.configs['flat/recommended'],
...intlifyVueI18N.configs['recommended'],
{
files: [
'**/*.{js,vue}',
@@ -63,7 +63,7 @@ export default [
settings: {
'vue-i18n': {
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
messageSyntaxVersion: '^8.0.0',
messageSyntaxVersion: '^11.0.0',
},
},
@@ -79,7 +79,6 @@ export default [
'no-unused-vars': 'warn',
'no-undef': 'warn',
'object-shorthand': 'off',
'vue/no-template-key': 'warn',
'vue/multi-word-component-names': 'off',
'vuejs-accessibility/label-has-for': ['error', {
@@ -89,10 +88,8 @@ export default [
}],
'vuejs-accessibility/no-static-element-interactions': 'off',
'n/no-callback-literal': 'warn',
'n/no-path-concat': 'warn',
'unicorn/better-regex': 'error',
'unicorn/no-array-push-push': 'error',
'unicorn/prefer-single-call': 'error',
'unicorn/prefer-keyboard-event-key': 'error',
'unicorn/prefer-regexp-test': 'error',
'unicorn/prefer-string-replace-all': 'error',
@@ -121,9 +118,8 @@ export default [
ignoreText: ['-', '•', '/', 'YouTube', 'Invidious', 'FreeTube'],
}],
'@intlify/vue-i18n/no-deprecated-tc': 'off',
'vue/require-explicit-emits': 'error',
'vue/no-unused-emit-declarations': 'error',
'vue/prefer-use-template-ref': 'error',
'jsdoc/check-alignment': 'error',
'jsdoc/check-property-names': 'error',
@@ -138,6 +134,15 @@ export default [
},
},
{
files: ['src/main/index.js'],
languageOptions: {
globals: {
__FREETUBE_ALLOWED_PATHS__: 'readable'
}
}
},
...eslintPluginJsonc.configs['flat/base'],
{
files: ['**/*.json'],
@@ -159,7 +164,7 @@ export default [
settings: {
'vue-i18n': {
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
messageSyntaxVersion: '^8.0.0',
messageSyntaxVersion: '^11.0.0',
},
},
},
@@ -184,7 +189,7 @@ export default [
settings: {
'vue-i18n': {
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
messageSyntaxVersion: '^8.0.0',
messageSyntaxVersion: '^11.0.0',
},
},
},
@@ -203,7 +208,7 @@ export default [
settings: {
'vue-i18n': {
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
messageSyntaxVersion: '^8.0.0',
messageSyntaxVersion: '^11.0.0',
},
},
},
@@ -223,7 +228,6 @@ export default [
'@stylistic/space-before-function-paren': 'off',
'@stylistic/comma-dangle': ['error', 'only-multiline'],
'no-console': 'off',
'n/no-path-concat': 'off',
'unicorn/better-regex': 'error',
'unicorn/prefer-optional-catch-binding': 'error',
'unicorn/prefer-date-now': 'error',
@@ -246,7 +250,6 @@ export default [
'no-console': 'off',
'@stylistic/space-before-function-paren': 'off',
'@stylistic/comma-dangle': ['error', 'only-multiline'],
'n/no-path-concat': 'off',
'unicorn/better-regex': 'error',
'unicorn/prefer-optional-catch-binding': 'error',
'unicorn/prefer-date-now': 'error',

View File

@@ -1,6 +1,6 @@
{
"vueCompilerOptions": {
"target": 2.7
"target": 3.5
},
"compilerOptions": {
"strictNullChecks": true,

View File

@@ -2,12 +2,12 @@
"name": "freetube",
"productName": "FreeTube",
"description": "A private YouTube client",
"version": "0.23.3",
"version": "0.23.12",
"license": "AGPL-3.0-or-later",
"main": "./dist/main.js",
"private": true,
"author": {
"name": "PrestonN",
"name": "FreeTube Team",
"email": "FreeTubeApp@protonmail.com",
"url": "https://github.com/FreeTubeApp/FreeTube"
},
@@ -22,9 +22,9 @@
"build": "run-s patch-shaka pack build-release",
"build:arm64": "run-s patch-shaka pack build-release:arm64",
"build:arm32": "run-s patch-shaka pack build-release:arm32",
"build-release": "node _scripts/build.js",
"build-release:arm64": "node _scripts/build.js arm64",
"build-release:arm32": "node _scripts/build.js arm32",
"build-release": "node _scripts/build.mjs",
"build-release:arm64": "node _scripts/build.mjs arm64",
"build-release:arm32": "node _scripts/build.mjs arm32",
"clean": "node _scripts/clean.mjs",
"debug": "run-s patch-shaka debug-runner",
"debug-runner": "node _scripts/dev-runner.js --remote-debug",
@@ -43,13 +43,14 @@
"lint-style": "stylelint \"src/**/*.{css,scss}\"",
"lint-style-fix": "stylelint --fix \"src/**/*.{css,scss}\"",
"lint-yml": "eslint --config eslint.config.mjs \"**/*.yml\" \"**/*.yaml\"",
"pack": "run-p pack:main pack:renderer pack:botGuardScript && node _scripts/injectAllowedPaths.mjs",
"pack": "run-p pack:main pack:renderer pack:preload pack:botGuardScript && node _scripts/injectAllowedPaths.mjs",
"pack:main": "webpack --mode=production --node-env=production --config _scripts/webpack.main.config.js",
"pack:renderer": "webpack --mode=production --node-env=production --config _scripts/webpack.renderer.config.js",
"pack:preload": "webpack --mode=production --node-env=production --config _scripts/webpack.preload.config.js",
"pack:web": "webpack --mode=production --node-env=production --config _scripts/webpack.web.config.js",
"pack:botGuardScript": "webpack --config _scripts/webpack.botGuardScript.config.js",
"postinstall": "run-s --silent patch-shaka",
"release": "run-s test build",
"postinstall": "yarn run --silent patch-shaka",
"checkforbadtemplates": "node _scripts/findMissingTemplates.mjs",
"ci": "yarn install --silent --frozen-lockfile --network-concurrency 1"
},
"dependencies": {
@@ -57,68 +58,64 @@
"@fortawesome/free-brands-svg-icons": "^6.7.2",
"@fortawesome/free-regular-svg-icons": "^6.7.2",
"@fortawesome/free-solid-svg-icons": "^6.7.2",
"@fortawesome/vue-fontawesome": "^2.0.10",
"@seald-io/nedb": "^4.1.1",
"autolinker": "^4.1.0",
"@fortawesome/vue-fontawesome": "^3.0.8",
"@seald-io/nedb": "^4.1.2",
"autolinker": "^4.1.5",
"bgutils-js": "^3.2.0",
"electron-context-menu": "^4.0.5",
"marked": "^15.0.7",
"path-browserify": "^1.0.1",
"portal-vue": "^2.1.7",
"electron-context-menu": "^4.1.1",
"marked": "^17.0.1",
"process": "^0.11.10",
"shaka-player": "^4.14.3",
"swiper": "^11.2.6",
"vue": "^2.7.16",
"vue-i18n": "^8.28.2",
"vue-observe-visibility": "^1.0.0",
"vue-router": "^3.6.5",
"vuex": "^3.6.2",
"youtubei.js": "^13.3.0"
"shaka-player": "^4.16.10",
"swiper": "^12.0.3",
"vue": "^3.5.25",
"vue-i18n": "^11.1.12",
"vue-observe-visibility": "^2.0.0-alpha.1",
"vue-router": "^4.6.3",
"vuex": "^4.1.0",
"youtubei.js": "^16.0.1"
},
"devDependencies": {
"@babel/core": "^7.26.10",
"@babel/plugin-transform-class-properties": "^7.25.9",
"@babel/preset-env": "^7.26.9",
"@double-great/stylelint-a11y": "^3.0.4",
"@eslint/js": "^9.23.0",
"@intlify/eslint-plugin-vue-i18n": "^3.2.0",
"@babel/core": "^7.28.5",
"@babel/preset-env": "^7.28.5",
"@double-great/stylelint-a11y": "^3.4.1",
"@eslint/js": "^9.39.1",
"@intlify/eslint-plugin-vue-i18n": "^4.1.0",
"babel-loader": "^10.0.0",
"copy-webpack-plugin": "^13.0.0",
"copy-webpack-plugin": "^13.0.1",
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.2",
"electron": "^35.0.3",
"electron-builder": "^26.0.12",
"eslint": "^9.23.0",
"eslint-plugin-jsdoc": "^50.6.9",
"eslint-plugin-jsonc": "^2.20.0",
"eslint-plugin-unicorn": "^58.0.0",
"eslint-plugin-vue": "^10.0.0",
"electron": "^39.2.3",
"electron-builder": "^26.3.0",
"eslint": "^9.39.1",
"eslint-plugin-jsdoc": "^61.4.1",
"eslint-plugin-jsonc": "^2.21.0",
"eslint-plugin-unicorn": "^62.0.0",
"eslint-plugin-vue": "^10.6.0",
"eslint-plugin-vuejs-accessibility": "^2.4.1",
"eslint-plugin-yml": "^1.17.0",
"globals": "^16.0.0",
"html-webpack-plugin": "^5.6.3",
"js-yaml": "^4.1.0",
"json-minimizer-webpack-plugin": "^5.0.0",
"lefthook": "^1.11.4",
"mini-css-extract-plugin": "^2.9.2",
"neostandard": "^0.12.1",
"npm-run-all2": "^7.0.2",
"postcss": "^8.5.3",
"eslint-plugin-yml": "^1.19.0",
"globals": "^16.5.0",
"html-webpack-plugin": "^5.6.5",
"js-yaml": "^4.1.1",
"json-minimizer-webpack-plugin": "^5.0.1",
"lefthook": "^2.0.4",
"mini-css-extract-plugin": "^2.9.4",
"neostandard": "^0.12.2",
"npm-run-all2": "^8.0.4",
"postcss": "^8.5.6",
"postcss-scss": "^4.0.9",
"sass": "^1.86.0",
"sass-loader": "^16.0.5",
"stylelint": "^16.16.0",
"sass": "^1.94.2",
"sass-loader": "^16.0.6",
"stylelint": "^16.26.0",
"stylelint-config-sass-guidelines": "^12.1.0",
"stylelint-config-standard": "^37.0.0",
"stylelint-config-standard": "^39.0.1",
"stylelint-high-performance-animation": "^1.11.0",
"stylelint-use-logical-spec": "^5.0.1",
"tree-kill": "1.2.2",
"vue-devtools": "^5.1.4",
"vue-eslint-parser": "^10.1.1",
"vue-loader": "^15.10.0",
"webpack": "^5.98.0",
"vue-eslint-parser": "^10.2.0",
"vue-loader": "^17.4.2",
"webpack": "^5.103.0",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.0",
"webpack-dev-server": "^5.2.2",
"yaml-eslint-parser": "^1.3.0"
}
}

View File

@@ -6,10 +6,9 @@ import { BG, buildURL, GOOG_API_KEY } from 'bgutils-js'
/**
* Based on: https://github.com/LuanRT/BgUtils/blob/main/examples/node/innertube-challenge-fetcher-example.ts
* @param {string} videoId
* @param {string} visitorData
* @param {import('youtubei.js').Session['context']} context
*/
export default async function (videoId, visitorData, context) {
export default async function (videoId, context) {
const requestKey = 'O43z0dpjhgX20SCx4KAo'
const challengeResponse = await fetch(
@@ -19,7 +18,7 @@ export default async function (videoId, visitorData, context) {
headers: {
Accept: '*/*',
'Content-Type': 'application/json',
'X-Goog-Visitor-Id': visitorData,
'X-Goog-Visitor-Id': context.client.visitorData,
'X-Youtube-Client-Version': context.client.clientVersion,
'X-Youtube-Client-Name': '1'
},
@@ -63,7 +62,7 @@ export default async function (videoId, visitorData, context) {
})
const webPoSignalOutput = []
const botGuardResponse = await botGuard.snapshot({ webPoSignalOutput })
const botGuardResponse = await botGuard.snapshot({ webPoSignalOutput }, 10_000)
const integrityTokenResponse = await fetch(buildURL('GenerateIT', true), {
method: 'POST',
@@ -83,8 +82,5 @@ export default async function (videoId, visitorData, context) {
const integrityTokenBasedMinter = await BG.WebPoMinter.create({ integrityToken: response[0] }, webPoSignalOutput)
const contentPoToken = await integrityTokenBasedMinter.mintAsWebsafeString(videoId)
const sessionPoToken = await integrityTokenBasedMinter.mintAsWebsafeString(visitorData)
return { contentPoToken, sessionPoToken }
return await integrityTokenBasedMinter.mintAsWebsafeString(videoId)
}

View File

@@ -2,10 +2,8 @@
const IpcChannels = {
ENABLE_PROXY: 'enable-proxy',
DISABLE_PROXY: 'disable-proxy',
OPEN_EXTERNAL_LINK: 'open-external-link',
GET_SYSTEM_LOCALE: 'get-system-locale',
GET_NAVIGATION_HISTORY: 'get-navigation-history',
SHOW_SAVE_DIALOG: 'show-save-dialog',
STOP_POWER_SAVE_BLOCKER: 'stop-power-save-blocker',
START_POWER_SAVE_BLOCKER: 'start-power-save-blocker',
CREATE_NEW_WINDOW: 'create-new-window',
@@ -14,9 +12,6 @@ const IpcChannels = {
APP_READY: 'app-ready',
RELAUNCH_REQUEST: 'relaunch-request',
REQUEST_FULLSCREEN: 'request-fullscreen',
REQUEST_PIP: 'request-pip',
SEARCH_INPUT_HANDLING_READY: 'search-input-handling-ready',
UPDATE_SEARCH_INPUT_TEXT: 'update-search-input-text',
@@ -45,11 +40,11 @@ const IpcChannels = {
SET_INVIDIOUS_AUTHORIZATION: 'set-invidious-authorization',
GENERATE_PO_TOKENS: 'generate-po-tokens',
GENERATE_PO_TOKEN: 'generate-po-token',
GET_SCREENSHOT_FALLBACK_FOLDER: 'get-screenshot-fallback-folder',
CHOOSE_DEFAULT_FOLDER: 'choose-default-folder',
WRITE_SCREENSHOT: 'write-screenshot',
WRITE_TO_DEFAULT_FOLDER: 'write-to-default-folder',
}
const DBActions = {
@@ -62,13 +57,13 @@ const DBActions = {
UPSERT: 2,
DELETE: 3,
DELETE_MULTIPLE: 4,
DELETE_ALL: 5
DELETE_ALL: 5,
OVERWRITE: 6
},
HISTORY: {
OVERWRITE: 20,
UPDATE_WATCH_PROGRESS: 21,
UPDATE_PLAYLIST: 22,
UPDATE_WATCH_PROGRESS: 20,
UPDATE_PLAYLIST: 21,
},
PROFILES: {
@@ -102,13 +97,13 @@ const SyncEvents = {
UPSERT: 1,
DELETE: 2,
DELETE_MULTIPLE: 3,
DELETE_ALL: 4
DELETE_ALL: 4,
OVERWRITE: 5,
},
HISTORY: {
OVERWRITE: 20,
UPDATE_WATCH_PROGRESS: 21,
UPDATE_PLAYLIST: 22,
UPDATE_WATCH_PROGRESS: 20,
UPDATE_PLAYLIST: 21,
},
PROFILES: {
@@ -157,8 +152,6 @@ const KeyboardShortcuts = {
NEW_WINDOW: 'ctrl+N',
MINIMIZE_WINDOW: 'ctrl+M',
CLOSE_WINDOW: 'ctrl+W',
RESTART_WINDOW: 'ctrl+R',
FORCE_RESTART_WINDOW: 'ctrl+shift+R',
TOGGLE_DEVTOOLS: 'ctrl+shift+I',
FOCUS_SEARCH: 'alt+D',
SEARCH_IN_NEW_WINDOW: 'shift+enter',
@@ -192,16 +185,46 @@ const KeyboardShortcuts = {
SMALL_REWIND: 'arrowleft',
SMALL_FAST_FORWARD: 'arrowright',
DECREASE_VIDEO_SPEED: 'o',
DECREASE_VIDEO_SPEED_ALT: '<',
INCREASE_VIDEO_SPEED: 'p',
INCREASE_VIDEO_SPEED_ALT: '>',
SKIP_N_TENTHS: '0..9',
LAST_CHAPTER: 'ctrl+arrowleft',
NEXT_CHAPTER: 'ctrl+arrowright',
LAST_FRAME: ',',
NEXT_FRAME: '.',
HOME: 'home',
END: 'end',
SKIP_TO_NEXT: 'shift+n',
SKIP_TO_PREV: 'shift+p'
}
},
}
/**
* Material Design Symbols used by FreeTube's custom player components
*
* This only has the value of the `d` attribute from the `<path>` element, the rest of the SVG is generated at runtime.
*
* Fetched with
* https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsrounded/<icon>/default/24px.svg
* https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsrounded/<icon>/fill1/24px.svg
*/
const PlayerIcons = {
CLOSE_FULLSCREEN_FILLED: 'M400-344 164-108q-11 11-28 11t-28-11q-11-11-11-28t11-28l236-236H200q-17 0-28.5-11.5T160-440q0-17 11.5-28.5T200-480h240q17 0 28.5 11.5T480-440v240q0 17-11.5 28.5T440-160q-17 0-28.5-11.5T400-200v-144Zm216-216h144q17 0 28.5 11.5T800-520q0 17-11.5 28.5T760-480H520q-17 0-28.5-11.5T480-520v-240q0-17 11.5-28.5T520-800q17 0 28.5 11.5T560-760v144l236-236q11-11 28-11t28 11q11 11 11 28t-11 28L616-560Z',
DONE_FILLED: 'm382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z',
INSERT_CHART_DEFAULT: 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Zm120 200q-17 0-28.5 11.5T280-520v200q0 17 11.5 28.5T320-280q17 0 28.5-11.5T360-320v-200q0-17-11.5-28.5T320-560Zm160-120q-17 0-28.5 11.5T440-640v320q0 17 11.5 28.5T480-280q17 0 28.5-11.5T520-320v-320q0-17-11.5-28.5T480-680Zm160 240q-17 0-28.5 11.5T600-400v80q0 17 11.5 28.5T640-280q17 0 28.5-11.5T680-320v-80q0-17-11.5-28.5T640-440Z',
INSERT_CHART_FILLED: 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-440q-17 0-28.5 11.5T280-520v200q0 17 11.5 28.5T320-280q17 0 28.5-11.5T360-320v-200q0-17-11.5-28.5T320-560Zm160-120q-17 0-28.5 11.5T440-640v320q0 17 11.5 28.5T480-280q17 0 28.5-11.5T520-320v-320q0-17-11.5-28.5T480-680Zm160 240q-17 0-28.5 11.5T600-400v80q0 17 11.5 28.5T640-280q17 0 28.5-11.5T680-320v-80q0-17-11.5-28.5T640-440Z',
VARIABLES_DEFAULT: 'M120-320v-320q0-17 11.5-28.5T160-680h640q17 0 28.5 11.5T840-640v320q0 17-11.5 28.5T800-280H160q-17 0-28.5-11.5T120-320Zm80-40h560v-240H200v240Zm0 0v-240 240Z',
OPEN_IN_FULL_FILLED: 'M160-120q-17 0-28.5-11.5T120-160v-240q0-17 11.5-28.5T160-440q17 0 28.5 11.5T200-400v144l504-504H560q-17 0-28.5-11.5T520-800q0-17 11.5-28.5T560-840h240q17 0 28.5 11.5T840-800v240q0 17-11.5 28.5T800-520q-17 0-28.5-11.5T760-560v-144L256-200h144q17 0 28.5 11.5T440-160q0 17-11.5 28.5T400-120H160Z',
PAUSE_CIRCLE_FILLED: 'M400-320q17 0 28.5-11.5T440-360v-240q0-17-11.5-28.5T400-640q-17 0-28.5 11.5T360-600v240q0 17 11.5 28.5T400-320Zm160 0q17 0 28.5-11.5T600-360v-240q0-17-11.5-28.5T560-640q-17 0-28.5 11.5T520-600v240q0 17 11.5 28.5T560-320ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z',
PHOTO_CAMERA_FILLED: 'M480-260q75 0 127.5-52.5T660-440q0-75-52.5-127.5T480-620q-75 0-127.5 52.5T300-440q0 75 52.5 127.5T480-260Zm0-80q-42 0-71-29t-29-71q0-42 29-71t71-29q42 0 71 29t29 71q0 42-29 71t-71 29ZM160-120q-33 0-56.5-23.5T80-200v-480q0-33 23.5-56.5T160-760h126l50-54q11-12 26.5-19t32.5-7h170q17 0 32.5 7t26.5 19l50 54h126q33 0 56.5 23.5T880-680v480q0 33-23.5 56.5T800-120H160Z',
PLAY_CIRCLE_FILLED: 'm426-330 195-125q14-9 14-25t-14-25L426-630q-15-10-30.5-1.5T380-605v250q0 18 15.5 26.5T426-330Zm54 250q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z',
RECORD_VOICE_OVER_FILLED: 'M920-600q0 69-24.5 131.5T829-355q-12 14-30 15t-32-13q-13-13-12-31t12-33q30-38 46.5-85t16.5-98q0-51-16.5-97T767-781q-12-15-12.5-33t12.5-32q13-14 31.5-13.5T829-845q42 51 66.5 113.5T920-600Zm-182 0q0 32-10 61.5T700-484q-11 15-29.5 15.5T638-482q-13-13-13.5-31.5T633-549q6-11 9.5-24t3.5-27q0-14-3.5-27t-9.5-25q-9-17-8.5-35t13.5-31q14-14 32.5-13.5T700-716q18 25 28 54.5t10 61.5ZM360-440q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM40-200v-32q0-33 17-62t47-44q51-26 115-44t141-18q77 0 141 18t115 44q30 15 47 44t17 62v32q0 33-23.5 56.5T600-120H120q-33 0-56.5-23.5T40-200Z',
TUNE_FILLED: 'M480-120q-17 0-28.5-11.5T440-160v-160q0-17 11.5-28.5T480-360q17 0 28.5 11.5T520-320v40h280q17 0 28.5 11.5T840-240q0 17-11.5 28.5T800-200H520v40q0 17-11.5 28.5T480-120Zm-320-80q-17 0-28.5-11.5T120-240q0-17 11.5-28.5T160-280h160q17 0 28.5 11.5T360-240q0 17-11.5 28.5T320-200H160Zm160-160q-17 0-28.5-11.5T280-400v-40H160q-17 0-28.5-11.5T120-480q0-17 11.5-28.5T160-520h120v-40q0-17 11.5-28.5T320-600q17 0 28.5 11.5T360-560v160q0 17-11.5 28.5T320-360Zm160-80q-17 0-28.5-11.5T440-480q0-17 11.5-28.5T480-520h320q17 0 28.5 11.5T840-480q0 17-11.5 28.5T800-440H480Zm160-160q-17 0-28.5-11.5T600-640v-160q0-17 11.5-28.5T640-840q17 0 28.5 11.5T680-800v40h120q17 0 28.5 11.5T840-720q0 17-11.5 28.5T800-680H680v40q0 17-11.5 28.5T640-600Zm-480-80q-17 0-28.5-11.5T120-720q0-17 11.5-28.5T160-760h320q17 0 28.5 11.5T520-720q0 17-11.5 28.5T480-680H160Z',
RECTANGLE_DEFAULT: 'M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm0-80h640v-480H160v480Zm0 0v-480 480Z'
}
// Utils
const MAIN_PROFILE_ID = 'allChannels'
@@ -229,6 +252,7 @@ export {
SyncEvents,
DefaultFolderKind,
KeyboardShortcuts,
PlayerIcons,
MAIN_PROFILE_ID,
MOBILE_WIDTH_THRESHOLD,
PLAYLIST_HEIGHT_FORCE_LIST_THRESHOLD,

View File

@@ -59,13 +59,18 @@ class Settings {
// Unique Electron main process handlers
static _findAppReadyRelatedSettings() {
return db.settings.findAsync({
$or: [
{ _id: 'disableSmoothScrolling' },
{ _id: 'useProxy' },
{ _id: 'proxyProtocol' },
{ _id: 'proxyHostname' },
{ _id: 'proxyPort' }
]
_id: {
$in: [
'disableSmoothScrolling',
'useProxy',
'proxyProtocol',
'proxyHostname',
'proxyPort',
'backendFallback',
'backendPreference',
'hideToTrayOnMinimize'
]
}
})
}
@@ -77,8 +82,6 @@ class Settings {
return {
hideTrendingVideos: db.settings.findOneAsync({ _id: 'hideTrendingVideos' }),
hidePopularVideos: db.settings.findOneAsync({ _id: 'hidePopularVideos' }),
backendFallback: db.settings.findOneAsync({ _id: 'backendFallback' }),
backendPreference: db.settings.findOneAsync({ _id: 'backendPreference' }),
hidePlaylists: db.settings.findOneAsync({ _id: 'hidePlaylists' }),
}
}
@@ -182,18 +185,24 @@ class Playlists {
return db.playlists.updateAsync({ _id: playlist._id }, { $set: playlist }, { upsert: true })
}
static upsertVideoByPlaylistId(_id, videoData) {
static upsertVideoByPlaylistId(_id, lastUpdatedAt, videoData) {
return db.playlists.updateAsync(
{ _id },
{ $push: { videos: videoData } },
{
$push: { videos: videoData },
$set: { lastUpdatedAt }
},
{ upsert: true }
)
}
static upsertVideosByPlaylistId(_id, videos) {
static upsertVideosByPlaylistId(_id, lastUpdatedAt, videos) {
return db.playlists.updateAsync(
{ _id },
{ $push: { videos: { $each: videos } } },
{
$push: { videos: { $each: videos } },
$set: { lastUpdatedAt }
},
{ upsert: true }
)
}
@@ -202,17 +211,23 @@ class Playlists {
return db.playlists.removeAsync({ _id, protected: { $ne: true } })
}
static deleteVideoIdByPlaylistId(_id, videoId, playlistItemId) {
static deleteVideoIdByPlaylistId(_id, lastUpdatedAt, videoId, playlistItemId) {
if (playlistItemId != null) {
return db.playlists.updateAsync(
{ _id },
{ $pull: { videos: { playlistItemId } } },
{
$pull: { videos: { playlistItemId } },
$set: { lastUpdatedAt }
},
{ upsert: true }
)
} else if (videoId != null) {
return db.playlists.updateAsync(
{ _id },
{ $pull: { videos: { videoId } } },
{
$pull: { videos: { videoId } },
$set: { lastUpdatedAt }
},
{ upsert: true }
)
} else {
@@ -220,10 +235,13 @@ class Playlists {
}
}
static deleteVideoIdsByPlaylistId(_id, playlistItemIds) {
static deleteVideoIdsByPlaylistId(_id, lastUpdatedAt, playlistItemIds) {
return db.playlists.updateAsync(
{ _id },
{ $pull: { videos: { playlistItemId: { $in: playlistItemIds } } } },
{
$pull: { videos: { playlistItemId: { $in: playlistItemIds } } },
$set: { lastUpdatedAt }
},
{ upsert: true }
)
}
@@ -254,6 +272,12 @@ class SearchHistory {
return db.searchHistory.updateAsync({ _id: searchHistoryEntry._id }, searchHistoryEntry, { upsert: true })
}
static async overwrite(records) {
await db.searchHistory.removeAsync({}, { multi: true })
await db.searchHistory.insertAsync(records)
}
static delete(_id) {
return db.searchHistory.removeAsync({ _id: _id })
}
@@ -292,37 +316,40 @@ class SubscriptionCache {
)
}
static updateShortsWithChannelPageShortsByChannelId(channelId, entries) {
return db.subscriptionCache.findOneAsync({ _id: channelId }, { shorts: 1 }).then((doc) => {
if (doc == null) { return }
static async updateShortsWithChannelPageShortsByChannelId(channelId, entries) {
const doc = await db.subscriptionCache.findOneAsync({ _id: channelId }, { shorts: 1 })
const shorts = doc.shorts
const cacheShorts = Array.isArray(shorts) ? shorts : []
if (!Array.isArray(doc?.shorts)) {
return
}
cacheShorts.forEach(cachedVideo => {
const channelVideo = entries.find(short => cachedVideo.videoId === short.videoId)
if (!channelVideo) { return }
let hasUpdates = false
// authorId probably never changes, so we don't need to update that
cachedVideo.title = channelVideo.title
cachedVideo.author = channelVideo.author
doc.shorts.forEach(cachedVideo => {
const channelVideo = entries.find(short => cachedVideo.videoId === short.videoId)
if (!channelVideo) { return }
// as the channel shorts page only has compact view counts for numbers above 1000 e.g. 12k
// and the RSS feeds include an exact value, we only want to overwrite it when the number is larger than the cached value
// 12345 vs 12000 => 12345
// 12345 vs 15000 => 15000
hasUpdates = true
if (channelVideo.viewCount > cachedVideo.viewCount) {
cachedVideo.viewCount = channelVideo.viewCount
}
})
// authorId probably never changes, so we don't need to update that
cachedVideo.title = channelVideo.title
cachedVideo.author = channelVideo.author
return db.subscriptionCache.updateAsync(
{ _id: channelId },
{ $set: { shorts: cacheShorts } },
{ upsert: true }
)
// as the channel shorts page only has compact view counts for numbers above 1000 e.g. 12k
// and the RSS feeds include an exact value, we only want to overwrite it when the number is larger than the cached value
// 12345 vs 12000 => 12345
// 12345 vs 15000 => 15000
if (channelVideo.viewCount > cachedVideo.viewCount) {
cachedVideo.viewCount = channelVideo.viewCount
}
})
if (hasUpdates) {
await db.subscriptionCache.updateAsync(
{ _id: channelId },
{ $set: { shorts: doc.shorts } }
)
}
}
static updateCommunityPostsByChannelId(channelId, entries, timestamp) {

View File

@@ -1,323 +1,203 @@
import { ipcRenderer } from 'electron'
import { IpcChannels, DBActions } from '../../constants'
import { DBActions } from '../../constants'
class Settings {
static find() {
return ipcRenderer.invoke(
IpcChannels.DB_SETTINGS,
{ action: DBActions.GENERAL.FIND }
)
return window.ftElectron.dbSettings(DBActions.GENERAL.FIND)
}
static upsert(_id, value) {
return ipcRenderer.invoke(
IpcChannels.DB_SETTINGS,
{ action: DBActions.GENERAL.UPSERT, data: { _id, value } }
)
return window.ftElectron.dbSettings(DBActions.GENERAL.UPSERT, { _id, value })
}
}
class History {
static find() {
return ipcRenderer.invoke(
IpcChannels.DB_HISTORY,
{ action: DBActions.GENERAL.FIND }
)
return window.ftElectron.dbHistory(DBActions.GENERAL.FIND)
}
static upsert(record) {
return ipcRenderer.invoke(
IpcChannels.DB_HISTORY,
{ action: DBActions.GENERAL.UPSERT, data: record }
)
return window.ftElectron.dbHistory(DBActions.GENERAL.UPSERT, record)
}
static overwrite(records) {
return ipcRenderer.invoke(
IpcChannels.DB_HISTORY,
{ action: DBActions.HISTORY.OVERWRITE, data: records }
)
return window.ftElectron.dbHistory(DBActions.GENERAL.OVERWRITE, records)
}
static updateWatchProgress(videoId, watchProgress) {
return ipcRenderer.invoke(
IpcChannels.DB_HISTORY,
{
action: DBActions.HISTORY.UPDATE_WATCH_PROGRESS,
data: { videoId, watchProgress }
}
return window.ftElectron.dbHistory(
DBActions.HISTORY.UPDATE_WATCH_PROGRESS,
{ videoId, watchProgress }
)
}
static updateLastViewedPlaylist(videoId, lastViewedPlaylistId, lastViewedPlaylistType, lastViewedPlaylistItemId) {
return ipcRenderer.invoke(
IpcChannels.DB_HISTORY,
{
action: DBActions.HISTORY.UPDATE_PLAYLIST,
data: { videoId, lastViewedPlaylistId, lastViewedPlaylistType, lastViewedPlaylistItemId }
}
return window.ftElectron.dbHistory(
DBActions.HISTORY.UPDATE_PLAYLIST,
{ videoId, lastViewedPlaylistId, lastViewedPlaylistType, lastViewedPlaylistItemId }
)
}
static delete(videoId) {
return ipcRenderer.invoke(
IpcChannels.DB_HISTORY,
{ action: DBActions.GENERAL.DELETE, data: videoId }
)
return window.ftElectron.dbHistory(DBActions.GENERAL.DELETE, videoId)
}
static deleteAll() {
return ipcRenderer.invoke(
IpcChannels.DB_HISTORY,
{ action: DBActions.GENERAL.DELETE_ALL }
)
return window.ftElectron.dbHistory(DBActions.GENERAL.DELETE_ALL)
}
}
class Profiles {
static create(profile) {
return ipcRenderer.invoke(
IpcChannels.DB_PROFILES,
{ action: DBActions.GENERAL.CREATE, data: profile }
)
return window.ftElectron.dbProfiles(DBActions.GENERAL.CREATE, profile)
}
static find() {
return ipcRenderer.invoke(
IpcChannels.DB_PROFILES,
{ action: DBActions.GENERAL.FIND }
)
return window.ftElectron.dbProfiles(DBActions.GENERAL.FIND)
}
static upsert(profile) {
return ipcRenderer.invoke(
IpcChannels.DB_PROFILES,
{ action: DBActions.GENERAL.UPSERT, data: profile }
)
return window.ftElectron.dbProfiles(DBActions.GENERAL.UPSERT, profile)
}
static addChannelToProfiles(channel, profileIds) {
return ipcRenderer.invoke(
IpcChannels.DB_PROFILES,
{
action: DBActions.PROFILES.ADD_CHANNEL,
data: { channel, profileIds }
}
)
return window.ftElectron.dbProfiles(DBActions.PROFILES.ADD_CHANNEL, { channel, profileIds })
}
static removeChannelFromProfiles(channelId, profileIds) {
return ipcRenderer.invoke(
IpcChannels.DB_PROFILES,
{
action: DBActions.PROFILES.REMOVE_CHANNEL,
data: { channelId, profileIds }
}
)
return window.ftElectron.dbProfiles(DBActions.PROFILES.REMOVE_CHANNEL, { channelId, profileIds })
}
static delete(id) {
return ipcRenderer.invoke(
IpcChannels.DB_PROFILES,
{ action: DBActions.GENERAL.DELETE, data: id }
)
return window.ftElectron.dbProfiles(DBActions.GENERAL.DELETE, id)
}
}
class Playlists {
static create(playlists) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{ action: DBActions.GENERAL.CREATE, data: playlists }
)
return window.ftElectron.dbPlaylists(DBActions.GENERAL.CREATE, playlists)
}
static find() {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{ action: DBActions.GENERAL.FIND }
)
return window.ftElectron.dbPlaylists(DBActions.GENERAL.FIND)
}
static upsert(playlist) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{ action: DBActions.GENERAL.UPSERT, data: playlist }
return window.ftElectron.dbPlaylists(DBActions.GENERAL.UPSERT, playlist)
}
static upsertVideoByPlaylistId(_id, lastUpdatedAt, videoData) {
return window.ftElectron.dbPlaylists(
DBActions.PLAYLISTS.UPSERT_VIDEO,
{ _id, lastUpdatedAt, videoData }
)
}
static upsertVideoByPlaylistId(_id, videoData) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{
action: DBActions.PLAYLISTS.UPSERT_VIDEO,
data: { _id, videoData }
}
)
}
static upsertVideosByPlaylistId(_id, videos) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{
action: DBActions.PLAYLISTS.UPSERT_VIDEOS,
data: { _id, videos }
}
static upsertVideosByPlaylistId(_id, lastUpdatedAt, videos) {
return window.ftElectron.dbPlaylists(
DBActions.PLAYLISTS.UPSERT_VIDEOS,
{ _id, lastUpdatedAt, videos }
)
}
static delete(_id) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{ action: DBActions.GENERAL.DELETE, data: _id }
return window.ftElectron.dbPlaylists(DBActions.GENERAL.DELETE, _id)
}
static deleteVideoIdByPlaylistId(_id, lastUpdatedAt, videoId, playlistItemId) {
return window.ftElectron.dbPlaylists(
DBActions.PLAYLISTS.DELETE_VIDEO_ID,
{ _id, lastUpdatedAt, videoId, playlistItemId }
)
}
static deleteVideoIdByPlaylistId(_id, videoId, playlistItemId) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{
action: DBActions.PLAYLISTS.DELETE_VIDEO_ID,
data: { _id, videoId, playlistItemId }
}
)
}
static deleteVideoIdsByPlaylistId(_id, playlistItemIds) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{
action: DBActions.PLAYLISTS.DELETE_VIDEO_IDS,
data: { _id, playlistItemIds }
}
static deleteVideoIdsByPlaylistId(_id, lastUpdatedAt, playlistItemIds) {
return window.ftElectron.dbPlaylists(
DBActions.PLAYLISTS.DELETE_VIDEO_IDS,
{ _id, lastUpdatedAt, playlistItemIds }
)
}
static deleteAllVideosByPlaylistId(_id) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{
action: DBActions.PLAYLISTS.DELETE_ALL_VIDEOS,
data: _id
}
)
return window.ftElectron.dbPlaylists(DBActions.PLAYLISTS.DELETE_ALL_VIDEOS, _id)
}
static deleteMultiple(ids) {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{ action: DBActions.GENERAL.DELETE_MULTIPLE, data: ids }
)
return window.ftElectron.dbPlaylists(DBActions.GENERAL.DELETE_MULTIPLE, ids)
}
static deleteAll() {
return ipcRenderer.invoke(
IpcChannels.DB_PLAYLISTS,
{ action: DBActions.GENERAL.DELETE_ALL }
)
return window.ftElectron.dbPlaylists(DBActions.GENERAL.DELETE_ALL)
}
}
class SearchHistory {
static find() {
return ipcRenderer.invoke(
IpcChannels.DB_SEARCH_HISTORY,
{ action: DBActions.GENERAL.FIND }
)
return window.ftElectron.dbSearchHistory(DBActions.GENERAL.FIND)
}
static upsert(searchHistoryEntry) {
return ipcRenderer.invoke(
IpcChannels.DB_SEARCH_HISTORY,
{ action: DBActions.GENERAL.UPSERT, data: searchHistoryEntry }
)
return window.ftElectron.dbSearchHistory(DBActions.GENERAL.UPSERT, searchHistoryEntry)
}
static overwrite(records) {
return window.ftElectron.dbSearchHistory(DBActions.GENERAL.OVERWRITE, records)
}
static delete(_id) {
return ipcRenderer.invoke(
IpcChannels.DB_SEARCH_HISTORY,
{ action: DBActions.GENERAL.DELETE, data: _id }
)
return window.ftElectron.dbSearchHistory(DBActions.GENERAL.DELETE, _id)
}
static deleteAll() {
return ipcRenderer.invoke(
IpcChannels.DB_SEARCH_HISTORY,
{ action: DBActions.GENERAL.DELETE_ALL }
)
return window.ftElectron.dbSearchHistory(DBActions.GENERAL.DELETE_ALL)
}
}
class SubscriptionCache {
static find() {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{ action: DBActions.GENERAL.FIND }
)
return window.ftElectron.dbSubscriptionCache(DBActions.GENERAL.FIND)
}
static updateVideosByChannelId(channelId, entries, timestamp) {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{
action: DBActions.SUBSCRIPTION_CACHE.UPDATE_VIDEOS_BY_CHANNEL,
data: { channelId, entries, timestamp },
}
return window.ftElectron.dbSubscriptionCache(
DBActions.SUBSCRIPTION_CACHE.UPDATE_VIDEOS_BY_CHANNEL,
{ channelId, entries, timestamp }
)
}
static updateLiveStreamsByChannelId(channelId, entries, timestamp) {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{
action: DBActions.SUBSCRIPTION_CACHE.UPDATE_LIVE_STREAMS_BY_CHANNEL,
data: { channelId, entries, timestamp },
}
return window.ftElectron.dbSubscriptionCache(
DBActions.SUBSCRIPTION_CACHE.UPDATE_LIVE_STREAMS_BY_CHANNEL,
{ channelId, entries, timestamp }
)
}
static updateShortsByChannelId(channelId, entries, timestamp) {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{
action: DBActions.SUBSCRIPTION_CACHE.UPDATE_SHORTS_BY_CHANNEL,
data: { channelId, entries, timestamp },
}
return window.ftElectron.dbSubscriptionCache(
DBActions.SUBSCRIPTION_CACHE.UPDATE_SHORTS_BY_CHANNEL,
{ channelId, entries, timestamp }
)
}
static updateShortsWithChannelPageShortsByChannelId(channelId, entries) {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{
action: DBActions.SUBSCRIPTION_CACHE.UPDATE_SHORTS_WITH_CHANNEL_PAGE_SHORTS_BY_CHANNEL,
data: { channelId, entries },
}
return window.ftElectron.dbSubscriptionCache(
DBActions.SUBSCRIPTION_CACHE.UPDATE_SHORTS_WITH_CHANNEL_PAGE_SHORTS_BY_CHANNEL,
{ channelId, entries }
)
}
static updateCommunityPostsByChannelId(channelId, entries, timestamp) {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{
action: DBActions.SUBSCRIPTION_CACHE.UPDATE_COMMUNITY_POSTS_BY_CHANNEL,
data: { channelId, entries, timestamp },
}
return window.ftElectron.dbSubscriptionCache(
DBActions.SUBSCRIPTION_CACHE.UPDATE_COMMUNITY_POSTS_BY_CHANNEL,
{ channelId, entries, timestamp }
)
}
static deleteMultipleChannels(channelIds) {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{ action: DBActions.GENERAL.DELETE_MULTIPLE, data: channelIds }
)
return window.ftElectron.dbSubscriptionCache(DBActions.GENERAL.DELETE_MULTIPLE, channelIds)
}
static deleteAll() {
return ipcRenderer.invoke(
IpcChannels.DB_SUBSCRIPTION_CACHE,
{ action: DBActions.GENERAL.DELETE_ALL }
)
return window.ftElectron.dbSubscriptionCache(DBActions.GENERAL.DELETE_ALL)
}
}

View File

@@ -22,9 +22,21 @@ if (process.env.IS_ELECTRON_MAIN) {
dbPath = (dbName) => `${dbName}.db`
}
export const settings = new Datastore({ filename: dbPath('settings'), autoload: !process.env.IS_ELECTRON_MAIN })
export const profiles = new Datastore({ filename: dbPath('profiles'), autoload: !process.env.IS_ELECTRON_MAIN })
export const playlists = new Datastore({ filename: dbPath('playlists'), autoload: !process.env.IS_ELECTRON_MAIN })
export const history = new Datastore({ filename: dbPath('history'), autoload: !process.env.IS_ELECTRON_MAIN })
export const searchHistory = new Datastore({ filename: dbPath('search-history'), autoload: !process.env.IS_ELECTRON_MAIN })
export const subscriptionCache = new Datastore({ filename: dbPath('subscription-cache'), autoload: !process.env.IS_ELECTRON_MAIN })
/**
* @param {string} name
*/
function createDatastore(name) {
return new Datastore({
filename: dbPath(name),
autoload: !process.env.IS_ELECTRON_MAIN,
// Automatically clean up corrupted data, instead of crashing
corruptAlertThreshold: 1
})
}
export const settings = createDatastore('settings')
export const profiles = createDatastore('profiles')
export const playlists = createDatastore('playlists')
export const history = createDatastore('history')
export const searchHistory = createDatastore('search-history')
export const subscriptionCache = createDatastore('subscription-cache')

View File

@@ -13,7 +13,18 @@
<body>
<div id="app"></div>
<% if (!process.env.IS_ELECTRON) { %>
<% if (process.env.IS_ELECTRON) { %>
<iframe
id="sigFrame"
src="<%= sigFrameSrc %>"
csp="default-src 'none'; script-src '<%= sigFrameCspHash %>' 'unsafe-eval'"
sandbox="allow-scripts"
height="1"
width="1"
style="display: none; pointer-events: none"
tabindex="-1"
></iframe>
<% } else { %>
<script>
// This is the service worker with the Advanced caching

File diff suppressed because it is too large Load Diff

View File

@@ -3,19 +3,18 @@ import { readFile } from 'fs/promises'
import { join } from 'path'
/**
* Generates a poToken (proof of origin token) using `bgutils-js`.
* Generates a content-bound poToken (proof of origin token) using `bgutils-js`.
* The script to generate it is `src/botGuardScript.js`
*
* This is intentionally split out into it's own thing, with it's own temporary in-memory session,
* as the BotGuard stuff accesses the global `document` and `window` objects and also requires making some requests.
* So we definitely don't want it running in the same places as the rest of the FreeTube code with the user data.
* @param {string} videoId
* @param {string} visitorData
* @param {string} context
* @param {string|undefined} proxyUrl
* @returns {Promise<{ contentPoToken: string, sessionPoToken: string }>}
* @returns {Promise<string>}
*/
export async function generatePoToken(videoId, visitorData, context, proxyUrl) {
export async function generatePoToken(videoId, context, proxyUrl) {
const sessionUuid = crypto.randomUUID()
const theSession = session.fromPartition(`potoken-${sessionUuid}`, { cache: false })
@@ -53,15 +52,32 @@ export async function generatePoToken(videoId, visitorData, context, proxyUrl) {
callback({ requestHeaders })
})
theSession.webRequest.onHeadersReceived({ urls: ['https://*/*'] }, ({ responseHeaders }, callback) => {
if (responseHeaders) {
callback({
responseHeaders: {
...responseHeaders,
'Access-Control-Allow-Origin': ['*'],
'Access-Control-Allow-Methods': ['GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH']
}
})
}
})
theSession.webRequest.onBeforeRequest({ urls: ['<all_urls>'], types: ['cspReport', 'ping'] }, (details, callback) => {
callback({ cancel: true })
})
const webContentsView = new WebContentsView({
webPreferences: {
backgroundThrottling: false,
safeDialogs: true,
sandbox: true,
contextIsolation: true,
v8CacheOptions: 'none',
session: theSession,
offscreen: true,
webSecurity: false
disableBlinkFeatures: 'ElectronCSSCornerSmoothing'
}
})
@@ -96,7 +112,7 @@ export async function generatePoToken(videoId, visitorData, context, proxyUrl) {
}
})
const script = await getScript(videoId, visitorData, context)
const script = await getScript(videoId, context)
const response = await webContentsView.webContents.executeJavaScript(script)
@@ -110,15 +126,13 @@ let cachedScript
/**
* @param {string} videoId
* @param {string} visitorData
* @param {string} context
*/
async function getScript(videoId, visitorData, context) {
async function getScript(videoId, context) {
if (!cachedScript) {
const pathToScript = process.env.NODE_ENV === 'development'
? join(__dirname, '../../dist/botGuardScript.js')
/* eslint-disable-next-line n/no-path-concat */
: `${__dirname}/botGuardScript.js`
: join(__dirname, 'botGuardScript.js')
const content = await readFile(pathToScript, 'utf-8')
@@ -129,5 +143,5 @@ async function getScript(videoId, visitorData, context) {
cachedScript = content.replace(match[0], `;${functionName}(FT_PARAMS)`)
}
return cachedScript.replace('FT_PARAMS', `"${videoId}","${visitorData}",${context}`)
return cachedScript.replace('FT_PARAMS', `"${videoId}",${context}`)
}

301
src/preload/interface.js Normal file
View File

@@ -0,0 +1,301 @@
import { ipcRenderer, webFrame } from 'electron/renderer'
import { IpcChannels } from '../constants.js'
/**
* Linux fix for dynamically updating theme preference, this works on
* all systems running the electron app.
*/
ipcRenderer.on(IpcChannels.NATIVE_THEME_UPDATE, (_, shouldUseDarkColors) => {
document.body.dataset.systemTheme = shouldUseDarkColors ? 'dark' : 'light'
})
let currentUpdateSearchInputTextListener
export default {
/**
* @returns {Promise<string>}
*/
getSystemLocale: () => {
return ipcRenderer.invoke(IpcChannels.GET_SYSTEM_LOCALE)
},
/**
* @param {string} path
* @param {Record<string, string> | null | undefined} query
* @param {string | null | undefined} searchQueryText
*/
openInNewWindow: (path, query, searchQueryText) => {
ipcRenderer.send(IpcChannels.CREATE_NEW_WINDOW, path, query, searchQueryText)
},
/**
* @param {string} url
*/
enableProxy: (url) => {
ipcRenderer.send(IpcChannels.ENABLE_PROXY, url)
},
disableProxy: () => {
ipcRenderer.send(IpcChannels.DISABLE_PROXY)
},
/**
* @param {string} authorization
* @param {string} url
*/
setInvidiousAuthorization: (authorization, url) => {
ipcRenderer.send(IpcChannels.SET_INVIDIOUS_AUTHORIZATION, authorization, url)
},
clearInvidiousAuthorization: () => {
ipcRenderer.send(IpcChannels.SET_INVIDIOUS_AUTHORIZATION, null)
},
startPowerSaveBlocker: () => {
ipcRenderer.send(IpcChannels.START_POWER_SAVE_BLOCKER)
},
stopPowerSaveBlocker: () => {
ipcRenderer.send(IpcChannels.STOP_POWER_SAVE_BLOCKER)
},
/**
* @returns {Promise<boolean>}
*/
getReplaceHttpCache: () => {
return ipcRenderer.invoke(IpcChannels.GET_REPLACE_HTTP_CACHE)
},
toggleReplaceHttpCache: () => {
ipcRenderer.send(IpcChannels.TOGGLE_REPLACE_HTTP_CACHE)
},
// Allows programmatic toggling of picture-in-picture mode without accompanying user interaction.
// See: https://developer.mozilla.org/en-US/docs/Web/Security/User_activation#transient_activation
requestPiP: () => {
webFrame.executeJavaScript('document.querySelector("video.player")?.ui.getControls().togglePiP()', true).catch()
},
// Allows programmatic toggling of fullscreen without accompanying user interaction.
// See: https://developer.mozilla.org/en-US/docs/Web/Security/User_activation#transient_activation
requestFullscreen: () => {
webFrame.executeJavaScript('document.querySelector("video.player")?.ui.getControls().toggleFullScreen()', true).catch()
},
/**
* @param {string} key
* @returns {Promise<ArrayBuffer>}
*/
playerCacheGet: (key) => {
return ipcRenderer.invoke(IpcChannels.PLAYER_CACHE_GET, key)
},
/**
* @param {string} key
* @param {ArrayBuffer} value
*/
playerCacheSet: async (key, value) => {
await ipcRenderer.invoke(IpcChannels.PLAYER_CACHE_SET, key, value)
},
/**
* @param {string} videoId
* @param {string} context
* @returns {Promise<string>}
*/
generatePoToken: (videoId, context) => {
return ipcRenderer.invoke(IpcChannels.GENERATE_PO_TOKEN, videoId, context)
},
/**
* @param {0 | 1} kind
*/
chooseDefaultFolder: (kind) => {
ipcRenderer.send(IpcChannels.CHOOSE_DEFAULT_FOLDER, kind)
},
/**
* @param {0 | 1} kind
* @param {string} filename
* @param {ArrayBuffer} contents
*/
writeToDefaultFolder: async (kind, filename, contents) => {
await ipcRenderer.invoke(IpcChannels.WRITE_TO_DEFAULT_FOLDER, kind, filename, contents)
},
/**
* @returns {Promise<string>}
*/
getScreenshotFallbackFolder: () => {
return ipcRenderer.invoke(IpcChannels.GET_SCREENSHOT_FALLBACK_FOLDER)
},
relaunch: () => {
ipcRenderer.send(IpcChannels.RELAUNCH_REQUEST)
},
/**
* @param {string} executable
* @param {string} args
*/
openInExternalPlayer: (executable, args) => {
ipcRenderer.send(IpcChannels.OPEN_IN_EXTERNAL_PLAYER, executable, args)
},
/**
* @param {number} factor
*/
setZoomFactor: (factor) => {
if (typeof factor === 'number' && factor > 0) {
webFrame.setZoomFactor(factor)
}
},
/**
* @returns {Promise<{ label: string, value: number, active: boolean }[]>}
*/
getNavigationHistory: () => {
return ipcRenderer.invoke(IpcChannels.GET_NAVIGATION_HISTORY)
},
/**
* @param {number} action
* @param {any} [data]
*/
dbSettings: (action, data) => {
return ipcRenderer.invoke(IpcChannels.DB_SETTINGS, data ? { action, data } : { action })
},
/**
* @param {number} action
* @param {any} [data]
*/
dbHistory: (action, data) => {
return ipcRenderer.invoke(IpcChannels.DB_HISTORY, data ? { action, data } : { action })
},
/**
* @param {number} action
* @param {any} [data]
*/
dbProfiles: (action, data) => {
return ipcRenderer.invoke(IpcChannels.DB_PROFILES, data ? { action, data } : { action })
},
/**
* @param {number} action
* @param {any} [data]
*/
dbPlaylists: (action, data) => {
return ipcRenderer.invoke(IpcChannels.DB_PLAYLISTS, data ? { action, data } : { action })
},
/**
* @param {number} action
* @param {any} [data]
*/
dbSearchHistory: (action, data) => {
return ipcRenderer.invoke(IpcChannels.DB_SEARCH_HISTORY, data ? { action, data } : { action })
},
/**
* @param {number} action
* @param {any} [data]
*/
dbSubscriptionCache: (action, data) => {
return ipcRenderer.invoke(IpcChannels.DB_SUBSCRIPTION_CACHE, data ? { action, data } : { action })
},
/**
* @param {(route: string) => void} handler
*/
handleChangeView: (handler) => {
ipcRenderer.on(IpcChannels.CHANGE_VIEW, (_, route) => {
handler(route)
})
},
/**
* @param {(url: string) => void} handler
*/
handleOpenUrl: (handler) => {
ipcRenderer.on(IpcChannels.OPEN_URL, (_, url) => {
handler(url)
})
ipcRenderer.send(IpcChannels.APP_READY)
},
/**
* Pass `null` to clear the handler
* @param {(text: string) => void | null} handler
*/
handleUpdateSearchInputText: (handler) => {
if (currentUpdateSearchInputTextListener) {
ipcRenderer.off(IpcChannels.UPDATE_SEARCH_INPUT_TEXT, currentUpdateSearchInputTextListener)
currentUpdateSearchInputTextListener = undefined
}
if (handler) {
currentUpdateSearchInputTextListener = (_, text) => {
handler(text)
}
ipcRenderer.on(IpcChannels.UPDATE_SEARCH_INPUT_TEXT, currentUpdateSearchInputTextListener)
ipcRenderer.send(IpcChannels.SEARCH_INPUT_HANDLING_READY)
}
},
/**
* @param {(event: number, data: any) => void} handler
*/
handleSyncSettings: (handler) => {
ipcRenderer.on(IpcChannels.SYNC_SETTINGS, (_, { event, data }) => {
handler(event, data)
})
},
/**
* @param {(event: number, data: any) => void} handler
*/
handleSyncHistory: (handler) => {
ipcRenderer.on(IpcChannels.SYNC_HISTORY, (_, { event, data }) => {
handler(event, data)
})
},
/**
* @param {(event: number, data: any) => void} handler
*/
handleSyncSearchHistory: (handler) => {
ipcRenderer.on(IpcChannels.SYNC_SEARCH_HISTORY, (_, { event, data }) => {
handler(event, data)
})
},
/**
* @param {(event: number, data: any) => void} handler
*/
handleSyncProfiles: (handler) => {
ipcRenderer.on(IpcChannels.SYNC_PROFILES, (_, { event, data }) => {
handler(event, data)
})
},
/**
* @param {(event: number, data: any) => void} handler
*/
handleSyncPlaylists: (handler) => {
ipcRenderer.on(IpcChannels.SYNC_PLAYLISTS, (_, { event, data }) => {
handler(event, data)
})
},
/**
* @param {(event: number, data: any) => void} handler
*/
handleSyncSubscriptionCache: (handler) => {
ipcRenderer.on(IpcChannels.SYNC_SUBSCRIPTION_CACHE, (_, { event, data }) => {
handler(event, data)
})
}
}

4
src/preload/main.js Normal file
View File

@@ -0,0 +1,4 @@
import { contextBridge } from 'electron/renderer'
import api from './interface.js'
contextBridge.exposeInMainWorld('ftElectron', api)

7
src/preload/preload-interface.d.ts vendored Normal file
View File

@@ -0,0 +1,7 @@
import api from './interface.js'
declare global {
interface Window {
ftElectron: typeof api
}
}

View File

@@ -56,8 +56,8 @@
transition: opacity 0.15s;
}
.fade-enter,
.fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}

View File

@@ -1,25 +1,22 @@
import { defineComponent } from 'vue'
import { mapActions, mapMutations } from 'vuex'
import FtFlexBox from './components/ft-flex-box/ft-flex-box.vue'
import TopNav from './components/top-nav/top-nav.vue'
import TopNav from './components/TopNav/TopNav.vue'
import SideNav from './components/SideNav/SideNav.vue'
import FtNotificationBanner from './components/ft-notification-banner/ft-notification-banner.vue'
import FtNotificationBanner from './components/FtNotificationBanner/FtNotificationBanner.vue'
import FtPrompt from './components/FtPrompt/FtPrompt.vue'
import FtButton from './components/ft-button/ft-button.vue'
import FtToast from './components/ft-toast/ft-toast.vue'
import FtButton from './components/FtButton/FtButton.vue'
import FtToast from './components/FtToast/FtToast.vue'
import FtProgressBar from './components/FtProgressBar/FtProgressBar.vue'
import FtPlaylistAddVideoPrompt from './components/ft-playlist-add-video-prompt/ft-playlist-add-video-prompt.vue'
import FtCreatePlaylistPrompt from './components/ft-create-playlist-prompt/ft-create-playlist-prompt.vue'
import FtPlaylistAddVideoPrompt from './components/FtPlaylistAddVideoPrompt/FtPlaylistAddVideoPrompt.vue'
import FtCreatePlaylistPrompt from './components/FtCreatePlaylistPrompt/FtCreatePlaylistPrompt.vue'
import FtKeyboardShortcutPrompt from './components/FtKeyboardShortcutPrompt/FtKeyboardShortcutPrompt.vue'
import FtSearchFilters from './components/FtSearchFilters/FtSearchFilters.vue'
import { marked } from 'marked'
import { IpcChannels } from '../constants'
import packageDetails from '../../package.json'
import { openExternalLink, openInternalPath, showToast } from './helpers/utils'
import { translateWindowTitle } from './helpers/strings'
let ipcRenderer = null
export default defineComponent({
name: 'App',
components: {
@@ -47,7 +44,6 @@ export default defineComponent({
latestBlogUrl: '',
updateChangelog: '',
changeLogTitle: '',
isPromptOpen: false,
lastExternalLinkToBeOpened: '',
showExternalLinkOpeningPrompt: false,
externalLinkOpeningPromptValues: [
@@ -107,6 +103,10 @@ export default defineComponent({
return this.$store.getters.getDefaultInvidiousInstance
},
currentInvidiousInstanceUrl: function () {
return this.$store.getters.getCurrentInvidiousInstanceUrl
},
baseTheme: function () {
return this.$store.getters.getBaseTheme
},
@@ -154,8 +154,8 @@ export default defineComponent({
return this.$store.getters.getAppTitle
},
openDeepLinksInNewWindow: function () {
return this.$store.getters.getOpenDeepLinksInNewWindow
isAnyPromptOpen: function () {
return this.$store.getters.isAnyPromptOpen
}
},
watch: {
@@ -197,13 +197,10 @@ export default defineComponent({
this.grabSearchHistoryEntries()
if (process.env.IS_ELECTRON) {
ipcRenderer = require('electron').ipcRenderer
this.setupListenersToSyncWindows()
this.activateKeyboardShortcuts()
this.openAllLinksExternally()
this.enableSetSearchQueryText()
this.enableOpenUrl()
this.watchSystemTheme()
await this.checkExternalPlayer()
}
@@ -215,19 +212,21 @@ export default defineComponent({
}, 500)
})
this.$router.onReady(() => {
if (this.$router.currentRoute.path === '/') {
this.$router.replace({ path: this.landingPage })
}
if (this.$route.path === '/') {
this.$router.replace({ path: this.landingPage })
}
this.setWindowTitle()
})
this.setWindowTitle()
})
document.addEventListener('dragstart', this.handleDragStart)
},
beforeUnmount: function () {
document.removeEventListener('dragstart', this.handleDragStart)
},
methods: {
setDocumentTitle: function(value) {
document.title = value
this.$nextTick(() => this.$refs.topNav?.setActiveNavigationHistoryEntryTitle(value))
},
checkThemeSettings: function () {
const theme = {
@@ -334,10 +333,6 @@ export default defineComponent({
this.showBlogBanner = false
},
handlePromptPortalUpdate: function(newVal) {
this.isPromptOpen = newVal
},
openDownloadsPage: function () {
const url = 'https://freetubeapp.io#download'
openExternalLink(url)
@@ -358,25 +353,8 @@ export default defineComponent({
this.$store.commit('setIsKeyboardShortcutPromptShown', !this.isKeyboardShortcutPromptShown)
}
if (event.altKey) {
switch (event.key) {
case 'D':
case 'd':
this.$refs.topNav.focusSearch()
break
}
}
switch (event.key) {
case 'Tab':
this.showOutlines()
break
case 'L':
case 'l':
if ((process.platform !== 'darwin' && event.ctrlKey) ||
(process.platform === 'darwin' && event.metaKey)) {
this.$refs.topNav.focusSearch()
}
break
if (event.key === 'Tab') {
this.showOutlines()
}
},
@@ -505,6 +483,16 @@ export default defineComponent({
break
}
case 'trending':
case 'subscriptions':
case 'history':
case 'userplaylists':
openInternalPath({
path: `/${result.urlType}`,
doCreateNewWindow
})
break
case 'invalid_url': {
// Do nothing
break
@@ -518,34 +506,12 @@ export default defineComponent({
})
},
/**
* Linux fix for dynamically updating theme preference, this works on
* all systems running the electron app.
*/
watchSystemTheme: function () {
ipcRenderer.on(IpcChannels.NATIVE_THEME_UPDATE, (event, shouldUseDarkColors) => {
document.body.dataset.systemTheme = shouldUseDarkColors ? 'dark' : 'light'
})
},
enableSetSearchQueryText: function () {
ipcRenderer.on(IpcChannels.UPDATE_SEARCH_INPUT_TEXT, (event, searchQueryText) => {
if (searchQueryText) {
this.$refs.topNav.updateSearchInputText(searchQueryText)
}
})
ipcRenderer.send(IpcChannels.SEARCH_INPUT_HANDLING_READY)
},
enableOpenUrl: function () {
ipcRenderer.on(IpcChannels.OPEN_URL, (event, url, { isLaunchLink = false } = { }) => {
window.ftElectron.handleOpenUrl((url) => {
if (url) {
this.handleYoutubeLink(url, { doCreateNewWindow: this.openDeepLinksInNewWindow && !isLaunchLink })
this.handleYoutubeLink(url)
}
})
ipcRenderer.send(IpcChannels.APP_READY)
},
handleExternalLinkOpeningPromptAnswer: function (option) {
@@ -567,7 +533,7 @@ export default defineComponent({
},
setLocale: function() {
document.documentElement.setAttribute('lang', this.locale)
document.documentElement.lang = this.locale
if (this.isLocaleRightToLeft) {
document.body.dir = 'rtl'
} else {
@@ -575,6 +541,139 @@ export default defineComponent({
}
},
/**
* Transforms dragged in-app URLs into YouTube ones, so they they can be dragged into other applications.
* Cancels the drag operation if the URL is FreeTube specific and cannot be transformed e.g. user playlist URLs
* @param {DragEvent} event
*/
handleDragStart: function (event) {
if (!event.dataTransfer.types.includes('text/uri-list')) {
return
}
const originalUrlString = event.dataTransfer.getData('text/uri-list')
const originalUrl = new URL(originalUrlString)
// Check if this is an in-app URL
if (originalUrl.origin !== window.location.origin || originalUrl.pathname !== window.location.pathname) {
return
}
const [path, query] = originalUrl.hash.slice(2).split('?')
const pathParts = path.split('/')
const params = new URLSearchParams(query)
let transformed = false
let transformedURL = new URL('https://www.youtube.com')
switch (pathParts[0]) {
case 'watch':
transformedURL.pathname = '/watch'
transformedURL.searchParams.set('v', pathParts[1])
if (params.has('timestamp')) {
transformedURL.searchParams.set('t', params.get('timestamp') + 's')
}
if (params.has('playlistId') && params.get('playlistType') !== 'user') {
transformedURL.searchParams.set('list', params.get('playlistId'))
}
transformed = true
break
case 'playlist':
if (params.get('playlistType') !== 'user') {
transformedURL.pathname = '/playlist'
transformedURL.searchParams.set('list', pathParts[1])
transformed = true
}
break
case 'channel':
transformedURL.pathname = `/channel/${pathParts[1]}`
if (pathParts[2]) {
switch (pathParts[2]) {
case 'community':
transformedURL.pathname += '/posts'
break
case 'search':
transformedURL.pathname += '/search'
if (params.has('searchQueryText')) {
transformedURL.searchParams.set('query', params.get('searchQueryText'))
}
break
case 'videos':
case 'shorts':
case 'releases':
case 'podcasts':
case 'courses':
case 'playlists':
case 'about':
transformedURL.pathname += `/${pathParts[2]}`
break
}
}
transformed = true
break
case 'search':
transformedURL.pathname = '/results'
transformedURL.searchParams.set('search_query', decodeURIComponent(pathParts[1]))
transformed = true
break
case 'hashtag':
case 'post':
transformedURL.pathname = `/${pathParts[0]}/${pathParts[1]}`
transformed = true
break
case 'subscriptions':
case 'history':
transformedURL.pathname = `/feed/${pathParts[1]}`
transformed = true
break
case 'userplaylists':
transformedURL.pathname = '/feed/playlists'
transformed = true
break
case 'settings':
transformedURL.pathname = '/account'
transformed = true
break
case 'about':
transformedURL.pathname = '/about'
transformed = true
break
case 'popular':
transformedURL = new URL(`${this.currentInvidiousInstanceUrl}/feed/popular`)
transformed = true
break
}
if (transformed) {
const transformedURLString = transformedURL.toString()
event.dataTransfer.setData('text/uri-list', transformedURLString)
const plainText = event.dataTransfer.getData('text/plain')
if (plainText.length > 0) {
event.dataTransfer.setData('text/plain', plainText.replaceAll(originalUrlString, transformedURLString))
}
const html = event.dataTransfer.getData('text/html')
if (html.length > 0) {
const originalUrlStringEncoded = originalUrlString.replaceAll('&', '&amp;')
const transformedURLStringEncoded = transformedURLString.replaceAll('&', '&amp;')
event.dataTransfer.setData('text/html', html.replaceAll(originalUrlStringEncoded, transformedURLStringEncoded))
}
} else {
// Cancel the drag operation for FreeTube specific URLs that cannot be transformed such as user playlist URLs
event.preventDefault()
event.stopPropagation()
}
},
...mapActions([
'grabUserSettings',
'grabAllProfiles',

View File

@@ -1,7 +1,6 @@
<template>
<div
v-if="dataReady"
id="app"
class="app"
:class="{
hideOutlines: outlinesHidden,
@@ -10,11 +9,6 @@
hideLabelsSideBar: hideLabelsSideBar && !isSideNavOpen
}"
>
<portal-target
name="promptPortal"
multiple
@change="handlePromptPortalUpdate"
/>
<ft-prompt
v-if="showReleaseNotes"
theme="readable-width"
@@ -71,17 +65,16 @@
v-if="showProgressBar"
/>
<top-nav
ref="topNav"
:inert="isPromptOpen"
:inert="isAnyPromptOpen"
/>
<side-nav
ref="sideNav"
:inert="isPromptOpen"
:inert="isAnyPromptOpen"
/>
<ft-flex-box
class="flexBox routerView"
role="main"
:inert="isPromptOpen"
:inert="isAnyPromptOpen"
>
<div
v-if="showUpdatesBanner || showBlogBanner"
@@ -102,17 +95,18 @@
@click="handleNewBlogBannerClick"
/>
</div>
<transition
<RouterView
v-if="dataReady"
mode="out-in"
name="fade"
v-slot="{ Component }"
class="routerView"
>
<!-- <keep-alive> -->
<RouterView
class="routerView"
/>
<!-- </keep-alive> -->
</transition>
<Transition
mode="out-in"
name="fade"
>
<component :is="Component" />
</Transition>
</RouterView>
</ft-flex-box>
</div>
</template>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -113,7 +113,7 @@
import { computed } from 'vue'
import { useI18n } from '../../composables/use-i18n-polyfill'
import FtChannelBubble from '../../components/ft-channel-bubble/ft-channel-bubble.vue'
import FtChannelBubble from '../../components/FtChannelBubble/FtChannelBubble.vue'
import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue'
import store from '../../store/index'
@@ -128,7 +128,7 @@ const props = defineProps({
default: ''
},
joined: {
type: [Date, Number],
type: Number,
default: 0
},
views: {

View File

@@ -42,7 +42,7 @@
v-if="subCount !== null && !hideChannelSubscriptions"
class="subCount"
>
{{ $tc('Global.Counts.Subscriber Count', subCount, { count: formattedSubCount }) }}
{{ $t('Global.Counts.Subscriber Count', { count: formattedSubCount }, subCount) }}
</p>
</div>
</div>
@@ -81,14 +81,14 @@
class="tab"
:class="{ selectedTab: currentTab === 'home' }"
role="tab"
:aria-selected="String(currentTab === 'home')"
:aria-selected="currentTab === 'home'"
aria-controls="homePanel"
:tabindex="(currentTab === 'home' || currentTab === 'search') ? 0 : -1"
@click="changeTab('home')"
@keydown.left.right="focusTab('home', $event)"
@keydown.enter.space.prevent="changeTab('home')"
>
{{ $t("Channel.Home.Home").toUpperCase() }}
{{ $t("Channel.Home.Home") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -97,14 +97,14 @@
class="tab"
:class="{ selectedTab: currentTab === 'videos' }"
role="tab"
:aria-selected="String(currentTab === 'videos')"
:aria-selected="currentTab === 'videos'"
aria-controls="videoPanel"
:tabindex="(currentTab === 'videos' || currentTab === 'search') ? 0 : -1"
@click="changeTab('videos')"
@keydown.left.right="focusTab('videos', $event)"
@keydown.enter.space.prevent="changeTab('videos')"
>
{{ $t("Channel.Videos.Videos").toUpperCase() }}
{{ $t("Channel.Videos.Videos") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -113,14 +113,14 @@
class="tab"
:class="{ selectedTab: currentTab === 'shorts' }"
role="tab"
:aria-selected="String(currentTab === 'shorts')"
:aria-selected="currentTab === 'shorts'"
aria-controls="shortPanel"
:tabindex="currentTab === 'shorts' ? 0 : -1"
@click="changeTab('shorts')"
@keydown.left.right="focusTab('shorts', $event)"
@keydown.enter.space.prevent="changeTab('shorts')"
>
{{ $t("Global.Shorts").toUpperCase() }}
{{ $t("Global.Shorts") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -129,14 +129,14 @@
class="tab"
:class="{ selectedTab: currentTab === 'live' }"
role="tab"
:aria-selected="String(currentTab === 'live')"
:aria-selected="currentTab === 'live'"
aria-controls="livePanel"
:tabindex="currentTab === 'live' ? 0 : -1"
@click="changeTab('live')"
@keydown.left.right="focusTab('live', $event)"
@keydown.enter.space.prevent="changeTab('live')"
>
{{ $t("Channel.Live.Live").toUpperCase() }}
{{ $t("Channel.Live.Live") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -144,7 +144,7 @@
id="releasesTab"
class="tab"
role="tab"
:aria-selected="String(currentTab === 'releases')"
:aria-selected="currentTab === 'releases'"
aria-controls="releasePanel"
:tabindex="currentTab === 'releases' ? 0 : -1"
:class="{ selectedTab: currentTab === 'releases' }"
@@ -152,7 +152,7 @@
@keydown.left.right="focusTab('releases', $event)"
@keydown.enter.space.prevent="changeTab('releases')"
>
{{ $t("Channel.Releases.Releases").toUpperCase() }}
{{ $t("Channel.Releases.Releases") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -160,7 +160,7 @@
id="podcastsTab"
class="tab"
role="tab"
:aria-selected="String(currentTab === 'podcasts')"
:aria-selected="currentTab === 'podcasts'"
aria-controls="podcastPanel"
:tabindex="currentTab === 'podcasts' ? 0 : -1"
:class="{ selectedTab: currentTab === 'podcasts' }"
@@ -168,7 +168,7 @@
@keydown.left.right="focusTab('podcasts', $event)"
@keydown.enter.space.prevent="changeTab('podcasts')"
>
{{ $t("Channel.Podcasts.Podcasts").toUpperCase() }}
{{ $t("Channel.Podcasts.Podcasts") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -176,7 +176,7 @@
id="coursesTab"
class="tab"
role="tab"
:aria-selected="String(currentTab === 'courses')"
:aria-selected="currentTab === 'courses'"
aria-controls="coursesPanel"
:tabindex="currentTab === 'courses' ? 0 : -1"
:class="{ selectedTab: currentTab === 'courses' }"
@@ -184,7 +184,7 @@
@keydown.left.right="focusTab('courses', $event)"
@keydown.enter.space.prevent="changeTab('courses')"
>
{{ $t("Channel.Courses.Courses").toUpperCase() }}
{{ $t("Channel.Courses.Courses") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -192,7 +192,7 @@
id="playlistsTab"
class="tab"
role="tab"
:aria-selected="String(currentTab === 'playlists')"
:aria-selected="currentTab === 'playlists'"
aria-controls="playlistPanel"
:tabindex="currentTab === 'playlists' ? 0 : -1"
:class="{ selectedTab: currentTab === 'playlists' }"
@@ -200,7 +200,7 @@
@keydown.left.right="focusTab('playlists', $event)"
@keydown.enter.space.prevent="changeTab('playlists')"
>
{{ $t("Channel.Playlists.Playlists").toUpperCase() }}
{{ $t("Channel.Playlists.Playlists") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
@@ -208,7 +208,7 @@
id="communityTab"
class="tab"
role="tab"
:aria-selected="String(currentTab === 'community')"
:aria-selected="currentTab === 'community'"
aria-controls="communityPanel"
:tabindex="currentTab === 'community' ? 0 : -1"
:class="{ selectedTab: currentTab === 'community' }"
@@ -216,14 +216,14 @@
@keydown.left.right="focusTab('community', $event)"
@keydown.enter.space.prevent="changeTab('community')"
>
{{ $t("Global.Community").toUpperCase() }}
{{ $t("Global.Posts") }}
</div>
<!-- eslint-disable-next-line vuejs-accessibility/interactive-supports-focus -->
<div
id="aboutTab"
class="tab"
role="tab"
:aria-selected="String(currentTab === 'about')"
:aria-selected="currentTab === 'about'"
aria-controls="aboutPanel"
:tabindex="currentTab === 'about' ? 0 : -1"
:class="{ selectedTab: currentTab === 'about' }"
@@ -231,7 +231,7 @@
@keydown.left.right="focusTab('about', $event)"
@keydown.enter.space.prevent="changeTab('about')"
>
{{ $t("Channel.About.About").toUpperCase() }}
{{ $t("Channel.About.About") }}
</div>
</div>
@@ -251,14 +251,14 @@
</template>
<script setup>
import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
import { computed, onBeforeUnmount, onMounted, useTemplateRef } from 'vue'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import FtCard from '../ft-card/ft-card.vue'
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
import FtShareButton from '../FtShareButton/FtShareButton.vue'
import FtSubscribeButton from '../FtSubscribeButton/FtSubscribeButton.vue'
import FtInput from '../ft-input/ft-input.vue'
import FtInput from '../FtInput/FtInput.vue'
import store from '../../store/index'
@@ -381,7 +381,7 @@ function search(query) {
emit('search', query)
}
const searchBar = ref(null)
const searchBar = useTemplateRef('searchBar')
/**
* @param {KeyboardEvent} event

View File

@@ -1,6 +1,14 @@
.shelfContainer {
max-inline-size: 85vw;
}
.shelfTitle {
font-size: 24px;
cursor: pointer;
/* Prevents overflow for long values */
max-inline-size: 100%;
overflow-wrap: anywhere;
}
.shelfTitle::marker {
@@ -32,4 +40,8 @@
.shelfSubtitle {
font-style: italic;
color: var(--tertiary-text-color);
/* Prevents overflow for long values */
max-inline-size: 100%;
overflow-wrap: anywhere;
}

View File

@@ -3,6 +3,7 @@
<div
v-for="(shelf, index) in filteredShelves"
:key="index"
class="shelfContainer"
>
<details
open
@@ -47,7 +48,7 @@
</template>
<script setup>
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { computed } from 'vue'
import FtElementList from '../FtElementList/FtElementList.vue'
import store from '../../store/index'

View File

@@ -65,7 +65,6 @@
block-size: 60px;
font-size: 20px;
line-height: 1em;
text-transform: capitalize;
color: rgb(0 0 0);
background-color: rgb(235 160 172);
border-radius: 50%;
@@ -76,7 +75,7 @@
font-size: 14px;
margin-inline-start: 68px;
margin-block-start: 0;
word-wrap: break-word;
overflow-wrap: break-word;
}
.commentOwner {
@@ -96,7 +95,7 @@
font-size: 14px;
margin-block-start: -10px;
margin-inline-start: 70px;
word-wrap: break-word;
overflow-wrap: break-word;
}
.commentPinned {

View File

@@ -160,13 +160,9 @@
@keydown.space.prevent="toggleCommentReplies(index)"
@keydown.enter.prevent="toggleCommentReplies(index)"
>
<span v-if="!comment.showReplies">{{ $t("Comments.View") }}</span>
<span v-else>{{ $t("Comments.Hide") }}</span>
{{ comment.numReplies }}
<span v-if="comment.numReplies === 1">{{ $t("Comments.Reply").toLowerCase() }}</span>
<span v-else>{{ $t("Comments.Replies").toLowerCase() }}</span>
<span v-if="comment.hasOwnerReplied && !comment.showReplies"> {{ $t("Comments.From {channelName}", { channelName }) }}</span>
<span v-if="comment.numReplies > 1 && comment.hasOwnerReplied && !comment.showReplies"> {{ $t("Comments.And others") }}</span>
<span>
{{ toggleCommentRepliesLinkText(comment) }}
</span>
</span>
</p>
<div
@@ -239,12 +235,32 @@
/>
{{ reply.likes }}
</template>
<span
v-if="reply.isHearted"
class="commentHeartBadge"
>
<img
:src="channelThumbnail"
:title="$t('Comments.Hearted')"
:aria-label="$t('Comments.Hearted')"
class="commentHeartBadgeImg"
alt=""
>
<FontAwesomeIcon
:icon="['fas', 'heart']"
class="commentHeartBadgeWhite"
/>
<FontAwesomeIcon
:icon="['fas', 'heart']"
class="commentHeartBadgeRed"
/>
</span>
</p>
<p
v-if="reply.numReplies > 0"
class="commentMoreReplies"
>
{{ $t('Comments.View {replyCount} replies', { replyCount: reply.numReplies }) }}
{{ $t('Comments.View {replyCount} replies', { replyCount: reply.numReplies }, reply.numReplies) }}
</p>
</div>
<div
@@ -307,14 +323,14 @@ import { computed, ref, shallowRef } from 'vue'
import { useI18n } from '../../composables/use-i18n-polyfill'
import FtCard from '../ft-card/ft-card.vue'
import FtLoader from '../ft-loader/ft-loader.vue'
import FtSelect from '../ft-select/ft-select.vue'
import FtLoader from '../FtLoader/FtLoader.vue'
import FtSelect from '../FtSelect/FtSelect.vue'
import FtTimestampCatcher from '../FtTimestampCatcher.vue'
import store from '../../store/index'
import { copyToClipboard, showToast } from '../../helpers/utils'
import { getLocalComments, parseLocalComment } from '../../helpers/api/local'
import { getLocalCommunityPostComments, getLocalComments, parseLocalComment } from '../../helpers/api/local'
import {
getInvidiousCommunityPostCommentReplies,
getInvidiousCommunityPostComments,
@@ -476,7 +492,7 @@ function isSubscribedToChannel(channelId) {
function getCommentData() {
isLoading.value = true
if (!process.env.SUPPORTS_LOCAL_API || backendPreference.value === 'invidious' || props.isPostComments) {
if (!process.env.SUPPORTS_LOCAL_API || backendPreference.value === 'invidious') {
if (!props.isPostComments) {
getCommentDataInvidious()
} else {
@@ -491,7 +507,7 @@ function getMoreComments() {
if (commentData.value.length === 0 || nextPageToken.value == null) {
showToast(t('Comments.There are no more comments for this video'))
} else {
if (!process.env.SUPPORTS_LOCAL_API || backendPreference.value === 'invidious' || props.isPostComments) {
if (!process.env.SUPPORTS_LOCAL_API || backendPreference.value === 'invidious') {
if (!props.isPostComments) {
getCommentDataInvidious()
} else {
@@ -503,6 +519,26 @@ function getMoreComments() {
}
}
/** @typedef {import('../../helpers/api/local').LocalComment | import('../../helpers/api/invidious').InvidiousComment} Comment */
/**
* @param {Comment} comment
*/
function toggleCommentRepliesLinkText(comment) {
if (comment.showReplies) {
return t('Comments.Hide {replyCount} replies', { replyCount: comment.numReplies }, comment.numReplies)
}
if (comment.hasOwnerReplied) {
if (comment.numReplies > 1) {
return t('Comments.View {replyCount} replies from {channelName} and others', { replyCount: comment.numReplies, channelName: props.channelName })
}
return t('Comments.View 1 reply from {channelName}', { channelName: props.channelName })
}
return t('Comments.View {replyCount} replies', { replyCount: comment.numReplies }, comment.numReplies)
}
/**
* @param {number} index
*/
@@ -518,7 +554,7 @@ function toggleCommentReplies(index) {
* @param {number} index
*/
function getCommentReplies(index) {
if (!process.env.SUPPORTS_LOCAL_API || commentData.value[index].dataType === 'invidious' || props.isPostComments) {
if (!process.env.SUPPORTS_LOCAL_API || commentData.value[index].dataType === 'invidious') {
if (!props.isPostComments) {
getCommentRepliesInvidious(index)
} else {
@@ -545,9 +581,15 @@ async function getCommentDataLocal(more = false) {
comments = await localCommentsInstance.applySort(sortNewest.value ? 'NEWEST_FIRST' : 'TOP_COMMENTS')
localCommentsInstance = comments
} else {
comments = await getLocalComments(props.id)
sortNewest.value = comments.header?.sort_menu?.sub_menu_items?.[1].selected ?? false
localCommentsInstance = comments
if (props.isPostComments) {
comments = await getLocalCommunityPostComments(props.id, props.postAuthorId)
sortNewest.value = comments.header?.sort_menu?.sub_menu_items?.[1].selected ?? false
localCommentsInstance = comments
} else {
comments = await getLocalComments(props.id)
sortNewest.value = comments.header?.sort_menu?.sub_menu_items?.[1].selected ?? false
localCommentsInstance = comments
}
}
const parsedComments = comments.contents
@@ -596,7 +638,11 @@ async function getCommentDataLocal(more = false) {
if (backendFallback.value && backendPreference.value === 'local') {
localCommentsInstance = undefined
showToast(t('Falling back to Invidious API'))
getCommentDataInvidious()
if (props.isPostComments) {
getPostCommentsInvidious()
} else {
getCommentDataInvidious()
}
} else {
isLoading.value = false
}
@@ -763,7 +809,13 @@ function getPostCommentsInvidious() {
showToast(`${errorMessage}: ${err}`, 10000, () => {
copyToClipboard(err)
})
isLoading.value = false
if (process.env.SUPPORTS_LOCAL_API && backendFallback.value && backendPreference.value === 'invidious') {
showToast(t('Falling back to Local API'))
getCommentDataLocal()
} else {
isLoading.value = false
}
})
}

View File

@@ -0,0 +1,3 @@
.box {
justify-content: center;
}

View File

@@ -5,7 +5,7 @@
<h4 class="groupTitle">
{{ $t('Subscriptions.Subscriptions') }}
</h4>
<FtFlexBox class="dataSettingsBox">
<FtFlexBox class="box">
<FtButton
:label="$t('Settings.Data Settings.Import Subscriptions')"
@click="importSubscriptions"
@@ -29,37 +29,40 @@
<h4 class="groupTitle">
{{ $t('History.History') }}
</h4>
<FtFlexBox class="dataSettingsBox">
<FtFlexBox class="box">
<FtButton
:label="$t('Settings.Data Settings.Import History')"
@click="importHistory"
@click="importWatchHistory"
/>
<FtButton
:label="$t('Settings.Data Settings.Export History')"
@click="exportHistory"
@click="showExportWatchHistoryPrompt = true"
/>
</FtFlexBox>
<h4 class="groupTitle">
{{ $t('Playlists') }}
</h4>
<FtFlexBox class="dataSettingsBox">
<FtFlexBox class="box">
<FtButton
:label="$t('Settings.Data Settings.Import Playlists')"
@click="importPlaylists"
/>
<FtButton
:label="$t('Settings.Data Settings.Export Playlists')"
@click="exportPlaylistsForOlderVersionsSometimes"
@click="exportPlaylists"
/>
</FtFlexBox>
<FtFlexBox>
<FtToggleSwitch
:label="$t('Settings.Data Settings.Export Playlists For Older FreeTube Versions.Label')"
:compact="true"
:default-value="shouldExportPlaylistForOlderVersions"
:tooltip="$t('Settings.Data Settings.Export Playlists For Older FreeTube Versions.Tooltip')"
:tooltip-allow-newlines="true"
@change="shouldExportPlaylistForOlderVersions = !shouldExportPlaylistForOlderVersions"
<h4 class="groupTitle">
{{ t('Settings.Data Settings.Search history') }}
</h4>
<FtFlexBox class="box">
<FtButton
:label="t('Settings.Data Settings.Import search history')"
@click="importSearchHistory"
/>
<FtButton
:label="t('Settings.Data Settings.Export search history')"
@click="showExportSearchHistoryPrompt = true"
/>
</FtFlexBox>
<FtPrompt
@@ -69,24 +72,37 @@
:option-values="SUBSCRIPTIONS_PROMPT_VALUES"
@click="exportSubscriptions"
/>
<FtPrompt
v-if="showExportWatchHistoryPrompt"
:label="t('Settings.Data Settings.Select Export Type')"
:option-names="exportWatchSearchHistoryPromptNames"
:option-values="WATCH_SEARCH_HISTORY_PROMPT_VALUES"
@click="exportWatchHistory"
/>
<FtPrompt
v-if="showExportSearchHistoryPrompt"
:label="t('Settings.Data Settings.Select Export Type')"
:option-names="exportWatchSearchHistoryPromptNames"
:option-values="WATCH_SEARCH_HISTORY_PROMPT_VALUES"
@click="exportSearchHistory"
/>
</FtSettingsSection>
</template>
<script setup>
import { computed, ref } from 'vue'
import { useI18n } from '../composables/use-i18n-polyfill'
import { useRouter } from 'vue-router/composables'
import { useI18n } from '../../composables/use-i18n-polyfill'
import { useRouter } from 'vue-router'
import FtButton from './ft-button/ft-button.vue'
import FtFlexBox from './ft-flex-box/ft-flex-box.vue'
import FtPrompt from './FtPrompt/FtPrompt.vue'
import FtSettingsSection from './FtSettingsSection/FtSettingsSection.vue'
import FtToggleSwitch from './ft-toggle-switch/ft-toggle-switch.vue'
import FtButton from '../FtButton/FtButton.vue'
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
import FtPrompt from '../FtPrompt/FtPrompt.vue'
import FtSettingsSection from '../FtSettingsSection/FtSettingsSection.vue'
import store from '../store/index'
import store from '../../store/index'
import { MAIN_PROFILE_ID } from '../../constants'
import { calculateColorLuminance, getRandomColor } from '../helpers/colors'
import { MAIN_PROFILE_ID } from '../../../constants'
import { calculateColorLuminance, getRandomColor } from '../../helpers/colors'
import {
deepCopy,
escapeHTML,
@@ -94,7 +110,8 @@ import {
readFileWithPicker,
showToast,
writeFileWithPicker,
} from '../helpers/utils'
} from '../../helpers/utils'
import { processToBeAddedPlaylistVideo } from '../../helpers/playlists'
const IMPORT_DIRECTORY_ID = 'data-settings-import'
const START_IN_DIRECTORY = 'downloads'
@@ -404,8 +421,6 @@ function importYouTubeSubscriptions(textDecode) {
const subscriptions = []
let count = 0
showToast(t('Settings.Data Settings.This might take a while, please wait'))
store.commit('setShowProgressBar', true)
store.commit('setProgressBarPercentage', 0)
@@ -742,7 +757,18 @@ async function exportNewPipeSubscriptions() {
// #endregion subscriptions export
// #region history
const WATCH_SEARCH_HISTORY_PROMPT_VALUES = [
'freetube',
'youtube'
]
const exportWatchSearchHistoryPromptNames = computed(() => [
`${t('Settings.Data Settings.Export FreeTube')} (.db)`,
`${t('Settings.Data Settings.Export YouTube')} (.json)`,
t('Close')
])
// #region watch history
const historyCacheById = computed(() => {
return store.getters.getHistoryCacheById
@@ -752,7 +778,7 @@ const historyCacheSorted = computed(() => {
return store.getters.getHistoryCacheSorted
})
async function importHistory() {
async function importWatchHistory() {
let response
try {
response = await readFileWithPicker(
@@ -777,16 +803,16 @@ async function importHistory() {
const { filename, content } = response
if (filename.endsWith('.db')) {
importFreeTubeHistory(content.split('\n'))
importFreeTubeWatchHistory(content.split('\n'))
} else if (filename.endsWith('.json')) {
importYouTubeHistory(JSON.parse(content))
importYouTubeWatchHistory(JSON.parse(content))
}
}
/**
* @param {string[]} textDecode
*/
async function importFreeTubeHistory(textDecode) {
async function importFreeTubeWatchHistory(textDecode) {
textDecode.pop()
const requiredKeys = [
@@ -816,7 +842,8 @@ async function importFreeTubeHistory(textDecode) {
'paid',
]
const historyItems = new Map(Object.entries(historyCacheById.value))
// deep copy so we don't get errors from Electron when we try to pass reactive objects through the IPC channels
const historyItems = new Map(deepCopy(Object.entries(historyCacheById.value)))
textDecode.forEach((history) => {
const historyData = JSON.parse(history)
@@ -853,7 +880,7 @@ async function importFreeTubeHistory(textDecode) {
/**
* @param {any[]} historyData
*/
async function importYouTubeHistory(historyData) {
async function importYouTubeWatchHistory(historyData) {
const filterPredicate = item =>
item.products.includes('YouTube') &&
item.titleUrl != null && // removed video doesnt contain url...
@@ -901,7 +928,8 @@ async function importYouTubeHistory(historyData) {
'activityControls',
].concat(Object.keys(keyMapping))
const historyItems = new Map(Object.entries(historyCacheById.value))
// deep copy so we don't get errors from Electron when we try to pass reactive objects through the IPC channels
const historyItems = new Map(deepCopy(Object.entries(historyCacheById.value)))
filteredHistoryData.forEach(element => {
const historyObject = {}
@@ -940,12 +968,30 @@ async function importYouTubeHistory(historyData) {
showToast(t('Settings.Data Settings.All watched history has been successfully imported'))
}
async function exportHistory() {
const showExportWatchHistoryPrompt = ref(false)
/**
* @param {'freetube' | 'youtube' | null} option
*/
async function exportWatchHistory(option) {
showExportWatchHistoryPrompt.value = false
switch (option) {
case 'freetube':
exportFreeTubeWatchHistory()
break
case 'youtube':
exportYouTubeWatchHistory()
break
}
}
async function exportFreeTubeWatchHistory() {
const historyDb = historyCacheSorted.value.map((historyEntry) => {
return JSON.stringify(historyEntry)
}).join('\n') + '\n'
const dateStr = getTodayDateStrLocalTimezone()
const exportFileName = 'freetube-history-' + dateStr + '.db'
const exportFileName = 'freetube-watch-history-' + dateStr + '.db'
await promptAndWriteToFile(
exportFileName,
@@ -957,14 +1003,45 @@ async function exportHistory() {
)
}
// #endregion history
async function exportYouTubeWatchHistory() {
const historyData = historyCacheSorted.value.map((entry) => {
return {
header: 'YouTube',
title: `Watched ${entry.title}`,
titleUrl: `https://www.youtube.com/watch?v=${entry.videoId}`,
subtitles: [{
name: entry.author,
url: `https://www.youtube.com/channel/${entry.authorId}`
}],
time: new Date(entry.timeWatched).toISOString(),
products: [
'YouTube'
],
activityControls: [
'YouTube watch history'
]
}
})
const dateStr = getTodayDateStrLocalTimezone()
const exportFileName = 'youtube-watch-history-' + dateStr + '.json'
await promptAndWriteToFile(
exportFileName,
JSON.stringify(historyData),
t('Settings.Data Settings.History File'),
'application/json',
'.json',
t('Settings.Data Settings.All watched history has been successfully exported')
)
}
// #endregion watch history
// #region playlists
const allPlaylists = computed(() => store.getters.getAllPlaylists)
const shouldExportPlaylistForOlderVersions = ref(false)
async function importPlaylists() {
let response
try {
@@ -1032,18 +1109,24 @@ async function importPlaylists() {
'videoCount',
]
const knownKeys = [...requiredKeys, ...optionalKeys, ...ignoredKeys]
const requiredVideoKeys = [
'videoId',
'title',
'author',
'authorId',
'lengthSeconds',
'timeAdded',
// These two properties will be missing for shorts added to a playlist from anywhere but the watch page
// 'author',
// 'authorId',
// `playlistItemId` should be optional for backward compatibility
// 'playlistItemId',
]
const newPlaylists = []
playlists.forEach((playlistData) => {
// We would technically already be done by the time the data is parsed,
// however we want to limit the possibility of malicious data being sent
@@ -1051,9 +1134,10 @@ async function importPlaylists() {
const playlistObject = {}
const videoIdToBeAddedSet = new Set()
let countRequiredKeysPresent = 0
Object.keys(playlistData).forEach((key) => {
if ([requiredKeys, optionalKeys, ignoredKeys].every((ks) => !ks.includes(key))) {
if (!knownKeys.includes(key)) {
const message = `${t('Settings.Data Settings.Unknown data key')}: ${key}`
showToast(message)
} else if (key === 'videos') {
@@ -1068,17 +1152,22 @@ async function importPlaylists() {
}
})
playlistObject[key] = videoArray
playlistObject.videos = videoArray
if (requiredKeys.includes(key)) {
countRequiredKeysPresent++
}
} else if (!ignoredKeys.includes(key)) {
// Do nothing for keys to be ignored
playlistObject[key] = playlistData[key]
if (requiredKeys.includes(key)) {
countRequiredKeysPresent++
}
}
})
const playlistObjectKeys = Object.keys(playlistObject)
const playlistObjectHasAllRequiredKeys = requiredKeys.every((k) => playlistObjectKeys.includes(k))
if (!playlistObjectHasAllRequiredKeys) {
if (countRequiredKeysPresent !== requiredKeys.length) {
const message = t('Settings.Data Settings.Playlist insufficient data', { playlist: playlistData.playlistName })
showToast(message)
return
@@ -1093,34 +1182,49 @@ async function importPlaylists() {
})
if (existingPlaylist === undefined) {
store.dispatch('addPlaylist', playlistObject)
newPlaylists.push(playlistObject)
return
}
const duplicateVideoPresentInToBeAdded = playlistObject.videos.length > videoIdToBeAddedSet.size
const existingVideoIdSet = existingPlaylist.videos.reduce((video) => videoIdToBeAddedSet.add(video.videoId), new Set())
const duplicateVideoPresentInExistingPlaylist = existingPlaylist.videos.length > existingVideoIdSet.size
const shouldAddDuplicateVideos = duplicateVideoPresentInToBeAdded || duplicateVideoPresentInExistingPlaylist
/** @type {Set<string> | undefined} */
let existingVideoIdSet
let shouldAddDuplicateVideos = playlistObject.videos.length > videoIdToBeAddedSet.size
if (!shouldAddDuplicateVideos) {
existingVideoIdSet = existingPlaylist.videos.reduce((set, video) => set.add(video.videoId), new Set())
shouldAddDuplicateVideos = existingPlaylist.videos.length > existingVideoIdSet.size
}
const playlistVideos = [...existingPlaylist.videos]
playlistObject.videos.forEach((video) => {
let videoExists = false
if (shouldAddDuplicateVideos) {
if (video.playlistItemId != null) {
// Find by `playlistItemId` if present
videoExists = existingPlaylist.videos.some((x) => {
videoExists = playlistVideos.some((x) => {
// Allow duplicate (by videoId) videos to be added
return x.videoId === video.videoId && x.playlistItemId === video.playlistItemId
})
} else {
// Older playlist exports have no `playlistItemId` but have `timeAdded`
// Which might be duplicate for copied playlists with duplicate `videoId`
videoExists = existingPlaylist.videos.some((x) => {
videoExists = playlistVideos.some((x) => {
// Allow duplicate (by videoId) videos to be added
return x.videoId === video.videoId && x.timeAdded === video.timeAdded
})
}
} else if (existingVideoIdSet !== undefined) {
// Disallow duplicate (by videoId) videos to be added
if (existingVideoIdSet.has(video.videoId)) {
videoExists = true
} else {
existingVideoIdSet.add(video.videoId)
}
} else {
videoExists = existingPlaylist.videos.some((x) => {
videoExists = playlistVideos.some((x) => {
// Disallow duplicate (by videoId) videos to be added
return x.videoId === video.videoId
})
@@ -1128,12 +1232,8 @@ async function importPlaylists() {
if (!videoExists) {
// Keep original `timeAdded` value
const payload = {
_id: existingPlaylist._id,
videoData: video,
}
store.dispatch('addVideo', payload)
processToBeAddedPlaylistVideo(video)
playlistVideos.push(video)
}
})
// Update playlist's `lastUpdatedAt` & other attributes
@@ -1142,9 +1242,14 @@ async function importPlaylists() {
// Only these attributes would be updated (besides videos)
playlistName: playlistObject.playlistName,
description: playlistObject.description,
videos: playlistVideos
})
})
if (newPlaylists.length > 0) {
store.dispatch('addPlaylists', newPlaylists)
}
showToast(t('Settings.Data Settings.All playlists has been successfully imported'))
}
@@ -1166,51 +1271,193 @@ async function exportPlaylists() {
)
}
function exportPlaylistsForOlderVersionsSometimes() {
if (shouldExportPlaylistForOlderVersions.value) {
exportPlaylistsForOlderVersions()
} else {
exportPlaylists()
// #endregion playlists
// #region search history
/** @type {import('vue').ComputedRef<{ _id: string, lastUpdatedAt: number }[]>} */
const searchHistoryEntries = computed(() => {
return store.getters.getSearchHistoryEntries
})
async function importSearchHistory() {
let response
try {
response = await readFileWithPicker(
t('Settings.Data Settings.Search history file'),
{
'application/x-freetube-db': '.db',
'application/json': '.json'
},
IMPORT_DIRECTORY_ID,
START_IN_DIRECTORY
)
} catch (err) {
const message = t('Settings.Data Settings.Unable to read file')
showToast(`${message}: ${err}`)
return
}
if (response === null) {
return
}
const { filename, content } = response
if (filename.endsWith('.db')) {
importFreeTubeSearchHistory(content.split('\n'))
} else if (filename.endsWith('.json')) {
importYouTubeSearchHistory(JSON.parse(content))
}
}
async function exportPlaylistsForOlderVersions() {
const dateStr = getTodayDateStrLocalTimezone()
const exportFileName = 'freetube-playlists-as-single-favorites-playlist-' + dateStr + '.db'
/**
* @param {string[]} textDecode
*/
async function importFreeTubeSearchHistory(textDecode) {
textDecode.pop()
const favoritesPlaylistData = {
playlistName: 'Favorites',
protected: true,
videos: [],
// deep copy so we don't get errors from Electron when we try to pass reactive objects through the IPC channels
const historyItems = new Map(deepCopy(searchHistoryEntries.value).map(entry => [entry._id, entry]))
textDecode.forEach((rawEntry) => {
const entry = JSON.parse(rawEntry)
if (typeof entry._id !== 'string' || typeof entry.lastUpdatedAt !== 'number') {
showToast(t('Settings.Data Settings.History object has insufficient data, skipping item'))
console.error('Missing keys:', entry)
} else {
const existingEntry = historyItems.get(entry._id)
if (existingEntry == null || entry.lastUpdatedAt > existingEntry.lastUpdatedAt) {
let newEntry
if (Object.keys(entry) === 2) {
newEntry = entry
} else {
newEntry = { _id: entry._id, lastUpdatedAt: entry.lastUpdatedAt }
}
historyItems.set(entry._id, newEntry)
}
}
})
const newSearchHistoryEntries = Array.from(historyItems.values())
await store.dispatch('overwriteSearchHistory', newSearchHistoryEntries)
showToast(t('Settings.Data Settings.All search history has been successfully imported'))
}
/**
* @param {any[]} historyData
*/
async function importYouTubeSearchHistory(historyData) {
// deep copy so we don't get errors from Electron when we try to pass reactive objects through the IPC channels
const historyItems = new Map(deepCopy(searchHistoryEntries.value).map(entry => [entry._id, entry]))
for (const entry of historyData) {
if (
entry.products?.includes('YouTube') &&
entry.titleUrl?.includes('youtube.com/results?search_query') &&
entry.details == null // dont import ads
) {
try {
const url = new URL(entry.titleUrl)
const query = url.searchParams.get('search_query')
const lastUpdatedAt = Date.parse(entry.time)
if (!query || typeof query !== 'string' || query.length === 0 || isNaN(lastUpdatedAt)) {
showToast(t('Settings.Data Settings.History object has insufficient data, skipping item'))
console.error('Missing keys:', entry)
} else {
const existingEntry = historyItems.get(query)
if (existingEntry == null || lastUpdatedAt > existingEntry.lastUpdatedAt) {
historyItems.set(query, { _id: query, lastUpdatedAt })
}
}
} catch (error) {
console.error(error)
showToast(t('Settings.Data Settings.History object has insufficient data, skipping item'))
}
}
}
allPlaylists.value.forEach((playlist) => {
playlist.videos.forEach((video) => {
const videoAlreadyAdded = favoritesPlaylistData.videos.some((v) => {
return v.videoId === video.videoId
})
if (videoAlreadyAdded) { return }
const newSearchHistoryEntries = Array.from(historyItems.values())
favoritesPlaylistData.videos.push(
Object.assign({
// The "required" keys during import (but actually unused) in older versions
isLive: false,
paid: false,
published: '',
}, video)
)
})
})
await store.dispatch('overwriteSearchHistory', newSearchHistoryEntries)
showToast(t('Settings.Data Settings.All search history has been successfully imported'))
}
const showExportSearchHistoryPrompt = ref(false)
/**
* @param {'freetube' | 'youtube' | null} option
*/
async function exportSearchHistory(option) {
showExportSearchHistoryPrompt.value = false
switch (option) {
case 'freetube':
exportFreeTubeSearchHistory()
break
case 'youtube':
exportYouTubeSearchHistory()
break
}
}
async function exportFreeTubeSearchHistory() {
const historyDb = searchHistoryEntries.value.map((entry) => {
return JSON.stringify(entry)
}).join('\n') + '\n'
const dateStr = getTodayDateStrLocalTimezone()
const exportFileName = 'freetube-search-history-' + dateStr + '.db'
await promptAndWriteToFile(
exportFileName,
JSON.stringify([favoritesPlaylistData]),
t('Settings.Data Settings.Playlist File'),
historyDb,
t('Settings.Data Settings.Search history file'),
'application/x-freetube-db',
'.db',
t('Settings.Data Settings.All playlists has been successfully exported')
t('Settings.Data Settings.All search history has been successfully exported')
)
}
// #endregion playlists
async function exportYouTubeSearchHistory() {
const historyData = searchHistoryEntries.value.map((entry) => {
return {
header: 'YouTube',
title: `Searched for ${entry._id}`,
titleUrl: `https://www.youtube.com/results?search_query=${encodeURIComponent(entry._id)}`,
time: new Date(entry.lastUpdatedAt).toISOString(),
products: [
'YouTube'
],
activityControls: [
'YouTube search history'
]
}
})
const dateStr = getTodayDateStrLocalTimezone()
const exportFileName = 'youtube-search-history-' + dateStr + '.json'
await promptAndWriteToFile(
exportFileName,
JSON.stringify(historyData),
t('Settings.Data Settings.Search history file'),
'application/json',
'.json',
t('Settings.Data Settings.All search history has been successfully exported')
)
}
// #endregion search history
</script>
<style scoped src="./DataSettings.css" />

View File

@@ -3,3 +3,7 @@
display: none;
}
}
.containingTextFlexBox {
margin-block-end: 2em;
}

View File

@@ -0,0 +1,737 @@
<template>
<FtSettingsSection
:title="t('Settings.Distraction Free Settings.Distraction Free Settings')"
>
<h4
class="groupTitle"
>
{{ t('Settings.Distraction Free Settings.Sections.General') }}
</h4>
<div class="switchColumnGrid">
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Video Views')"
:compact="true"
:default-value="hideVideoViews"
@change="updateHideVideoViews"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Subscribers')"
:compact="true"
:default-value="hideChannelSubscriptions"
@change="updateHideChannelSubscriptions"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Sharing Actions')"
:compact="true"
:default-value="hideSharingActions"
@change="updateHideSharingActions"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Videos on Watch')"
:default-value="hideWatchedSubs"
:compact="true"
:tooltip="t('Tooltips.Distraction Free Settings.Hide Videos on Watch')"
@change="updateHideWatchedSubs"
/>
</div>
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Live Streams')"
:compact="true"
:default-value="hideLiveStreams"
@change="updateHideLiveStreams"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Upcoming Premieres')"
:compact="true"
:default-value="hideUpcomingPremieres"
@change="updateHideUpcomingPremieres"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Display Titles Without Excessive Capitalisation')"
:compact="true"
:default-value="showDistractionFreeTitles"
@change="updateShowDistractionFreeTitles"
/>
</div>
</div>
<br class="hide-on-mobile">
<FtFlexBox>
<FtInputTags
:disabled="channelHiderDisabled"
:disabled-msg="t('Settings.Distraction Free Settings.Hide Channels Disabled Message')"
:label="t('Settings.Distraction Free Settings.Hide Channels')"
:tag-name-placeholder="t('Settings.Distraction Free Settings.Hide Channels Placeholder')"
:tag-list="channelsHidden"
:tooltip="t('Tooltips.Distraction Free Settings.Hide Channels')"
:validate-tag-name="checkYoutubeChannelId"
:find-tag-info="findChannelTagInfoWrapper"
:are-channel-tags="true"
:show-tags="showAddedChannelsHidden"
@invalid-name="handleInvalidChannel"
@error-find-tag-info="handleChannelAPIError"
@change="handleChannelsHidden"
@already-exists="handleChannelsExists"
@toggle-show-tags="handleAddedChannelsHidden"
/>
</FtFlexBox>
<FtFlexBox class="containingTextFlexBox">
<FtInputTags
:label="t('Settings.Distraction Free Settings.Hide Videos, Playlists and Channels Containing Text')"
:tag-name-placeholder="t('Settings.Distraction Free Settings.Hide Videos, Playlists and Channels Containing Text Placeholder')"
:show-tags="showAddedForbiddenTitles"
:tag-list="forbiddenTitles"
:min-input-length="1"
:tooltip="t('Tooltips.Distraction Free Settings.Hide Videos, Playlists and Channels Containing Text')"
@change="handleForbiddenTitles"
@toggle-show-tags="handleAddedForbiddenTitles"
/>
</FtFlexBox>
<h4
class="groupTitle"
>
{{ t('Settings.Distraction Free Settings.Sections.Side Bar') }}
</h4>
<div class="switchColumnGrid">
<div class="switchColumn">
<FtToggleSwitch
v-if="SUPPORTS_LOCAL_API"
:label="t('Settings.Distraction Free Settings.Hide Trending Videos')"
:compact="true"
:disabled="disableHideTrendingVideos"
:default-value="hideTrendingVideos"
@change="updateHideTrendingVideos"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Popular Videos')"
:compact="true"
:disabled="disableHidePopularVideos"
:default-value="disableHidePopularVideos || hidePopularVideos"
@change="updateHidePopularVideos"
/>
</div>
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Playlists')"
:compact="true"
:default-value="hidePlaylists"
@change="updateHidePlaylists"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Active Subscriptions')"
:compact="true"
:default-value="hideActiveSubscriptions"
@change="updateHideActiveSubscriptions"
/>
</div>
</div>
<h4
class="groupTitle"
>
{{ t('Settings.Distraction Free Settings.Sections.Subscriptions Page') }}
</h4>
<div class="switchColumnGrid">
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Subscriptions Videos')"
:compact="true"
:default-value="hideSubscriptionsVideos"
@change="updateHideSubscriptionsVideos"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Subscriptions Shorts')"
:compact="true"
:default-value="hideSubscriptionsShorts"
@change="updateHideSubscriptionsShorts"
/>
</div>
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Subscriptions Live')"
:compact="true"
:disabled="hideLiveStreams"
:default-value="hideLiveStreams || hideSubscriptionsLive"
:tooltip="hideLiveStreams ? hideSubscriptionsLiveTooltip : ''"
v-on="!hideLiveStreams ? { change: updateHideSubscriptionsLive } : {}"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Subscriptions Posts')"
:compact="true"
:default-value="hideSubscriptionsCommunity"
@change="updateHideSubscriptionsCommunity"
/>
</div>
</div>
<h4
class="groupTitle"
>
{{ t('Settings.Distraction Free Settings.Sections.Channel Page') }}
</h4>
<div class="switchColumnGrid">
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Home')"
:compact="true"
:default-value="hideChannelHome"
@change="updateHideChannelHome"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Shorts')"
:compact="true"
:default-value="hideChannelShorts"
@change="updateHideChannelShorts"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Playlists')"
:compact="true"
:default-value="hideChannelPlaylists"
@change="updateHideChannelPlaylists"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Podcasts')"
:compact="true"
:default-value="hideChannelPodcasts"
@change="updateHideChannelPodcasts"
/>
</div>
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Posts')"
:compact="true"
:default-value="hideChannelCommunity"
@change="updateHideChannelCommunity"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Featured Channels')"
:compact="true"
:default-value="hideFeaturedChannels"
@change="updateHideFeaturedChannels"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Releases')"
:compact="true"
:default-value="hideChannelReleases"
@change="updateHideChannelReleases"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Channel Courses')"
:compact="true"
:default-value="hideChannelCourses"
@change="updateHideChannelCourses"
/>
</div>
</div>
<h4
class="groupTitle"
>
{{ t('Settings.Distraction Free Settings.Sections.Watch Page') }}
</h4>
<div class="switchColumnGrid">
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Video Likes And Dislikes')"
:compact="true"
:default-value="hideVideoLikesAndDislikes"
@change="updateHideVideoLikesAndDislikes"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Chapters')"
:compact="true"
:default-value="hideChapters"
@change="updateHideChapters"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Video Description')"
:compact="true"
:default-value="hideVideoDescription"
@change="updateHideVideoDescription"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Comment Likes')"
:compact="true"
:default-value="hideCommentLikes"
@change="updateHideCommentLikes"
/>
</div>
<div class="switchColumn">
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Live Chat')"
:compact="true"
:default-value="hideLiveChat"
@change="updateHideLiveChat"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Recommended Videos')"
:compact="true"
:default-value="hideRecommendedVideos"
@change="handleHideRecommendedVideos"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Comments')"
:compact="true"
:default-value="hideComments"
@change="updateHideComments"
/>
<FtToggleSwitch
:label="t('Settings.Distraction Free Settings.Hide Profile Pictures in Comments')"
:compact="true"
:default-value="hideCommentPhotos"
@change="updateHideCommentPhotos"
/>
</div>
</div>
</FtSettingsSection>
</template>
<script setup>
import { computed, onMounted, ref } from 'vue'
import { useI18n } from '../../composables/use-i18n-polyfill'
import FtSettingsSection from '../FtSettingsSection/FtSettingsSection.vue'
import FtToggleSwitch from '../FtToggleSwitch/FtToggleSwitch.vue'
import FtInputTags from '../FtInputTags/FtInputTags.vue'
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
import store from '../../store/index'
import { showToast } from '../../helpers/utils'
import { checkYoutubeChannelId, findChannelTagInfo } from '../../helpers/channels'
const { t } = useI18n()
const SUPPORTS_LOCAL_API = process.env.SUPPORTS_LOCAL_API
const channelHiderDisabled = ref(false)
/** @type {import('vue').ComputedRef<'local' | 'invidious'>} */
const backendPreference = computed(() => store.getters.getBackendPreference)
/** @type {import('vue').ComputedRef<boolean>} */
const backendFallback = computed(() => store.getters.getBackendFallback)
const backendOptions = computed(() => ({
preference: backendPreference.value,
fallback: backendFallback.value
}))
/** @type {import('vue').ComputedRef<boolean>} */
const hideVideoViews = computed(() => store.getters.getHideVideoViews)
/**
* @param {boolean} value
*/
function updateHideVideoViews(value) {
store.dispatch('updateHideVideoViews', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideVideoLikesAndDislikes = computed(() => store.getters.getHideVideoLikesAndDislikes)
/**
* @param {boolean} value
*/
function updateHideVideoLikesAndDislikes(value) {
store.dispatch('updateHideVideoLikesAndDislikes', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelSubscriptions = computed(() => store.getters.getHideChannelSubscriptions)
/**
* @param {boolean} value
*/
function updateHideChannelSubscriptions(value) {
store.dispatch('updateHideChannelSubscriptions', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideCommentLikes = computed(() => store.getters.getHideCommentLikes)
/**
* @param {boolean} value
*/
function updateHideCommentLikes(value) {
store.dispatch('updateHideCommentLikes', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideRecommendedVideos = computed(() => store.getters.getHideRecommendedVideos)
/**
* @param {boolean} value
*/
function handleHideRecommendedVideos(value) {
if (value) {
store.dispatch('updatePlayNextVideo', false)
}
store.dispatch('updateHideRecommendedVideos', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideTrendingVideos = computed(() => store.getters.getHideTrendingVideos)
const disableHideTrendingVideos = computed(() => backendPreference.value !== 'local' && !backendFallback.value)
/**
* @param {boolean} value
*/
function updateHideTrendingVideos(value) {
store.dispatch('updateHideTrendingVideos', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hidePopularVideos = computed(() => store.getters.getHidePopularVideos)
const disableHidePopularVideos = computed(() => backendPreference.value !== 'invidious' && !backendFallback.value)
/**
* @param {boolean} value
*/
function updateHidePopularVideos(value) {
store.dispatch('updateHidePopularVideos', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hidePlaylists = computed(() => store.getters.getHidePlaylists)
/**
* @param {boolean} value
*/
function updateHidePlaylists(value) {
store.dispatch('updateHidePlaylists', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideLiveChat = computed(() => store.getters.getHideLiveChat)
/**
* @param {boolean} value
*/
function updateHideLiveChat(value) {
store.dispatch('updateHideLiveChat', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideActiveSubscriptions = computed(() => store.getters.getHideActiveSubscriptions)
/**
* @param {boolean} value
*/
function updateHideActiveSubscriptions(value) {
store.dispatch('updateHideActiveSubscriptions', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideVideoDescription = computed(() => store.getters.getHideVideoDescription)
/**
* @param {boolean} value
*/
function updateHideVideoDescription(value) {
store.dispatch('updateHideVideoDescription', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideComments = computed(() => store.getters.getHideComments)
/**
* @param {boolean} value
*/
function updateHideComments(value) {
store.dispatch('updateHideComments', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideCommentPhotos = computed(() => store.getters.getHideCommentPhotos)
/**
* @param {boolean} value
*/
function updateHideCommentPhotos(value) {
store.dispatch('updateHideCommentPhotos', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideLiveStreams = computed(() => store.getters.getHideLiveStreams)
/**
* @param {boolean} value
*/
function updateHideLiveStreams(value) {
store.dispatch('updateHideLiveStreams', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideUpcomingPremieres = computed(() => store.getters.getHideUpcomingPremieres)
/**
* @param {boolean} value
*/
function updateHideUpcomingPremieres(value) {
store.dispatch('updateHideUpcomingPremieres', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideSharingActions = computed(() => store.getters.getHideSharingActions)
/**
* @param {boolean} value
*/
function updateHideSharingActions(value) {
store.dispatch('updateHideSharingActions', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChapters = computed(() => store.getters.getHideChapters)
/**
* @param {boolean} value
*/
function updateHideChapters(value) {
store.dispatch('updateHideChapters', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideFeaturedChannels = computed(() => store.getters.getHideFeaturedChannels)
/**
* @param {boolean} value
*/
function updateHideFeaturedChannels(value) {
store.dispatch('updateHideFeaturedChannels', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelShorts = computed(() => store.getters.getHideChannelShorts)
/**
* @param {boolean} value
*/
function updateHideChannelShorts(value) {
store.dispatch('updateHideChannelShorts', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelPlaylists = computed(() => store.getters.getHideChannelPlaylists)
/**
* @param {boolean} value
*/
function updateHideChannelPlaylists(value) {
store.dispatch('updateHideChannelPlaylists', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelPodcasts = computed(() => store.getters.getHideChannelPodcasts)
/**
* @param {boolean} value
*/
function updateHideChannelPodcasts(value) {
store.dispatch('updateHideChannelPodcasts', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelReleases = computed(() => store.getters.getHideChannelReleases)
/**
* @param {boolean} value
*/
function updateHideChannelReleases(value) {
store.dispatch('updateHideChannelReleases', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelCourses = computed(() => store.getters.getHideChannelCourses)
/**
* @param {boolean} value
*/
function updateHideChannelCourses(value) {
store.dispatch('updateHideChannelCourses', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelCommunity = computed(() => store.getters.getHideChannelCommunity)
/**
* @param {boolean} value
*/
function updateHideChannelCommunity(value) {
store.dispatch('updateHideChannelCommunity', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideChannelHome = computed(() => store.getters.getHideChannelHome)
/**
* @param {boolean} value
*/
function updateHideChannelHome(value) {
store.dispatch('updateHideChannelHome', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideSubscriptionsVideos = computed(() => store.getters.getHideSubscriptionsVideos)
/**
* @param {boolean} value
*/
function updateHideSubscriptionsVideos(value) {
store.dispatch('updateHideSubscriptionsVideos', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideSubscriptionsShorts = computed(() => store.getters.getHideSubscriptionsShorts)
/**
* @param {boolean} value
*/
function updateHideSubscriptionsShorts(value) {
store.dispatch('updateHideSubscriptionsShorts', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideSubscriptionsLive = computed(() => store.getters.getHideSubscriptionsLive)
const hideSubscriptionsLiveTooltip = computed(() => {
return t('Tooltips.Distraction Free Settings.Hide Subscriptions Live', {
appWideSetting: t('Settings.Distraction Free Settings.Hide Live Streams'),
subsection: t('Settings.Distraction Free Settings.Sections.General'),
settingsSection: t('Settings.Distraction Free Settings.Distraction Free Settings')
})
})
/**
* @param {boolean} value
*/
function updateHideSubscriptionsLive(value) {
store.dispatch('updateHideSubscriptionsLive', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideSubscriptionsCommunity = computed(() => store.getters.getHideSubscriptionsCommunity)
/**
* @param {boolean} value
*/
function updateHideSubscriptionsCommunity(value) {
store.dispatch('updateHideSubscriptionsCommunity', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const showDistractionFreeTitles = computed(() => store.getters.getShowDistractionFreeTitles)
/**
* @param {boolean} value
*/
function updateShowDistractionFreeTitles(value) {
store.dispatch('updateShowDistractionFreeTitles', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const showAddedChannelsHidden = computed(() => store.getters.getShowAddedChannelsHidden)
function handleAddedChannelsHidden() {
store.dispatch('updateShowAddedChannelsHidden', !showAddedChannelsHidden.value)
}
/** @type {import('vue').ComputedRef<any[]>} */
const channelsHidden = computed(() => {
return JSON.parse(store.getters.getChannelsHidden).map((ch) => {
// Legacy support
if (typeof ch === 'string') {
return { name: ch, preferredName: '', icon: '' }
}
return ch
})
})
/**
* @param {any[]} value
*/
function handleChannelsHidden(value) {
store.dispatch('updateChannelsHidden', JSON.stringify(value))
}
/** @type {import('vue').ComputedRef<boolean>} */
const showAddedForbiddenTitles = computed(() => store.getters.getShowAddedForbiddenTitles)
function handleAddedForbiddenTitles() {
store.dispatch('updateShowAddedForbiddenTitles', !showAddedForbiddenTitles.value)
}
/** @type {import('vue').ComputedRef<string[]>} */
const forbiddenTitles = computed(() => JSON.parse(store.getters.getForbiddenTitles))
/**
* @param {string[]} value
*/
function handleForbiddenTitles(value) {
store.dispatch('updateForbiddenTitles', JSON.stringify(value))
}
/** @type {import('vue').ComputedRef<boolean>} */
const hideWatchedSubs = computed(() => store.getters.getHideWatchedSubs)
/**
* @param {boolean} value
*/
function updateHideWatchedSubs(value) {
store.dispatch('updateHideWatchedSubs', value)
}
onMounted(() => {
verifyChannelsHidden()
})
function handleInvalidChannel() {
showToast(t('Settings.Distraction Free Settings.Hide Channels Invalid'))
}
function handleChannelAPIError() {
showToast(t('Settings.Distraction Free Settings.Hide Channels API Error'))
}
function handleChannelsExists() {
showToast(t('Settings.Distraction Free Settings.Hide Channels Already Exists'))
}
/**
* @param {string} text
*/
async function findChannelTagInfoWrapper(text) {
return await findChannelTagInfo(text, backendOptions.value)
}
async function verifyChannelsHidden() {
const channelsHiddenCpy = [...channelsHidden.value]
for (let i = 0; i < channelsHiddenCpy.length; i++) {
const tag = channelsHiddenCpy[i]
// if channel has been processed and confirmed as non existent, skip
if (tag.invalid) continue
// process if no preferred name and is possibly a YouTube ID
if ((tag.preferredName === '' || !tag.icon) && checkYoutubeChannelId(tag.name)) {
channelHiderDisabled.value = true
const { preferredName, icon, iconHref, invalidId } = await findChannelTagInfoWrapper(tag.name)
if (invalidId) {
channelsHiddenCpy[i] = { name: tag.name, invalid: invalidId }
} else {
channelsHiddenCpy[i] = { name: tag.name, preferredName, icon, iconHref }
}
// update on every tag in case it closes
handleChannelsHidden(channelsHiddenCpy)
}
}
channelHiderDisabled.value = false
}
</script>
<style scoped src="./DistractionSettings.css" />

View File

@@ -0,0 +1,107 @@
<template>
<FtSettingsSection
:title="$t('Settings.Download Settings.Download Settings')"
>
<FtFlexBox>
<FtSelect
:placeholder="$t('Settings.Download Settings.Download Behavior')"
:value="downloadBehavior"
:select-names="downloadBehaviorNames"
:select-values="DOWNLOAD_BEHAVIOR_VALUES"
:icon="['fas', 'download']"
@change="updateDownloadBehavior"
/>
</FtFlexBox>
<template
v-if="downloadBehavior === 'download'"
>
<FtFlexBox
class="settingsFlexStart500px"
>
<FtToggleSwitch
:label="$t('Settings.Download Settings.Ask Download Path')"
:default-value="downloadAskPath"
@change="updateDownloadAskPath"
/>
</FtFlexBox>
<template
v-if="!downloadAskPath"
>
<FtFlexBox>
<FtInput
class="folderDisplay"
:placeholder="downloadFolderPath"
:show-action-button="false"
:show-label="false"
:disabled="true"
/>
</FtFlexBox>
<FtFlexBox>
<FtButton
:label="$t('Settings.Download Settings.Choose Path')"
@click="chooseDownloadFolder"
/>
</FtFlexBox>
</template>
</template>
</FtSettingsSection>
</template>
<script setup>
import { computed } from 'vue'
import { useI18n } from '../../composables/use-i18n-polyfill'
import FtButton from '../FtButton/FtButton.vue'
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
import FtInput from '../FtInput/FtInput.vue'
import FtSelect from '../FtSelect/FtSelect.vue'
import FtSettingsSection from '../FtSettingsSection/FtSettingsSection.vue'
import FtToggleSwitch from '../FtToggleSwitch/FtToggleSwitch.vue'
import store from '../../store/index'
import { DefaultFolderKind } from '../../../constants'
const DOWNLOAD_BEHAVIOR_VALUES = [
'download',
'open'
]
const { t } = useI18n()
const downloadBehaviorNames = computed(() => [
t('Settings.Download Settings.Download in app'),
t('Settings.Download Settings.Open in web browser')
])
/** @type {import('vue').ComputedRef<'download' | 'open'>} */
const downloadBehavior = computed(() => store.getters.getDownloadBehavior)
/**
* @param {'download' | 'open'} value
*/
function updateDownloadBehavior(value) {
store.dispatch('updateDownloadBehavior', value)
}
/** @type {import('vue').ComputedRef<boolean>} */
const downloadAskPath = computed(() => store.getters.getDownloadAskPath)
/**
* @param {boolean} value
*/
function updateDownloadAskPath(value) {
store.dispatch('updateDownloadAskPath', value)
}
/** @type {import('vue').ComputedRef<string>} */
const downloadFolderPath = computed(() => store.getters.getDownloadFolderPath)
function chooseDownloadFolder() {
if (process.env.IS_ELECTRON) {
window.ftElectron.chooseDefaultFolder(DefaultFolderKind.DOWNLOADS)
}
}
</script>
<style scoped src="./DownloadSettings.css" />

View File

@@ -31,19 +31,16 @@ import { onMounted, ref } from 'vue'
import FtSettingsSection from '../FtSettingsSection/FtSettingsSection.vue'
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
import FtToggleSwitch from '../FtToggleSwitch/FtToggleSwitch.vue'
import FtPrompt from '../FtPrompt/FtPrompt.vue'
import { IpcChannels } from '../../../constants'
const replaceHttpCacheLoading = ref(true)
const replaceHttpCache = ref(false)
const showRestartPrompt = ref(false)
onMounted(async () => {
if (process.env.IS_ELECTRON) {
const { ipcRenderer } = require('electron')
replaceHttpCache.value = await ipcRenderer.invoke(IpcChannels.GET_REPLACE_HTTP_CACHE)
replaceHttpCache.value = await window.ftElectron.getReplaceHttpCache()
}
replaceHttpCacheLoading.value = false
@@ -69,8 +66,7 @@ function handleReplaceHttpCache(value) {
}
if (process.env.IS_ELECTRON) {
const { ipcRenderer } = require('electron')
ipcRenderer.send(IpcChannels.TOGGLE_REPLACE_HTTP_CACHE)
window.ftElectron.toggleReplaceHttpCache()
}
}
</script>

View File

@@ -0,0 +1,162 @@
<template>
<FtSettingsSection
:title="$t('Settings.External Player Settings.External Player Settings')"
>
<FtFlexBox>
<FtSelect
:placeholder="$t('Settings.External Player Settings.External Player')"
:value="externalPlayer"
:select-names="externalPlayerNames"
:select-values="externalPlayerValues"
:tooltip="$t('Tooltips.External Player Settings.External Player')"
:icon="['fas', 'external-link-alt']"
@change="updateExternalPlayer"
/>
</FtFlexBox>
<FtFlexBox>
<FtToggleSwitch
:label="$t('Settings.External Player Settings.Ignore Unsupported Action Warnings')"
:default-value="externalPlayerIgnoreWarnings"
:disabled="externalPlayer === ''"
:compact="true"
:tooltip="$t('Tooltips.External Player Settings.Ignore Warnings')"
@change="updateExternalPlayerIgnoreWarnings"
/>
<FtToggleSwitch
:label="$t('Settings.External Player Settings.Ignore Default Arguments')"
:default-value="externalPlayerIgnoreDefaultArgs"
:disabled="externalPlayer === ''"
:compact="true"
:tooltip="$t('Tooltips.External Player Settings.Ignore Default Arguments')"
@change="updateExternalPlayerIgnoreDefaultArgs"
/>
</FtFlexBox>
<FtFlexBox
v-if="externalPlayer !== ''"
class="settingsFlexStart460px"
>
<FtInput
:placeholder="$t('Settings.External Player Settings.Custom External Player Executable')"
:show-action-button="false"
:show-label="true"
:value="externalPlayerExecutable"
:tooltip="$t('Tooltips.External Player Settings.Custom External Player Executable')"
@input="updateExternalPlayerExecutable"
/>
</FtFlexBox>
<FtFlexBox
v-if="externalPlayer !== ''"
>
<FtInputTags
:label="$t('Settings.External Player Settings.Custom External Player Arguments')"
:tag-name-placeholder="$t('Settings.External Player Settings.Custom External Player Arguments')"
:tag-list="externalPlayerCustomArgs"
:tooltip="externalPlayerCustomArgsTooltip"
:show-tags="showAddedExternalPlayerCustomArgs"
@change="handleExternalPlayerCustomArgs"
@toggle-show-tags="handleAddedExternalPayerCustomArgs"
/>
</FtFlexBox>
</FtSettingsSection>
</template>
<script setup>
import { computed } from 'vue'
import { useI18n } from '../composables/use-i18n-polyfill'
import FtSettingsSection from './FtSettingsSection/FtSettingsSection.vue'
import FtSelect from './FtSelect/FtSelect.vue'
import FtInput from './FtInput/FtInput.vue'
import FtToggleSwitch from './FtToggleSwitch/FtToggleSwitch.vue'
import FtFlexBox from './ft-flex-box/ft-flex-box.vue'
import FtInputTags from './FtInputTags/FtInputTags.vue'
import store from '../store/index'
const { t } = useI18n()
/** @type {import('vue').ComputedRef<string>} */
const externalPlayer = computed(() => store.getters.getExternalPlayer)
/** @type {import('vue').ComputedRef<string[]>} */
const externalPlayerNames = computed(() => {
return store.getters.getExternalPlayerNames.map((name) => {
return name === 'None'
? t('Settings.External Player Settings.Players.None.Name')
: name
})
})
/** @type {import('vue').ComputedRef<string[]>} */
const externalPlayerValues = computed(() => store.getters.getExternalPlayerValues)
/** @type {import('vue').ComputedRef<string>} */
const externalPlayerExecutable = computed(() => store.getters.getExternalPlayerExecutable)
/** @type {import('vue').ComputedRef<boolean>} */
const externalPlayerIgnoreWarnings = computed(() => store.getters.getExternalPlayerIgnoreWarnings)
/** @type {import('vue').ComputedRef<boolean>} */
const externalPlayerIgnoreDefaultArgs = computed(() => store.getters.getExternalPlayerIgnoreDefaultArgs)
/** @type {import('vue').ComputedRef<string[]>} */
const externalPlayerCustomArgs = computed(() => JSON.parse(store.getters.getExternalPlayerCustomArgs))
const externalPlayerCustomArgsTooltip = computed(() => {
const tooltip = t('Tooltips.External Player Settings.Custom External Player Arguments')
const cmdArgs = store.getters.getExternalPlayerCmdArguments[externalPlayer.value]
if (cmdArgs && typeof cmdArgs.defaultCustomArguments === 'string' && cmdArgs.defaultCustomArguments !== '') {
const defaultArgs = t(
'Tooltips.External Player Settings.DefaultCustomArgumentsTemplate',
{
defaultCustomArguments: cmdArgs.defaultCustomArguments
})
return `${tooltip} ${defaultArgs}`
}
return tooltip
})
/**
* @param {string} value
*/
function updateExternalPlayer(value) {
store.dispatch('updateExternalPlayer', value)
}
/**
* @param {boolean} value
*/
function updateExternalPlayerIgnoreWarnings(value) {
store.dispatch('updateExternalPlayerIgnoreWarnings', value)
}
/**
* @param {boolean} value
*/
function updateExternalPlayerIgnoreDefaultArgs(value) {
store.dispatch('updateExternalPlayerIgnoreDefaultArgs', value)
}
/**
* @param {string} value
*/
function updateExternalPlayerExecutable(value) {
store.dispatch('updateExternalPlayerExecutable', value)
}
/**
* @param {string[]} args
*/
function handleExternalPlayerCustomArgs(args) {
store.dispatch('updateExternalPlayerCustomArgs', JSON.stringify(args))
}
/** @type {import('vue').ComputedRef<boolean>} */
const showAddedExternalPlayerCustomArgs = computed(() => store.getters.getShowAddedExternalPlayerCustomArgs)
function handleAddedExternalPayerCustomArgs() {
store.dispatch('updateShowAddedExternalPlayerCustomArgs', !showAddedExternalPlayerCustomArgs.value)
}
</script>

View File

@@ -1,11 +1,11 @@
.grid {
display: grid;
grid-gap: 8px;
gap: 8px;
grid-template-columns: repeat(auto-fill, minmax(262px, 1fr));
justify-content: space-evenly;
}
.list {
display: grid;
grid-gap: 4px;
gap: 4px;
}

View File

@@ -0,0 +1,49 @@
<template>
<div
class="ft-auto-load-next-page-wrapper"
>
<div
v-observe-visibility="observeVisibilityOptions"
>
<!--
Dummy element to be observed by Intersection Observer
-->
</div>
<slot />
</div>
</template>
<script setup>
import { computed } from 'vue'
import store from '../store/index'
const emit = defineEmits(['load-next-page'])
/** @type {import('vue').ComputedRef<boolean>} */
const generalAutoLoadMorePaginatedItemsEnabled = computed(() => {
return store.getters.getGeneralAutoLoadMorePaginatedItemsEnabled
})
const observeVisibilityOptions = computed(() => {
if (generalAutoLoadMorePaginatedItemsEnabled.value) {
return {
callback: (isVisible, _entry) => {
// This is also fired when **hidden**
// No point doing anything if not visible
if (isVisible) {
emit('load-next-page')
}
},
intersection: {
// Only when it intersects with N% above bottom
rootMargin: '0% 0% 0% 0%',
},
// Callback responsible for loading multiple pages
once: false,
}
} else {
return false
}
})
</script>

View File

@@ -20,6 +20,7 @@
gap: 10px;
margin: 5px;
box-shadow: 0 1px 2px rgb(0 0 0 / 50%);
border: 2px solid;
}
.btn:disabled {

View File

@@ -0,0 +1,50 @@
<template>
<button
class="btn ripple"
:style="{
color: textColor,
backgroundColor: backgroundColor,
borderColor: backgroundColor
}"
@click="click"
>
<slot>
<FontAwesomeIcon
v-if="icon"
:icon="icon"
/>
{{ label }}
</slot>
</button>
</template>
<script setup>
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
defineProps({
label: {
type: String,
default: ''
},
textColor: {
type: String,
default: 'var(--text-with-accent-color)'
},
backgroundColor: {
type: String,
default: 'var(--accent-color)'
},
icon: {
type: Array,
default: null
}
})
const emit = defineEmits(['click'])
function click() {
emit('click')
}
</script>
<style scoped src="./FtButton.css" />

View File

@@ -0,0 +1,96 @@
<template>
<router-link
v-if="!selectable"
class="bubblePadding"
:aria-labelledby="id"
:to="`/channel/${channelId}`"
>
<img
v-if="channelThumbnail != null"
class="bubble"
:src="channelThumbnail"
alt=""
>
<FontAwesomeIcon
v-else
:icon="['fas', 'circle-user']"
class="bubble"
fixed-width
/>
<div
:id="id"
class="channelName"
>
{{ channelName }}
</div>
</router-link>
<div
v-else
class="bubblePadding"
:aria-checked="selected"
role="checkbox"
tabindex="0"
:aria-labelledby="id"
@click="handleClick"
@keydown.space.enter.prevent="handleClick"
>
<img
class="bubble"
:src="channelThumbnail"
alt=""
>
<div
v-if="selected"
class="bubble selected"
>
<FontAwesomeIcon
:icon="['fas', 'check']"
class="icon"
/>
</div>
<div
:id="id"
class="channelName"
>
{{ channelName }}
</div>
</div>
</template>
<script setup>
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { useId } from 'vue'
const props = defineProps({
channelId: {
type: String,
required: true
},
channelName: {
type: String,
required: true
},
channelThumbnail: {
type: String,
default: null
},
selectable: {
type: Boolean,
default: false
},
selected: {
type: Boolean,
default: false
}
})
const id = useId()
const emit = defineEmits(['change'])
function handleClick() {
emit('change', !props.selected)
}
</script>
<style scoped src="./FtChannelBubble.css" />

View File

@@ -1,7 +1,7 @@
/* stylelint-disable no-descending-specificity */
.pure-checkbox input[type='checkbox'] {
border: 0;
clip: rect(0 0 0 0);
clip-path: circle(0);
block-size: 1px;
margin: -1px;
overflow: hidden;

View File

@@ -5,10 +5,10 @@
</h3>
<template
v-for="(label, index) in labels"
:key="values[index]"
>
<input
:id="id + values[index]"
:key="index"
v-model="modelValue"
:name="id"
:value="values[index]"
@@ -17,7 +17,6 @@
type="checkbox"
>
<label
:key="label"
:for="id + values[index]"
>
{{ label }}
@@ -27,12 +26,11 @@
</template>
<script setup>
import { ref, watch } from 'vue'
import { useId } from '../../composables/use-id-polyfill'
import { useId } from 'vue'
const id = useId()
const props = defineProps({
defineProps({
title: {
type: String,
required: true
@@ -49,39 +47,9 @@ const props = defineProps({
type: Boolean,
default: false
},
// Required for v-model in the parent component (https://v2.vuejs.org/v2/guide/components#Using-v-model-on-Components)
// Do not rename or remove
// TODO: Replace with defineModel in Vue 3
value: {
type: Array,
required: true
}
})
// Required for v-model in the parent component (https://v2.vuejs.org/v2/guide/components#Using-v-model-on-Components)
// Do not rename or remove
// TODO: Replace with defineModel in Vue 3
const emit = defineEmits(['input'])
/** @type {import('vue').Ref<string[]>} */
const modelValue = ref(props.value)
watch(
modelValue,
(newValue) => {
emit('input', newValue)
},
{ deep: true }
)
watch(
() => props.value,
(newValue) => {
modelValue.value = newValue
},
{ deep: true }
)
const modelValue = defineModel({ type: Array, required: true })
</script>
<style scoped src="./FtCheckboxList.css" />

View File

@@ -4,7 +4,7 @@
class="vote-count"
>
<!-- Format the votes to be split by commas ie. 1000 -> 1,000 -->
{{ $t('Channel.Community.votes', {votes: formattedVotes}) }}
{{ $t('Channel.Posts.votes', {votes: formattedVotes}) }}
</div>
<div
v-for="(choice, index) in data.content"
@@ -52,13 +52,13 @@
v-if="!revealAnswer"
class="option-text"
>
<FontAwesomeIcon :icon="['fas', 'eye']" /> {{ $t('Channel.Community.Reveal Answers') }}
<FontAwesomeIcon :icon="['fas', 'eye']" /> {{ $t('Channel.Posts.Reveal Answers') }}
</div>
<div
v-else
class="option-text"
>
<FontAwesomeIcon :icon="['fas', 'eye-slash']" /> {{ $t('Channel.Community.Hide Answers') }}
<FontAwesomeIcon :icon="['fas', 'eye-slash']" /> {{ $t('Channel.Posts.Hide Answers') }}
</div>
</div>
</div>

View File

@@ -67,11 +67,11 @@
.bottomSection {
color: var(--tertiary-text-color);
display: block;
flex-direction: column;
display: flex;
align-items: center;
font-size: 15px;
margin-block-start: 4px;
max-inline-size: 210px;
max-inline-size: 100%;
text-align: start;
@media screen and (width <= 680px) {
@@ -88,6 +88,10 @@
.likeCount {
margin-inline: 5px 6px;
}
.shareButton {
margin-inline-start: 10px;
}
}
.playlistWrapper {
@@ -110,7 +114,7 @@
.playlistText {
margin-inline-start: 10px;
inline-size: 50%;
word-wrap: break-word;
overflow-wrap: break-word;
.playlistAuthor {
font-size: small;

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